在白色背景上查找形状。细化线条
Find shapes on white background. Thinning the lines
我有以下图片作为测试图片:
我试图在图像(和其他图像)上找到形状。我现在的做法如下:
- 具有 3x3 内核的高斯模糊
- 使用Canny边缘检测
列表(获取所有形状)
- 形态 MorphOp.Close 关闭
边缘
- FindContours 查找轮廓
- 每个轮廓的迭代:
- 查找 ApproxPolyDP
- 找到 ConvexHull
- 丢弃如果
船体尺寸 < 2,大约面积 < 200 或船体尺寸 > 50000,或弧长
大约 < 100
- 绘制凸包
此方法生成以下绘制凸包的图像:
这几乎是完美的,但请注意,线条被视为等高线 events->suppliers and events->documents)。查看边缘信息时,很明显为什么会这样:
线条被检测为轮廓。我怎样才能 prepare/find 不检测到线条的形状?我虽然有一些细化算法,但由于我也在处理现实生活中的图像,因此很难找到有效的阈值。这是一个现实生活中的图像示例,其中细化很难进行,因为细化通常要求图像为黑白单色。
你会怎么做?有什么方法可以确定 contour/convex 船体是直线、矩形还是类似的东西?
我最终混合使用了重叠测试和凸性扫描。凸性扫描凸包与实际轮廓之间的误差。如果此错误超过一定数量,则忽略船体。如果两个凸包重叠,则重叠简单地使用按位和去技术。如果它们重叠超过 95%,则忽略其中一个。
我有以下图片作为测试图片:
我试图在图像(和其他图像)上找到形状。我现在的做法如下:
- 具有 3x3 内核的高斯模糊
- 使用Canny边缘检测 列表(获取所有形状)
- 形态 MorphOp.Close 关闭 边缘
- FindContours 查找轮廓
- 每个轮廓的迭代:
- 查找 ApproxPolyDP
- 找到 ConvexHull
- 丢弃如果 船体尺寸 < 2,大约面积 < 200 或船体尺寸 > 50000,或弧长 大约 < 100
- 绘制凸包
此方法生成以下绘制凸包的图像:
这几乎是完美的,但请注意,线条被视为等高线 events->suppliers and events->documents)。查看边缘信息时,很明显为什么会这样:
线条被检测为轮廓。我怎样才能 prepare/find 不检测到线条的形状?我虽然有一些细化算法,但由于我也在处理现实生活中的图像,因此很难找到有效的阈值。这是一个现实生活中的图像示例,其中细化很难进行,因为细化通常要求图像为黑白单色。
你会怎么做?有什么方法可以确定 contour/convex 船体是直线、矩形还是类似的东西?
我最终混合使用了重叠测试和凸性扫描。凸性扫描凸包与实际轮廓之间的误差。如果此错误超过一定数量,则忽略船体。如果两个凸包重叠,则重叠简单地使用按位和去技术。如果它们重叠超过 95%,则忽略其中一个。