【发布时间】:2013-12-16 22:35:31
【问题描述】:
我按照 Mathworks.com 中的2-D Watershed example 来分离连接的对象,如下图:
代码总结为:
bw = imread('some_binary_image.tif');
D = -bwdist(~bw);
D(~bw) = -Inf;
L = watershed(D);
结果是:
中心的粒子已被分成两部分。有什么办法可以避免这里的过度分割?
谢谢,lennon310,chessboard 确实适用于我的大多数图像,但仍有一些情况不适用。例如,下面的二进制图像:
使用棋盘将导致:
由于我有数百张图像,似乎很难找到一种适用于所有图像的参数组合。我想知道我是否需要结合使用棋盘、城市街区等获得的好结果...
【问题讨论】:
-
您处理数百个图像的目的是什么?没有必要使用分水岭来提取对象。由于图像中的两个圆圈之间存在微小的连接,因此标记连接组件的基本方法也可能不起作用。其实matlab图像处理工具箱里有圆形检测器(hough, imfindcircles, ...)。
-
@lennon310 :这些实际上是 X 射线断层扫描拍摄的图像。我想为我感兴趣的粒子创建一个蒙版。目前,我在 ImageJ 中使用 Connected Threshold Grower,它可以从种子点找到连接区域。通过在感兴趣的粒子上设置种子点,Connected Threshold Grower 可以生成仅包含该粒子的结果,前提是它不接触其他粒子。现在我手动擦除数百张图像的接触边界,这很耗时。我正在尝试使用分水岭来自动分离这些粒子。
-
X 射线图像不是二值图像,是吗?我认为可以检测到连通分量,甚至可以根据强度差异对原始图像进行聚类算法尝试。对于二值图像,尤其是您更新的图像,分割两个实际连接的圆圈是一项挑战。
标签: matlab image-processing image-segmentation watershed