繁体   English   中英

二维点云中的线检测

[英]Line detection in 2D point cloud

我正在开发一个更大的系统,用于自动导引车的导航和定位,并偶然发现了一个问题。 在开发地图时,重要的部分是找到墙壁。 导航是使用 LiDAR 装置完成的。

传感器看到的示例“图像”如下: 在此处输入图片说明

想要的输出是这样的: 在此处输入图片说明

我已经看了很多 Hough 变换和 RANSAC 算法,但是据我所知,Hough 变换用于图像,这对我的情况不是最佳的,并且 RANSAC 不太适合在稀疏数据中找到多个墙。

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

我在 python 中开发,但如果有人知道一个合适的一个包中没有的算法,我自己编写算法没有问题。

提前致谢,雅各布

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

霍夫变换可以在点云上很好地完成,但是我不知道现成的库实现。

这是一个带有完整解释和源代码的优秀示例:使用霍夫变换处理 LIDAR 数据

如果您了解霍夫变换的工作原理并查看代码,您将看到它如何遍历点并在特征空间中创建二维直方图。 实现这样的事情非常简单。

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

我试过你的形象,它开始寻找一个房间:

源图像 侵蚀/扩张的图像 阈值

下面是一个使用 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM