如何根据边缘(轮廓)"曲线"

时间:2016-01-10 00:28:39

标签: c++ opencv image-processing classification edges

简介

我正在使用C ++开发一个OpenCV项目,我正在尝试将包含许多边的小图像(来自视频的帧)分类为两组。我还想保留图像与A类或B类的接近程度的信息,因为这种分类似乎不仅仅是一个二元问题 - 有时图像是A类和B类的混合。

A类可以通过弯曲/平滑边缘的存在来粗略地确定,类似于拱形或椭圆形结构的部分,其通常被定向到某种中心(如在隧道中)。

另一类B级通常非常混乱,这种形象的边缘肯定不那么弯曲,它们经常缠绕,通常没有任何关注的中心"。

两个类的图像都在以下链接中: Group A Group B

以前的方法和想法

我试图将每个足够长的轮廓分开,然后计算某种曲率/曲率系数 - 基本上我对轮廓进行了下采样(按10),然后我沿着新轮廓移动并计算两个之间的绝对角度的平均值由3个连续点创建的细分。然后根据这个值我确定当前的轮廓是否是曲线"或不。根据我的计算,我计算了一些功能:

  • 曲线轮廓的总长度/所有轮廓的总长度
  • 弯曲轮廓的数量/所有轮廓的数量

然而,非常曲率计算似乎不能非常稳健地工作(在一个框架中,轮廓被认为是弯曲的,在第二个相同的轮廓中,具有轻微变化的形状不是等等)并且还设置阈值以确定哪个轮廓是曲线而不是(基于"单个轮廓的过度曲线")很难正确设置。而且,这种方法决不会考虑具体的形状。 A类,因此分类结果很差。

我在考虑某种椭圆拟合,但正如你所看到的,A类更像是一组拱形而不是实际的椭圆形或圆形。

我正在阅读有关比较边缘地图的一些方法,例如Hausdorff匹配,但在我的情况下似乎没有什么帮助。此外,重要的是,我希望保持算法简单,因为它必须能够实时工作,而且它只是更大软件的一部分。

最后,我的问题是:

您是否对我可用于描述然后对此类边缘/图像进行分类的任何其他更好的功能和计算有任何想法?是否有一个强大的解决方案来描述我的课程?

0 个答案:

没有答案