在图像上找到交叉点

我有一套二进制图像,我需要找到十字架(附带示例)。 我使用findcontours从二进制图像中提取边框。 但我不明白我怎么能确定是这个形状(边界)交叉或不是? 也许opencv有一些内置的方法,可以帮助解决这个问题。 我想使用机器学习解决这个问题,但我认为有一个更简单的方法来做到这一点。 谢谢!

在二进制图像上交叉

在二进制图像上交叉2


Viola-Jones物体检测可能是一个好的开始。 虽然算法(AFAIK)的主要用途是人脸检测,但它实际上是为任何物体检测而设计的,例如您的十字架。

该算法是基于机器学习的算法(因此,您将需要一组分类的“十字架”和一组分类的“非十字架”),并且您需要确定重要的“特征”(模式),这将有助于算法识别十字。

该算法在OpenCV中实现为cvHaarDetectObjects()


从原始图像中,可以说你已经提取了可能成为你的十字的多边形集合。 假设所有的十字都是可见的,所有的边都可以区分为长度,你可以尝试下面的方法。

  • 拒绝所有没有完全形成多边形所需的12个顶点的多边形。

  • 对顶点进行重新排序,使得最短边的长度是第一个。

  • 创建一个最适合的透视变换,将顶点映射到统一大小的十字架上

  • 检查使用这种变换产生的残差,将你的十字架投影回均匀的十字架,其中任何给定点的残差是投影点与相应的均匀点之间的距离。

  • 如果所有的残差都在您定义的容差范围内,您会发现一个十字。
  • 请注意,这主要是因为你正在寻找的几何形状很简单。 您的轮廓还需要去除噪音才能起作用,例如十字中的每条线都需要转换为一条简单的线。


    根据您的要求,您可以尝试使用SIFT或SURF等本地特征检测器。 检查OpenSURF是后者的一个有趣的实现。

    链接地址: http://www.djcxy.com/p/66049.html

    上一篇: Finding cross on the image

    下一篇: Roslyn vs Reflection for TypeScript code generator