四边形形状查找算法

我想检测并完成所有可能的四边形形状,这些形状由随机分布的线段组成!

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

有谁能指出任何适合的算法吗?

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

enter image description here

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

enter image description here


回答:

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

虽然霍夫变换可以检测到线以外的其他形状,但随着累加器空间需要超过两个维度,变得更难可视化。圆可以在三个维度(midX, midY, 半径)中找到,椭圆在四个维度(我认为)。我不确定你需要多少参数来建模一个四边形,我认为当维度超过三个时,霍夫变换的性能开始下降。累加器空间变得如此之大,以至于噪声比例显著增加。

这里有一个相关问题,可能对你有帮助的答案。

让我们知道你的进展如何!


编辑

我今天尝试解决这个问题,并将我的解决方案上传到了GitHub。这里的代码太多了,无法全部贴出。

这是一个显示输出的截图:

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

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

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

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

第二种类型的错误可能需要更稳健的方式来确定。这是为了找到你样本数据集的解决方案所必需的。

我还没有尝试过其他数据集。它可能需要一些调整以使其更稳健。我尽量避免使用太多参数,以便它可以轻松调整到特定环境。例如,控制对遮挡的敏感性,如你在样本图像中看到的。

在我的笔记本电脑上,它大约在160毫秒内找到解决方案。然而,我还没有进行任何性能优化。我期望查找组合/排列的方法可以显著优化,如果你需要它接近实时运行,正如计算机视觉实验中经常遇到的情况。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注