首页 文章

matlab中的分水岭算法

提问于
浏览
8

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

这是酵母细胞的图像

yeast cells

2 回答

  • 13

    请参阅图像处理工具箱中的watershed和'Steve on Image Processing'博客上的单元格分段this post .

  • 0

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

    (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,[])
    

    enter image description here

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

    enter image description here

    (3)分水岭,掩模细胞和显示器

    ws = watershed(filtImgM);
    ws(~cellMsk) = 0;
    
    lblImg = bwlabel(ws);
    
    figure,imshow(label2rgb(lblImg,'jet','k','shuffle'));
    

    enter image description here

    (4)现在,您可以在带标签的图像上使用REGIONPROPS来提取所需的统计数据 .

相关问题