在白色背景上找到形状。细化线

时间:2016-09-28 09:45:13

标签: opencv emgucv opencv-contour canny-operator adaptive-threshold

我将以下图像作为测试图像:

enter image description here

我试图找到图像上的形状(和其他图像)。我现在的approch如下:

  1. 使用3x3内核的高斯模糊
  2. Canny边缘检测使用 列表(以获得所有形状)
  3. 形态与MorphOp.Close关闭 边缘
  4. FindContours查找轮廓
  5. 每个轮廓的迭代:
    1. 查找ApproxPolyDP
    2. 查找ConvexHull
    3. 如果丢弃则 船体尺寸< 2,大约面积< 200或船体尺寸> 50000,或arclength 约为< 100
    4. 绘制凸壳
  6. 此方法生成以下图像,其中绘制了凸包: enter image description here

    这几乎是完美的,但请注意,这些线条被视为轮廓事件 - >供应商和事件 - >文档)。在查看边缘信息时,很明显为什么会这样:

    enter image description here

    线条被检测为轮廓。我怎样才能准备/找到形状以便不检测线条?我虽然有一些细化算法,但由于我也在处理现实生活中的图像,因此很难找到有效的阈值。下面是一个真实生活图像的例子,其中稀疏很难做到,因为细化通常要求图像是黑白单色。

    enter image description here

    你会怎么做?是否有一些方法来确定轮廓/凸包是线,矩形还是类似的东西?

1 个答案:

答案 0 :(得分:1)

我最终使用重叠测试和凸性扫描的混合。凸度扫描凸壳和实际轮廓之间的误差。如果此误差超过一定量,则忽略船体。重叠只是简单地使用按位并且如果两个凸壳重叠则检测。如果它们重叠超过95%,则忽略其中一个。