首页 文章

分水岭算法的过分割

提问于
浏览
5

我按照Mathworks.com中的2-D Watershed example来分隔连接的对象,如下图所示:

Imgur

代码总结如下:

bw = imread('some_binary_image.tif');

D = -bwdist(~bw);

D(~bw) = -Inf;

L = watershed(D);

结果是:

Imgur

中心的颗粒已分成两部分 . 有什么方法可以避免过度细分吗?

谢谢,lennon310, chessboard 确实适用于我的大多数图像,但仍有一些情况,它没有 . 例如,以下二进制图像:
Imgur

使用棋盘将导致:
Imgur

由于我有数百张图像,似乎很难找到适合所有图像的参数组合 . 我想知道我是否需要结合使用棋盘,城市街区等取得的好成绩......

2 回答

  • 7

    使用 max(abs(x1-x2),abs(y1-y2)) 作为距离度量(棋盘),并在 watershed 函数中使用八连接邻域:

    bw=im2bw(I);
    
    D = -bwdist(~bw,'chessboard');
    imagesc(D)
    D(~bw) = -Inf;
    
    L = watershed(D,8);
    figure,imagesc(L)
    

    结果:
    enter image description here

  • 3

    我一直处理同样的问题 . 对我来说,解决方案是使用基于标记的分水岭方法 . 在Steve的Matlab博客上找到关于分水岭方法的例子:http://blogs.mathworks.com/steve/他给出的这个方法最适合我:http://blogs.mathworks.com/steve/2013/11/19/watershed-transform-question-from-tech-support/

    现在,在理想的世界中,我们可以使用单一方法正确分割所有内容 . 但是无论您使用哪种方法(除非您手动给出标记),分水岭都会对某些粒子进行过度或不足 . 所以,目前我正在使用半自动分割方法;即,使用分水岭尽可能地分割图像,然后将该图像带入MSPaint并手动编辑以纠正剩余的/过度分割的情况 .

    一些人过去似乎已经使用过地区 . 但我的图像处理知识有限,所以我无法帮助你 . 如果有人能发布关于如何使用区域增长来分割这样的图像的话,那将是很棒的 .

    希望这可以帮助 .

相关问题