1

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

在此处输入图像描述

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

  1. 具有 3x3 内核的高斯模糊
  2. 使用列表进行精明边缘检测(获取所有形状)
  3. Morphology 与 MorphOp.Close 关闭边缘
  4. FindContours 查找轮廓
  5. 每个轮廓的迭代:
    1. 查找 ApproxPolyDP
    2. 找到 ConvexHull
    3. 如果船体尺寸 < 2、大约面积 < 200 或船体尺寸 > 50000 或弧长大约 < 100,则丢弃
    4. 绘制凸包

此方法产生以下图像,其中绘制了凸包: 在此处输入图像描述

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

在此处输入图像描述

线条被检测为轮廓。我如何准备/找到形状以便检测不到线条?我虽然有一些细化算法,但由于我也在处理现实生活中的图像,所以很难找到一个有效的阈值。这是一个现实生活图像的示例,其中很难进行细化,因为细化通常要求图像是黑白单色的。

在此处输入图像描述

你会怎么做?有什么方法可以确定轮廓/凸包是线、矩形还是类似的东西?

4

1 回答 1

1

我最终混合使用了重叠测试和凸面扫描。凸度扫描凸包和实际轮廓之间的误差。如果此误差超过一定量,则忽略船体。如果两个凸包的重叠,重叠只是使用按位和去技术。如果它们重叠超过 95%,则忽略其中之一。

于 2016-10-06T08:30:23.560 回答