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

该代码总结为:

bw = imread('some_binary_image.tif');

D = -bwdist(~bw);

D(~bw) = -Inf;

L = watershed(D);

结果是:

中心的粒子已被分为两部分。有什么方法可以避免过度分割吗?

谢谢,lennon310,chessboard对于我的大多数图像都能很好地工作,但是在某些情况下,效果却不尽人意。例如,以下二进制图像:

使用棋盘将导致:

由于我有数百张图像,因此似乎很难找到适用于所有图像的参数的一种组合。我想知道我是否需要结合使用棋盘,城市街区等获得的良好结果...

最佳答案

使用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)

结果:

关于matlab - 分水岭算法的过度分割,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20622368/

10-11 22:23