Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 在二维点云中查找简单形状_Image Processing_Cloud_Shape_Point - Fatal编程技术网

Image processing 在二维点云中查找简单形状

Image processing 在二维点云中查找简单形状,image-processing,cloud,shape,point,Image Processing,Cloud,Shape,Point,我目前正在寻找一种将简单形状(例如T形或L形)拟合到二维点云的方法。因此,我需要的是形状的位置和方向 我一直在研究几种方法,但大多数方法似乎非常复杂,首先需要构建和学习一个示例数据库。当我处理非常简单的形状时,我希望有一种更简单的方法。说你不想做任何训练,我猜你的意思是你不想做任何特征匹配;特征匹配用于对图像中对象的姿势(位置和方向)进行良好的猜测,并与RANSAC一起应用于您的问题,以猜测和验证关于对象姿势的良好假设 最简单的方法是模板匹配,但这可能在计算上过于复杂(这取决于您的用例)。在模板

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


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

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

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

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

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

您可能需要:

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

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

3-匹配特征(可以使用SIFT等方法)

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

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


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

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

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

你能提到需要培训和数据的方法吗?