首页 文章

如何在OpenCV中过滤由重叠圆圈组成的轮廓

提问于
浏览
9

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

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

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

我最终得到了这些对象:

enter image description here

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

我当前的过滤器主要以isoperimetric quotient为基础排除对象 . 然而,由于我有不同大小和噪音的物体,我并不总是对这种方法感到满意 .

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

由于我必须在许多轮廓上重复这种分析,因此不应该付出昂贵的代价 .

我考虑过如下方法:

  • 基于轮廓中连续点的所有三元组之间角度值的直方图的东西?

  • 数学拟合"poly-ellipse"(我不知道该怎么做)?

  • 匹配自由人链?

但我确信我错过了一些更有效,更少杂乱的东西 . 你有什么建议吗,谢谢:),

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

  • 不超过16个椭圆/对象 .

  • 椭圆不能为平面:长轴/短轴<3 .

  • 在一个对象中,最小椭圆区域上最大椭圆的面积必须小于10 .

3 回答

  • 2

    一种可能性是尝试:

    • 提取对象的轮廓

    • 沿轮廓以规则间距采样点

    • 使用这些点来确定常规间距的方向(最好使用复数表示此方向以避免环绕问题)

    • 使用这些方向以常规间距计算曲率

    • 基于此曲率 Build 度量标准,例如寻找在正确范围内具有超过80%的曲率样本的对象 .

    您期望看到的曲线图是一系列常数值(如果形状是椭圆形而不是圆形,则会缓慢变化),突然不连续,它从一个圆变为另一个圆 .

    如果图像有噪声,您可能希望先低通滤波曲率值 .

    由圆/椭圆形成的形状在周边周围主要具有显着的曲率,而由直边形成的形状将具有低曲率的部分 .

  • 0

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

  • 0

    你有没有看过Hough-Transformations的圆圈和椭圆?甚至还有一个OpenCV implementation可供选择 . 这些转换必须应用于对象的轮廓 .

相关问题