任何人都知道如何在matlab中编写函数来分割单元格并计算平均值
单元格区域使用watershed algorithm吗?
任何帮助将非常感激。谢谢!

这是酵母细胞的图像

最佳答案

这是一种使用分水岭分割图像的方法。您还可以做更多的事情(例如,如果细胞尚未完成胞质 split ,则将其与两个细胞核融合),但是以下步骤应该为您提供第一个思路。

(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提取所需的统计信息。

10-01 13:28