我想检测并完成所有可能的四边形形状,这些形状由随机分布的线段组成!
附件中的照片是一个例子,线条可能总是出现在非常不同的位置。
有谁能指出任何适合的算法吗?
- 注意这些线段是使用opencv 2.4.2进行霍夫变换的输出
解决方案是检测并预测黄色的四边形
回答:
在有11个线段的情况下,你有330种选择四条线段的方法。你可以确定每种组合形成四边形的可能性,并以此进行评分。
虽然霍夫变换可以检测到线以外的其他形状,但随着累加器空间需要超过两个维度,变得更难可视化。圆可以在三个维度(midX, midY, 半径)中找到,椭圆在四个维度(我认为)。我不确定你需要多少参数来建模一个四边形,我认为当维度超过三个时,霍夫变换的性能开始下降。累加器空间变得如此之大,以至于噪声比例显著增加。
这里有一个相关问题,可能对你有帮助的答案。
让我们知道你的进展如何!
编辑
我今天尝试解决这个问题,并将我的解决方案上传到了GitHub。这里的代码太多了,无法全部贴出。
这是一个显示输出的截图:
我采用的解决方案基本上是我在编辑前描述的。
- 查找所有四条线的组合
- 查找这些四条线的所有排列
- 评估这四条线形成四边形的可能性
- 选择最佳匹配
评估通过计算一个粗略的错误分数来进行。这是两种不同类型错误的总和:
- 每个角与90度的偏差(我使用了所有四个角的平方误差总和)
- 当线段在线段内相交时,很可能不是有效的角
第二种类型的错误可能需要更稳健的方式来确定。这是为了找到你样本数据集的解决方案所必需的。
我还没有尝试过其他数据集。它可能需要一些调整以使其更稳健。我尽量避免使用太多参数,以便它可以轻松调整到特定环境。例如,控制对遮挡的敏感性,如你在样本图像中看到的。
在我的笔记本电脑上,它大约在160毫秒内找到解决方案。然而,我还没有进行任何性能优化。我期望查找组合/排列的方法可以显著优化,如果你需要它接近实时运行,正如计算机视觉实验中经常遇到的情况。