2D点云中的线检测

3
我正在开发一个自动引导车的导航和定位系统,但遇到了一个问题。在制作地图时,重要的部分是找到墙壁。使用LiDAR单元进行导航。
传感器所看到的示例“图像”如下: enter image description here 而想要的输出结果类似于这样: enter image description here 我已经研究了很多霍夫变换和RANSAC算法,但据我所知,霍夫变换是用于图像的,这对我的情况并不理想,而RANSAC在稀疏数据中找到多个墙壁并不好。

这个特定示例中使用的数据可以在此链接中找到:https://drive.google.com/file/d/1EnSOr2FYjIdqG1RdFgTkgsoEhVcG7Tl_/view?usp=sharing,文件中的两个数组表示x和y坐标,其中元素按索引对应。

我正在使用Python进行开发,但如果有人知道适合我的算法并且不在任何包中可用,我也可以自己编写它。

提前感谢,Jakob


也许你应该将点聚类,然后执行RANSAC算法?但是为什么HoughTransform不起作用呢?理论上它应该通过在稀疏点之间找到边缘来工作...而图像只是平面上具有光强度值的点的集合。 - Jason Chia
@JasonChia 是的,你可能是对的,但我该如何正确地对测量进行聚类呢?当涉及到霍夫变换时,我认为我主要得出了这样一个结论:它需要我将精度降低到很多,而我需要能够以毫米精度估计50米长的仓库墙壁。你认为霍夫变换可以用于这个吗?感谢你的回答。 - JakobVinkas
你尝试过从PCL中使用这段代码吗?平面分割 http://pointclouds.org/documentation/tutorials/planar_segmentation.php - Suhas C
1
@SuhasC 谢谢你的回答,我的 C++ 知识几乎为零,但我会去看一下。 - JakobVinkas
@JakobVinkas,你在Python中找到解决方案了吗?我也遇到了同样的问题! - youssef
2个回答

0

原问题可能有些晚了,但我相信更多人会想要解决同样的问题。

Hough变换可以很好地应用于点云上,但我不知道是否有现成的库实现。

这里有一个优秀的示例,包括完整的解释和源代码: 使用Hough变换处理LIDAR数据

如果您理解Hough变换的工作原理并查看代码,您将看到它如何遍历点并在特征空间中创建2D直方图。 实现类似的代码非常简单。


0

你可以尝试数学形态学,如腐蚀/膨胀https://docs.opencv.org/trunk/d9/d61/tutorial_py_morphological_ops.html

我在你的图像上尝试了一下,它开始看起来像一个房间:

source image eroded/dilated image threshold-ed

这是一个使用OpenCV在Python中实现的示例:

import numpy as np
import scipy.stats
import cv2

inputImage = cv2.imread('input.jpg')

skernel = cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))
cv2.imshow("test1",inputImage)

openImg =cv2.morphologyEx(inputImage, cv2.MORPH_OPEN, skernel, iterations =15)
cv2.imshow("test2",openImg)
img_gray = cv2.cvtColor(openImg, cv2.COLOR_BGR2GRAY)
ret,th3 = cv2.threshold(img_gray,200,255,cv2.THRESH_BINARY)

cv2.imshow("test3",th3)

我认为你的问题中缺少一个关键词,因为你要找的是点云重建算法。你可以在这里看看https://hal.inria.fr/hal-01348404v2/document


1
您好,感谢您的回答和付出的所有努力。不幸的是,我怀疑这将会产生不太理想的精确度。我认为数据中的大量噪音会使使用“图像分析”方法的结果失真太多。 - JakobVinkas
这种方法无法找到图像中的线条。它只是让图像“看起来更好”,但在这种情况下完全没有意义。 - Jev
cv2具有Canny边缘检测功能,而对于自动驾驶汽车中寻找道路线的功能,有许多可以根据需要扩展或忽略线条的函数。也许@jacobvinkas和其他人包括我自己会从比较霍夫变换和上述方法中受益,并看看哪种方法更有用。 - brianlmerritt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接