我正在使用 OpenCV/C++ 框架在一个基本上计算可以重叠的椭圆对象的程序上工作。
在阈值图像并找到所有对象的轮廓之后
我的下一步涉及排除不是由重叠椭圆组成的对象(稍后我将分割其余的)。
我最终得到了这些对象:
在此示例图像中,右侧的所有对象都是负数,而左侧的所有对象都是有效的。
我当前的过滤器主要根据其等周商排除对象。但是,由于我的对象具有不同的大小和噪声,我并不总是对这种方法感到满意。
理想情况下,我希望有一个额外的指标来提高我当前过滤器的效率。
由于我必须在许多轮廓上重复此分析,因此成本不应该很高。
我考虑过以下方法:
- 基于轮廓中连续点的所有三元组之间的角度值的直方图的东西?
- 在数学上拟合“多椭圆”(我不知道该怎么做)?
- 匹配弗里曼链?
但我确信我错过了一些更有效、更少混乱的明显东西。你有什么建议吗,谢谢:),
编辑: 正如雷吉斯正确建议的那样,任何形状实际上都可以由足够数量的圆圈组成。因此,为了使我的问题可解决,我将添加以下假设:
- 不超过 16 个椭圆/对象。
- 椭圆不能太平:长轴/短轴 < 3。
- 在一个对象内,最大椭圆的面积超过最小椭圆的面积必须小于 10。