Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于分水岭的连通物体图像分割_Python_Image Processing_Scipy_Watershed - Fatal编程技术网

Python 基于分水岭的连通物体图像分割

Python 基于分水岭的连通物体图像分割,python,image-processing,scipy,watershed,Python,Image Processing,Scipy,Watershed,我正在尝试分离连接的对象。Python和分水岭算法(scipy实现)似乎非常适合处理这个问题 这是我的图像和自动生成的分水岭种子点(阈值图像和距离变换图像的局部最大值): 到目前为止,一切顺利;每个物体都有一颗种子 但是,当我运行分水岭时,事情就崩溃了: segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)` 顶部中间的仪表盘和中心仪表盘分离不良。在顶部簇中,一个对象淹没在另两个对象周围。在中心簇中

我正在尝试分离连接的对象。Python和分水岭算法(scipy实现)似乎非常适合处理这个问题

这是我的图像和自动生成的分水岭种子点(阈值图像和距离变换图像的局部最大值):

到目前为止,一切顺利;每个物体都有一颗种子

但是,当我运行分水岭时,事情就崩溃了:

segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)`

顶部中间的仪表盘和中心仪表盘分离不良。在顶部簇中,一个对象淹没在另两个对象周围。在中心簇中,虽然它可能太小而无法在这里看到,但中心种子仅淹没到几个像素

我有两个问题:

  • 分水岭算法是分离像这样的对象的好选择吗
  • 如果是这样的话,我是否需要做一些预处理,使图像更适合分水岭分割

  • 分水岭算法是一种简单而健壮的分割算法。您的数据似乎适合这种分割算法。据我所知,不需要特殊的预处理。当然,你已经看到了自己,在这种情况下,它有点接近

    通常使用“分水岭”,但不考虑有关要识别的对象的任何特殊知识。这样可能会有更复杂的算法可用

    此外,可能还有更复杂的分水岭算法版本可用。这个名为的Python模块具有参数(与scipy版本不同)。我会稍微调整一下参数,看看结果是否可以改善


    是一种经常用于自动分割的工具。它结合了半自动学习(基本上是通过举例对其进行训练,并从中学习重要特征)。

    在距离变换步骤后,应应用多级阈值方法。将距离转换图像转换为灰度图像后,对象的中心将在生成的灰度图像中具有最高的像素值。在这里,您可以从阈值的最高值开始查找对象的中心。看这篇文章

    我发现了这条线索,因为我在
    分水岭_\u ift
    上遇到了同样的问题。我建议只使用
    skimage.morphics
    中的
    流域
    函数。它接受浮点输入,因此不会丢失灰度图像的分辨率,并且实际上会淹没整个盆地,而
    ift
    方法似乎只淹没标记所在的等值线

    编辑: 一定要将距离变换乘以-1,这样山峰就变成了山谷,否则你就得不到任何分水岭了

    segmented = ndimage.measurements.watershed_ift( 255 - image_grey, seeds)`