如何使用OpenCV的分水岭变换实现过度分割?

时间:2017-01-07 11:53:52

标签: java opencv transform image-segmentation watershed

我试图通过在Java中使用基于标记的OpenCV分水岭实现对图像进行过度分割。

我的想法是搜索所有本地最小值并将其用作标记。 不幸的是,分水岭需要一个CV_8U类型的矩阵作为标记输入,因此,我无法获得超过255个标记。

是否有人针对此问题或使用OpenCV实现过度细分的其他解决方案有解决方法?

The original image to the left, the markers in the middle (about 740), resulting segmentation to the right (only 255 regions)

1 个答案:

答案 0 :(得分:0)

随机分水岭可以帮助你解决这个问题。原则是应用多个流域。

在您的情况下,您可以这样做:

  1. 查找所有本地最小值
  2. 选择N本地最小值
  3. 申请分水岭
  4. 将结果/边界存储到累加器
  5. 重复步骤2,3和4 M次
  6. 保持累加器中至少有X%X票数的边界。
  7. 另一种解决方案是使用SMIL library。您可以从Java调用它,并且您确信所实现的算法快速而且没有偏见。