diff --git a/RunExample4.m b/RunExample4.m index 916aaff91d93991cb72098aad10e2c99783a285d..ecbabab592ee3ae1a21327e655985c8fb92d446b 100644 --- a/RunExample4.m +++ b/RunExample4.m @@ -1,4 +1,10 @@ %% Display an image on the tissue surface. +% We take the same data than for the first example and regenerate the +% deproj object for it. +% +% Then we plot the segmentation results (in 3D) and map the image of the 2D +% projection image on the tissue surface. + %% Clear all. @@ -8,47 +14,17 @@ clc %% Parameters, scripts and files location. -% Add DeProj functions to the path. +% Same things that for example 1. I will skip comments. addpath('./src') - -% Where are the images. root_folder = 'samples'; - -% You can provide directly the segmentation results as a mask image, and -% the code below will convert it into a list of objects. -% For this to work, the mask image must be an 'ImageJ' mask, that is: the -% cell contours must be black (pixel value == 0) and the cell interiors -% must be white (pixel value > 0). mask_filename = 'Segmentation-2.tif'; - -% The height-map is an image that stores at every pixel the location of the -% plane of interest in the source 3D image. Since the pixel values store -% the index of the plane, we will need to convert it to an elevation in µm -% (see the voxel_depth parameter below). heightmap_filename = 'HeightMap-2.tif'; - -% The image to map on the tissue surface. In this example we simply take -% a capture of the projection results. image_file_path = 'static/Projection-2.png'; - -% Pixel XY size. -% Physical size of a pixel in X and Y. This will be used to report sizes in -% µm. pixel_size = 0.183; % µm units = 'µm'; - -% Z spacing. -% How many µm bewtween each Z-slices. We need this to convert the -% height-map values, that stores the plane of interest, into µm. voxel_depth = 1.; % µm - - -% Try to remove objects that have a Z position equal to 0. Normally this -% value reports objects that are out of the region-of-interest. prune_zeros = true; inpaint_zeros = true; - -% Invert z for plotting. invert_z = true; %% Read files. @@ -72,20 +48,33 @@ dpr = deproj.from_heightmap( ... inpaint_zeros, ... prune_zeros ); -%% Load the image to map. - -close all +%% Load the image to map and display it. +% The image to display must be a 2D image, colored of grayscale. Ideally it +% has the same number of pixels and the same pixel size that the +% segmentation image that helped creating the deproj object. +% What really matter is that we can have share X,Y coordinates thanks to +% the pixel size and origin of the image. fprintf('Opening the image to map: %s\n', image_file_path ) +% Since it is a color image, we also load the LUT in the Tmap variable. [ T, Tmap ] = imread( image_file_path ); figure hold on axis equal +% Plot the segmentation. If we pass 'w' to the 'plot_values_contour', the +% cell faces will be transparent and their border will be painted in white. hc = dpr.plot_values_contour( 'w', gca ); hc.LineWidth = 1; + +% This is the the command to plot the image on the tissue surface. Since we +% have a color image, we pass the 'Tmap' array that contains the LUT of the +% image. If you have a grayscale image, just pass the empty array []. dpr.texture_image( T, Tmap, pixel_size ); + +% Put some lighting and orientation so that we can get a feeling of the +% tissue ripples. axis off lighting gouraud light