3

我目前正在寻找一种将简单形状(例如 T 或 L 形状)拟合到 2D 点云的方法。结果,我需要的是形状的位置和方向。

我一直在研究几种方法,但大多数似乎都非常复杂,并且首先涉及构建和学习示例数据库。当我处理非常简单的形状时,我希望可能有一种更简单的方法。

4

3 回答 3

0

说你不想做任何训练,我猜你的意思是你不想做任何特征匹配;特征匹配用于对图像中对象的姿势(位置和方向)做出良好的猜测,并且将与 RANSAC 一起适用于您的问题,以猜测和验证关于对象姿势的良好假设。

简单的方法是模板匹配,但这可能在计算上过于复杂(这取决于您的用例)。在模板匹配中,您只需遍历对象的可能位置及其可能的方向和可能的比例,并检查模板(在该位置和方向和比例看起来像 L 或 T 的云)匹配(或者您采样可能的位置方向和比例随机)。如果您的点被组织(或者您通过例如将它们转换为像素来组织它们),则可以相当快地检查模板。

如果这太慢了,有很多方法可以使模板匹配更快,我会向您推荐广义霍夫变换。在这里,在开始搜索模板之前,您在您正在寻找的形状的边界(T 或 L)上循环,对于其边界上的每个点,您查看渐变方向,然后查看渐变方向和该点之间的角度对象模板的原点,以及到原点的距离。您将其添加到每个边界点的表格(让我们称之为Table A),最终得到一个表格,该表格从梯度方向映射到对象原点的一组可能位置。现在你设置了一个 2D 投票空间,它实际上只是一个 2D 数组(让我们称之为Table B) 其中每个像素都包含一个数字,表示该位置对象的投票数。然后对于目标图像(点云)中的每个点,您检查梯度并找到与Table A该梯度相对应的一组可能的对象位置,然后为Table B(霍夫空间)中的所有相应对象位置添加一票。

这是一个非常简洁的解释,但是知道要查找模板匹配和广义霍夫变换,您将能够在网络上找到更好的解释。例如,查看模板匹配和霍夫变换的 Wikipedia 页面。

于 2013-01-24T11:51:34.867 回答
0

您可能需要:

1-从您正在寻找对象的图像中提取一些特征。

2-在对象的图像中提取另一组特征

3-匹配特征(可以使用SIFT之类的方法)

4-当您找到匹配项时应用 RANSAC 算法。它为您提供变换矩阵(包括平移、旋转信息)。

使用 SIFT 从这里开始。它实际上是为 SIFT 编写的最好的源代码之一。它包含 RANSAC 算法,您不需要自己实现它。

您可以在此处阅读有关 RANSAC的信息。

于 2013-08-12T18:17:33.910 回答
0

在二维点云数据中检测形状(L、T、...)的两种常用方法是使用 OpenCV 或点云库。我将解释在 OpenCV 中检测这些形状可能采取的步骤。为此,您可以使用以下 3 种方法,正确方法的选择取决于形状(大小、形状的面积……):

  • 霍夫线变换
  • 模板匹配
  • 寻找轮廓

第一步是将您的点转换为灰度Mat对象,通过这样做,您基本上可以制作 2D 点云数据的图像,因此您可以使用其他 OpenCV 函数。然后你可以平滑图像以减少噪声,结果会以某种方式包含真实边缘的模糊图像,如果你的应用程序不需要实时处理,你可以使用bilateralFilter. 您可以在此处找到有关平滑的更多信息。下一步将是选择方法。如果形状只是某种正交线(例如 L 或 T),您可以使用霍夫线变换来检测线条,检测后,您可以遍历线条并计算dot product线的数量(因为它们是正交的,所以结果应该是 0)。您可以在此处找到有关霍夫线变换的更多信息。另一种方法是使用模板匹配检测您的形状。基本上,您应该制作一个形状(L 或 T)的模板并在matchTemplate函数中使用它。您应该考虑要使用的模板的大小应该按照图像的顺序排列,否则您可能会调整图像的大小。更多关于算法的信息可以在这里找到。如果形状包括您可以使用 找到形状轮廓的区域findContours,它将为您提供要检测的形状周围的多边形数量。例如,如果您的形状是L,它将具有大约 6 条线的多边形。此外,您还可以使用其他一些过滤器,findContours例如计算形状的面积。

于 2019-07-30T19:53:54.930 回答