我有一组二进制图像,我需要在其上找到十字架(附带示例)。我使用findcontours从二进制图像中提取边框。但我无法理解我怎样才能确定这个形状(边界)是否交叉?也许opencv有一些内置方法,可以帮助解决这个问题。我想用机器学习来解决这个问题,但我认为有一种更简单的方法可以做到这一点。谢谢!
答案 0 :(得分:2)
Viola-Jones object detection可能是一个好的开始。虽然算法(AFAIK)的主要用途是人脸检测,但它实际上是为任何物体检测而设计的,例如你的十字架。
该算法是基于机器学习的算法(因此,您将需要一组分类的“十字架”和一组分类的“非十字架”),您将需要识别重要的“特征”(模式),将帮助算法识别十字架。
该算法在OpenCV中实现为cvHaarDetectObjects()
答案 1 :(得分:2)
从原始图片中,假设您已经提取了可能是您的十字架的多边形集。假设所有十字架都是可见的,只要所有边缘都可以区分为具有长度,您可以尝试以下方法。
拒绝所有不需要12个顶点的多边形 形成你的多边形。
重新排序顶点,使最短边长为第一。
创建最适合perspective transformation,将顶点映射到统一大小的十字架上
检查使用此变换生成的残差,将十字架投射回均匀十字,其中任何给定点的残差是投影点与相应均匀点之间的距离。
请注意,这主要是因为您正在搜索的几何形状的简单性。您的轮廓也需要去除噪音才能使其正常工作,例如:十字架内的每条线都需要转换为一条简单的线。
答案 2 :(得分:0)
答案 3 :(得分:0)
答案 4 :(得分:0)
你可以侵蚀每个blob并分析它们的像素数量正在下降。无论十字架的旋转比例如何,它们应始终以相同的比例下降,除非您关闭剩余的中心。同样,当blob足够小时,您应该期望它位于原始blob的中心。您不需要任何机器学习算法或训练数据来解决此问题。