我想从随机定位的线段中检测并完成所有可能的四边形形状!
所附照片是一个例子,线条可能总是出现在非常不同的位置。
谁能为此指出任何好的算法?
- 请注意,线段是使用 opencv 2.4.2 进行霍夫变换的输出
解决方案是检测和预测黄色四边形
最佳答案
在11条线段的情况下,你有330种方式选择4条线段。您可以确定每个组合构成四边形的可能性,并以此方式评分。
可以使用 Hough 变换检测线以外的形式,但由于累加器空间需要二维以上,因此更难可视化。可以在三个维度(midX、midY、radius)中找到圆,在四个维度中找到椭圆(我相信)。我不确定为四边形建模所需的参数到底有多少,而且我相信当您的维度高于三个维度时,霍夫变换的性能开始下降。累加器空间变大,噪声比显着增加。
这是一个 related question可能会为您提供一些有趣的答案。
让我们知道您的进展情况!
编辑
我今天试了一下这个问题,uploaded my solution to GitHub .这里的代码太多了。
这是显示输出的屏幕截图:
我采取的解决方案基本上是我在编辑之前上面描述的。
- 找到四行的所有组合
- 找到这四行的所有排列
- 评估这四条线形成四边形的可能性
- 选择最佳匹配
评估通过计算粗略的错误分数来进行。这是两种不同类型错误的总和:
- 每个角与 90 度的偏差(我使用所有四个角的误差平方和)
- 当线段在线段内相交时,它可能不是有效角
第二种类型的错误可能会以更稳健的方式确定。有必要为您的示例数据集找到解决方案。
我还没有试验过其他数据集。它可能需要一些调整以使其更健壮。我尽量避免使用太多的参数,这样就可以直接适应特定的环境。例如,控制对遮挡的敏感度,如示例图像所示。
它在我的笔记本电脑上用了大约 160 毫秒找到了解决方案。但是我没有进行任何性能优化。如果您需要更接近实时地运行,我希望查找组合/排列的方法可以得到显着优化,计算机视觉实验通常就是这种情况。
关于c# - 四边形找形算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950983/