Source code for multiScaleAnalysis.Visualization.visualize_stitched_lowres


import numpy as np
import napari
import os
import cupy as cp
import skimage.transform
from tifffile import imread, imwrite

[docs] class image_visualizer_stitched(): """ This class generates visualizations of low-resolution segmentation results. """
[docs] def __init__(self): """ Initialize data folders and start Napari """ #initialize data folders rawdatafolder_parent = "folderpath" self.rawdatafolder = "rawdatafolder" self.segmentationfolder = "segmenteddatafolder" self.visualizedfolder = "outputfolder" #start napari viewer self.viewer = napari.Viewer()
[docs] def load_visualize_images(self, vis_param): """ Load images from folder and render them according Visualization parameters specified. :param vis_param: Python dictionary of visulization paramters, e.g. vis_param['camera_angle1'] """ # get all timepoints from folder dir_list = os.listdir(self.segmentationfolder) timepointlist = [] for path in dir_list: if path.startswith('t'): timepointlist.append(path) timepointlist.sort() # if you establish parameters, only open first timepoint if vis_param['establish_param'] == 1: timepointlist = ["t00000"] for i_time in timepointlist: # generate filepaths and folders segmentedimagepath = os.path.join(self.segmentationfolder, i_time, "1_CH488_000000sg.tif") segmentedimagepath_red = os.path.join(self.segmentationfolder, i_time, "1_CH488_000000sg_red.tif") segmentedimagepath_blue = os.path.join(self.segmentationfolder, i_time, "1_CH488_000000sg_blue.tif") segmentedimagepath_green = os.path.join(self.segmentationfolder, i_time, "1_CH488_000000sg_green.tif") rawimagepath = os.path.join(self.rawdatafolder, i_time, "1_CH488_000000.tif") rawimagepath_vessels = os.path.join(self.rawdatafolder, i_time, "1_CH594_000000.tif") visualization_folder1 = os.path.join(self.visualizedfolder, "angle_1a") visualization_folder2 = os.path.join(self.visualizedfolder, "angle_2a") try: os.makedirs(visualization_folder1) except OSError as error: pass try: os.makedirs(visualization_folder2) except OSError as error: pass visualized_file = os.path.join(visualization_folder1, i_time + ".tif") visualized_file2 = os.path.join(visualization_folder2, i_time + ".tif") # open images input_image_raw = imread(rawimagepath) input_image_vessel_raw = imread(rawimagepath_vessels) label_image = imread(segmentedimagepath) label_image_red = imread(segmentedimagepath_red) label_image_blue = imread(segmentedimagepath_blue) label_image_green = imread(segmentedimagepath_green) print(input_image_raw.shape) #downsample huge low-resolution raw images to same size as label images (which are isotropic in voxel size) input_image = skimage.transform.resize(input_image_raw, label_image.shape, order=0) input_image_vessels = skimage.transform.resize(input_image_vessel_raw, label_image.shape, order=0) print(input_image.shape) print(label_image.shape) # add images as layers image_layer = self.viewer.add_image(input_image, gamma=vis_param['raw_gamma'], contrast_limits=vis_param['raw_contrast_limits']) image_layer_vessels = self.viewer.add_image(input_image_vessels, gamma=vis_param['raw_gamma_vessel'], contrast_limits=vis_param['raw_contrast_limits_vessels'], blending=vis_param['blending1']) layer_image_rescaled = self.viewer.add_labels(label_image, opacity=vis_param['label_opacity'], blending=vis_param['blending1']) layer_image_red = self.viewer.add_image(label_image_red, opacity=vis_param['label_opacity'], blending=vis_param['blending2'], colormap='red') layer_image_blue = self.viewer.add_image(label_image_blue, opacity=vis_param['label_opacity'], blending=vis_param['blending2'],colormap='blue') layer_image_green = self.viewer.add_image(label_image_green, opacity=vis_param['label_opacity'], blending=vis_param['blending2'], colormap='green') layer_image_green.visible='true' #interesting hack to make it display colors # set rendering to 3D and set camera zoom parameters self.viewer.dims.ndisplay = vis_param['rendering_dimension'] self.viewer.camera.zoom = vis_param['camera_zoom'] # save a first camera position self.viewer.camera.angles = vis_param['camera_angle1'] imagereturn = self.viewer.screenshot(canvas_only=True, scale=vis_param['scale_to_save']) imwrite(visualized_file, imagereturn) # if you want to save a second camera position # get angle from napari by entering: viewer.camera.angles in console self.viewer.camera.angles = vis_param['camera_angle2'] imagereturn2 = self.viewer.screenshot(canvas_only=True,scale=vis_param['scale_to_save']) imwrite(visualized_file2, imagereturn2) # if you establish the parameters, run napari, otherwise delete the layers for next timepoint if vis_param['establish_param']==1: napari.run() else: self.viewer.layers.remove('input_image') self.viewer.layers.remove('label_image') self.viewer.layers.remove('input_image_vessels') self.viewer.layers.remove('label_image_red') self.viewer.layers.remove('label_image_green') self.viewer.layers.remove('label_image_blue')
if __name__ == '__main__': #vis_param = visualization_param visualization_param = dict( camera_angle1 = (169, -18, 72), camera_angle2 = (18, -53, -120), camera_zoom=0.7, raw_contrast_limits=(300, 1400), raw_contrast_limits_vessels=(600, 15027), raw_gamma=0.9, raw_gamma_vessel=0.5, label_opacity=0.51, rendering_dimension=3, blending1='translucent', blending2='additive', establish_param=0, scale_to_save=5 ) imagevisu = image_visualizer_stitched() rawdatafolder_parent = "/archive/bioinformatics/Danuser_lab/Fiolka/Manuscripts/2023-multiscale/rawdata/12791724/Exemplary_VisualizationDataset" imagevisu.rawdatafolder = os.path.join(rawdatafolder_parent, "low_resolution_rawdata") # segmented data imagevisu.segmentationfolder = os.path.join(rawdatafolder_parent, "low_resolutionsegmentation_labelimages") imagevisu.visualizedfolder = imagevisu.rawdatafolder + "_visualized" imagevisu.load_visualize_images(visualization_param)