首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matlab中的分水岭算法

matlab中的分水岭算法
EN

Stack Overflow用户
提问于 2011-07-14 18:46:40
回答 2查看 10.2K关注 0票数 9

有人知道如何在matlab中编写一个函数来分割单元并使用watershed algorithm计算平均单元面积吗?任何帮助都将不胜感激。谢谢!

这是酵母细胞的图像

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-14 22:12:00

这里有一种使用分水岭分割图像的方法。你还可以做更多的事情(例如,如果两个核的细胞还没有完成胞质分裂,就将它们融合在一起),但下面的步骤应该会给你一个初步的想法。

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

代码语言:javascript
复制
%# 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)平滑原始图像(以避免过度分割),并将核作为最小值

代码语言:javascript
复制
[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)分水岭、遮罩单元和显示

代码语言:javascript
复制
ws = watershed(filtImgM);
ws(~cellMsk) = 0;

lblImg = bwlabel(ws);

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

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

票数 13
EN

Stack Overflow用户

发布于 2011-07-14 18:54:52

请参阅图像处理工具箱中的watershed和“Steve on Image Processing”博客上的关于细胞分割的this post

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6691991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档