5

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

伊姆古尔

代码总结为:

bw = imread('some_binary_image.tif');

D = -bwdist(~bw);

D(~bw) = -Inf;

L = watershed(D);

结果是:

伊姆古尔

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

谢谢,lennon310,chessboard对我的大多数图像都适用,但仍然有一些情况不适用。例如,下面的二进制图像: 伊姆古尔

使用棋盘将导致: 伊姆古尔

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

4

2 回答 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)

结果: 在此处输入图像描述

于 2013-12-17T03:22:52.013 回答
3

我一直在处理同样的问题一段时间。对我来说,解决方案是改用基于标记的分水岭方法。寻找史蒂夫在 Matlab 博客上给出的分水岭方法的例子:http: //blogs.mathworks.com/steve/ 他给出的这个方法对我最有效:http: //blogs.mathworks.com/steve/2013/ 11/19/分水岭转换问题来自技术支持/

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

过去,某些人似乎使用了区域增长。但是我的图像处理知识有限,所以我无法帮助您。如果有人能发布一些关于如何使用区域增长来分割这样的图像的东西,那就太好了。

希望这可以帮助。

于 2014-07-28T20:41:27.090 回答