gpt4 book ai didi

c++ - 如何在 OpenCV 中过滤由重叠圆圈构成的轮廓

转载 作者:可可西里 更新时间:2023-11-01 16:46:35 26 4
gpt4 key购买 nike

我正在使用 OpenCV/C++ 框架开发一个基本上计算可以重叠的椭圆对象的程序。

对图像进行阈值处理并找到所有物体的轮廓

我的下一步涉及排除不是由重叠椭圆组成的对象(稍后我将分割剩余的椭圆)。

我最终得到了这些对象:

enter image description here

在这个示例图像中,右边的所有对象都是负的,而左边的对象都是有效的。

我当前的过滤器主要根据 isoperimetric quotient 排除对象.但是,由于我的对象具有不同的大小和噪声,因此我并不总是对这种方法感到满意。

理想情况下,我希望有一个额外的指标来提高我当前过滤器的效率。

由于我必须在许多轮廓上重复此分析,因此成本应该不会太高。

我考虑过以下方法:

  • 基于轮廓中连续点的所有三元组之间角度值的直方图的东西?
  • 在数学上拟合“多椭圆”(我不知道该怎么做)?
  • 匹配自由人链?

但我确信我错过了一些更高效、更简洁的明显东西。你有什么建议吗,谢谢:),

编辑:正如 Regis 正确建议的那样,实际上任何形状都可以由足够数量的圆圈组成。因此,为了使我的问题可以解决,我将添加以下假设:

  1. 不超过 16 个椭圆/对象。
  2. 椭圆不能太平:长轴/短轴 < 3。
  3. 在一个物体中,最大椭圆的面积除以最小椭圆的面积必须小于 10。

最佳答案

一种可能是尝试:

  1. 提取物体的轮廓
  2. 沿等高线以规则间距采样点
  3. 使用这些点以规则的间距确定方向(最好使用复数来表示这个方向以避免环绕问题)
  4. 使用这些方向计算规则间距的曲率
  5. 基于此曲率的度量,例如寻找具有超过 80% 的曲率样本在正确范围内的对象。

您期望看到的曲率图表是一系列恒定值(如果形状是椭圆而不是圆形,则缓慢变化),在从一个圆变为另一个圆时会突然出现不连续性。

如果您的图像有噪点,您可能希望先对曲率值进行低通滤波。

由圆形/椭圆形组成的形状大部分在周边都有明显的曲率,而由直边组成的形状将有部分曲率较低。

关于c++ - 如何在 OpenCV 中过滤由重叠圆圈构成的轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11711179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com