mathworks.com上的二维分水岭示例

时间:2013-12-16 21:33:13

标签: matlab image-processing image-segmentation watershed

Mathworks.com上的

The 2-D watershed example总结如下:

bw = imread('someImage.tif');

D = -bwdist(~bw);

D(~bw) = -Inf;

L = watershed(D);

我不太明白为什么D(~bw) = -Inf;在这里需要强制不属于对象的像素为-Inf(原为零)。

我尝试在没有该声明的情况下运行该程序,结果令人困惑。为什么有必要将这些像素强制为-Inf以使分水岭得到正确的结果?

正如弗雷德里克所指出的那样,我用surf来绘制表面, 在运行D(~bw) = -Inf;之前,结果是:

Imgur

运行后,结果是: Imgur

1 个答案:

答案 0 :(得分:1)

-Inf增强了连接组件和背景之间的对比度。否则,分水岭很可能将所有背景与单个连接组件合并到一个区域。实际上,-Inf设置将完全消除感兴趣区域的背景。使用sample image查看-Inf对细分的影响。如果您设置D(~bw) = 0;,您将获得:

enter image description here