9

任何人都知道如何在matlab中编写一个函数来分割细胞并使用分水岭算法计算平均细胞面积?任何帮助将非常感激。谢谢!

这是酵母细胞的图像

酵母细胞

4

2 回答 2

13

这是使用分水岭分割图像的一种方法。您可以做的还有很多(例如,如果细胞尚未完成胞质分裂,则将细胞与两个细胞核融合),但下面的步骤应该会给您一个初步的想法。

(1) 确定细胞-背景阈值、细胞-核阈值

%# read image
img = imread('http://i.stack.imgur.com/nFDkX.png');
%# normalize to 0...1
imgN = double(img-min(img(:)))/(max(img(:)-min(img(:))));
th1=graythresh(imgN);
th2 = graythresh(imgN(imgN>th1));

cellMsk = imgN>th1;
nucMsk = imgN>th2;

figure,imshow(cellMsk+nucMsk,[])

在此处输入图像描述

(2) 平滑原始图像(以避免过度分割)并将核作为最小值

[xx,yy]=ndgrid(-5:5,-5:5);
gf = exp((-xx.^2-yy.^2)/20);
filtImg = conv2(imgN,gf,'same');

figure,imshow(filtImg,[])

filtImgM = imimposemin(-filtImg,nucMsk);

在此处输入图像描述

(3) 分水岭、掩膜单元和显示

ws = watershed(filtImgM);
ws(~cellMsk) = 0;

lblImg = bwlabel(ws);

figure,imshow(label2rgb(lblImg,'jet','k','shuffle'));

在此处输入图像描述

(4) 现在您可以在标记的图像上使用REGIONPROPS来提取您想要的统计信息。

于 2011-07-14T14:11:59.923 回答
0

请参阅watershed图像处理工具箱和“Steve 图像处理”博客上关于细胞分割的这篇文章

于 2011-07-14T10:54:52.410 回答