9

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

在阈值图像并找到所有对象的轮廓之后

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

我最终得到了这些对象:

在此处输入图像描述

在此示例图像中,右侧的所有对象都是负数,而左侧的所有对象都是有效的。

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

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

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

我考虑过以下方法:

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

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

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

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

3 回答 3

2

一种可能性是尝试:

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

您期望看到的曲率图是一系列恒定值(如果形状是椭圆而不是圆形,则变化缓慢),在从一个圆变为另一个圆的地方突然间断。

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

由圆形/椭圆形制成的形状大多在周边具有显着的曲率,而由直边制成的形状将具有低曲率的部分。

于 2012-07-29T19:07:21.953 回答
0

我怀疑任何形状都可以从一组足够大的重叠椭圆创建,并且您手上有一个定义不明确的问题。除非我误解了你的问题陈述。

于 2012-07-30T09:00:36.390 回答
0

您是否研究过圆形和椭圆的霍夫变换?甚至还有一个用于圆圈的OpenCV 实现。这些转换必须应用于对象的轮廓。

于 2013-03-08T18:03:36.130 回答