簡體   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