c# - 四边形找形算法

标签 c# algorithm image-processing opencv artificial-intelligence

我想从随机定位的线段中检测并完成所有可能的四边形形状!

所附照片是一个例子,线条可能总是出现在非常不同的位置。

谁能为此指出任何好的算法?

  • 请注意,线段是使用 opencv 2.4.2 进行霍夫变换的输出

enter image description here

解决方案是检测预测黄色四边形

enter image description here

最佳答案

在11条线段的情况下,你有330种方式选择4条线段。您可以确定每个组合构成四边形的可能性,并以此方式评分。

可以使用 Hough 变换检测线以外的形式,但由于累加器空间需要二维以上,因此更难可视化。可以在三个维度(midX、midY、radius)中找到圆,在四个维度中找到椭圆(我相信)。我不确定为四边形建模所需的参数到底有多少,而且我相信当您的维度高于三个维度时,霍夫变换的性能开始下降。累加器空间变大,噪声比显着增加。

这是一个 related question可能会为您提供一些有趣的答案。

让我们知道您的进展情况!


编辑

我今天试了一下这个问题,uploaded my solution to GitHub .这里的代码太多了。

这是显示输出的屏幕截图:

我采取的解决方案基本上是我在编辑之前上面描述的。

  1. 找到四行的所有组合
  2. 找到这四行的所有排列
  3. 评估这四条线形成四边形的可能性
  4. 选择最佳匹配

评估通过计算粗略的错误分数来进行。这是两种不同类型错误的总和:

  1. 每个角与 90 度的偏差(我使用所有四个角的误差平方和)
  2. 当线段在线段内相交时,它可能不是有效角

第二种类型的错误可能会以更稳健的方式确定。有必要为您的示例数据集找到解决方案。

我还没有试验过其他数据集。它可能需要一些调整以使其更健壮。我尽量避免使用太多的参数,这样就可以直接适应特定的环境。例如,控制对遮挡的敏感度,如示例图像所示。

它在我的笔记本电脑上用了大约 160 毫秒找到了解决方案。但是我没有进行任何性能优化。如果您需要更接近实时地运行,我希望查找组合/排列的方法可以得到显着优化,计算机视觉实验通常就是这种情况。

关于c# - 四边形找形算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13950983/

相关文章:

c# - 通用函数中的 equals() 和 ==

c# - 开发 WPF 应用程序的最佳方法

c++ - 获取数组中最小的列表数

c++ - 条件运算符不允许程序终止

algorithm - 哪种算法适用于极高的非突发错误?

c# - 如何解码 JSON Web Token 的签名部分

image-processing - 使用决策树

c++ - OpenCV 的 fitEllipse() 有时会返回完全错误的椭圆

math - 如何旋转图像?

c# - 无法读取 dotnet 核心中链接的 appsettings.json 文件中的值