在图像上找到十字架

时间:2012-11-09 19:50:13

标签: algorithm image-processing opencv

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

Cross on binary image

cross on binary image 2

5 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

从原始图片中,假设您已经提取了可能是您的十字架的多边形集。假设所有十字架都是可见的,只要所有边缘都可以区分为具有长度,您可以尝试以下方法。

  • 拒绝所有不需要12个顶点的多边形 形成你的多边形。

  • 重新排序顶点,使最短边长为第一。

  • 创建最适合perspective transformation,将顶点映射到统一大小的十字架上

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

  • 如果所有残差都在您定义的公差范围内,那么您就找到了一个十字架。

请注意,这主要是因为您正在搜索的几何形状的简单性。您的轮廓也需要去除噪音才能使其正常工作,例如:十字架内的每条线都需要转换为一条简单的线。

答案 2 :(得分:0)

根据您的要求,您可以尝试使用某些本地功能检测器,例如SIFTSURF。检查OpenSURF,这是后者的有趣实现。

答案 3 :(得分:0)

经过几天的奋斗,我得出结论,这里唯一有效的方法是使用SVM + HOG。就是这样。

答案 4 :(得分:0)

你可以侵蚀每个blob并分析它们的像素数量正在下降。无论十字架的旋转比例如何,它们应始终以相同的比例下降,除非您关闭剩余的中心。同样,当blob足够小时,您应该期望它位于原始blob的中心。您不需要任何机器学习算法或训练数据来解决此问题。