简介
我正在使用C ++开发一个OpenCV项目,我正在尝试将包含许多边的小图像(来自视频的帧)分类为两组。我还想保留图像与A类或B类的接近程度的信息,因为这种分类似乎不仅仅是一个二元问题 - 有时图像是A类和B类的混合。
A类可以通过弯曲/平滑边缘的存在来粗略地确定,类似于拱形或椭圆形结构的部分,其通常被定向到某种中心(如在隧道中)。
另一类B级通常非常混乱,这种形象的边缘肯定不那么弯曲,它们经常缠绕,通常没有任何关注的中心"。
类:
两个类的图像都在以下链接中: Group A Group B
以前的方法和想法
我试图将每个足够长的轮廓分开,然后计算某种曲率/曲率系数 - 基本上我对轮廓进行了下采样(按10),然后我沿着新轮廓移动并计算两个之间的绝对角度的平均值由3个连续点创建的细分。然后根据这个值我确定当前的轮廓是否是曲线"或不。根据我的计算,我计算了一些功能:
然而,非常曲率计算似乎不能非常稳健地工作(在一个框架中,轮廓被认为是弯曲的,在第二个相同的轮廓中,具有轻微变化的形状不是等等)并且还设置阈值以确定哪个轮廓是曲线而不是(基于"单个轮廓的过度曲线")很难正确设置。而且,这种方法决不会考虑具体的形状。 A类,因此分类结果很差。
我在考虑某种椭圆拟合,但正如你所看到的,A类更像是一组拱形而不是实际的椭圆形或圆形。
我正在阅读有关比较边缘地图的一些方法,例如Hausdorff匹配,但在我的情况下似乎没有什么帮助。此外,重要的是,我希望保持算法简单,因为它必须能够实时工作,而且它只是更大软件的一部分。
最后,我的问题是:
您是否对我可用于描述然后对此类边缘/图像进行分类的任何其他更好的功能和计算有任何想法?是否有一个强大的解决方案来描述我的课程?