This page is located in archive. Go to the latest version of this course pages.

Lab 02 : MATLAB: Segmentation


  • Simple cell segmentation
  • Count the total number of cells and mean size

HW02 Assignment

For the homework (HW02), follow the emphasized links to get to the detailed description.

  • [5 pts] - Cell segmentation, build an image processing pipeline for cell segmentation in microscopy images (see detailed description).

Upload your report in PDF format to BRUTE to the assignment L02-segmentation. Please name the PDF file as hw01_<your_fel_id>.pdf. Zip both the MATLAB code and pdf report in a single file and upload to Brute.

1. Cell segmentation

Segmentation is the task of describing image areas by some context information, like finding cells in microscopy images. We want to construct an automated detection procedure. A cell is typically a roundish dark object, so we first need to separate cell-like pixels from background and other structures by thresholding with a suitable threshold level. After reading (imopen) and converting to grayscale image rgb2gray,

I = imread('5830.png');
Ig = rgb2gray(I);
we can attempt to find optimal threshold via
level = graythresh(I_gray);
Ibw = im2bw(I_gray, level);

  • If the automatic thresholding fails, we may need to set the threshold level manually.
  • Image filtering like imgaussfilt prior to thresholding may give us better result.
  • Binary morphology filters and filling holes may help reduce artifacts in the binarized image.
  • To select the threshold level manually, a look at the histogram can be useful (as below)

[pixelCount grayLevels] = imhist(I_gray);

We then search isolated (connected) areas in the binarized image and use regionprops to retrieve properties of each region:

[B, L] = bwboundaries(Ibw, 'noholes');
stats = regionprops('table',L,'Area');

  • we can specify multiple measures in regionprops as Area may not be sufficient to distinguish between false and true detection. Consider Eccentricity and Solidity measures
  • to view labels as a colored image, use
    imshow(label2rgb(L, @jet, [.5 .5 .5]))
  • (optional) if multiple cells are labeled as one blob, a watershed filter can sometimes separate them.
    % Watershed - first compute distances for each pixel to the boundary 
    % but since bwdist computes distances to non-zero pixels, we need to 
    % logicaly revert the segmentation (~Ibw)
    D = bwdist(~Ibw);
    % If the watershed produces too many splits, try to smooth the distance image
    D = imgaussfilt(-D, 1.5);
    % Set distance to Infinity for places, where our binary image is zero
    D(~Ibw) = Inf;
    % Get labels by watershed transform
    Lw = watershed(D, 8);
    Lw(~Ibw) = 0;

Finally, we want to filter the detected cell regions by the retrieved measures and plot their boundary in the original input image I

hold on
for k = 1:length(B)
    if stats.Area(k) > ?? 
        boundary = B{k};
        plot(boundary(:,2), boundary(:,1), 'y', 'LineWidth', 2)

Task Find suitable criterion on region properties (like Area, Solidity etc.) to select cell-regions for each of the following data: 5140.png 5830.png histopato1.png histopato2.png

2. Some useful commands

help, rand, meshgrid, surf, imread, rgb2gray, imshow, lookfor, edit, path, addpath, format,
end, reshape, inf, nan, isempty, floor, ceil, round, abs, sign, ops,
length, linspace, sort, det, rank, load, save, fprintf, axis, title, 
contour, mesh, surf, colormap, print, for, if, while, function

Plot the resulting segmentation as boundary contour over the original image, like shown in the last picture.


Python Help

courses/zsl/labs2022_02_matlabcellseg.txt · Last modified: 2022/02/10 10:01 by kaushsum