matlab中的分水岭算法

发布于 2024-11-24 14:32:25 字数 268 浏览 2 评论 0原文

任何人都知道如何在 matlab 中编写函数来分割细胞并计算平均值 使用分水岭算法的像元区域? 任何帮助将不胜感激。谢谢你!

这是酵母细胞的图像

yeast cells

anyone knows how to write a function in matlab to segment the cells and compute the average
cell area using the watershed algorithm?
any help would be much appreciated. Thank you!

Here is an image of yeast cells

yeast cells

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

三寸金莲 2024-12-01 14:32:25

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

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

%# read image
img = imread('https://i.sstatic.net/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 在标记图像上提取所需的统计信息。

Here's one way to segment the image using watershed. There's plenty more you could do (e.g. fuse cells with two nuclei if they haven't completed cytokinesis yet), but the steps below should give you a first idea.

(1) Determine cell-background threshold, cell-nucleus threshold

%# read image
img = imread('https://i.sstatic.net/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,[])

enter image description here

(2) Smooth the raw image (to avoid oversegmentation) and impose nuclei as minima

[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);

enter image description here

(3) Watershed, mask cells, and display

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

lblImg = bwlabel(ws);

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

enter image description here

(4) Now you can use REGIONPROPS on the labeled image to extract the statistics you want.

失退 2024-12-01 14:32:25

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

See watershed in the Image Processing toolbox and this post on cell segmentation on the 'Steve on Image Processing' blog.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文