0

如上所述,我想找到給定二維點雲中最大的空矩形。然後將這些信息用於獲取圖像中綠線所示的平行線,然後將其用於獲取LiDAR旋轉的角度。查找二維點雲中最大的空矩形(迷失方向)

我已經嘗試了凸點,邊界和alpha形狀函數在matlab與此點雲數據。從外觀上來看,我覺得我必須

(1)突破點雲成兩個塊(禮品包裝算法中?),然後

(2)適用邊界功能;使用座標從邊界函數中提取,

(3)我正在考慮運行RANSAC線擬合。

但是,RANSAC需要更多的點來判斷線條的「適應性」。目前,我正在探索Hough變換,以查看該行檢測是否適用於這種情況。

因此,這裏的問題是,

(1)我在正確的軌道上找到綠線?或者,還有更好的方法?

(2)如何獲得從線路的角度值/梯度當行是垂直的(TAN(90)= INF)

第二圖像描繪起點可以是在雲中的點的中心或在一個偏移量。可以假定會出現平行線具有不同的距離從中心

Parallel lines to be found without Offset

Parallel lines to be found with Offset

+0

(1)你是什麼意思?你計算了那些綠線嗎?他們看起來不錯。 (2)如果你有綠線,獲得與垂直(或水平)之間的角度應該是直截了當的(點積?) –

+0

我想找到綠線。它顯示爲基於點雲的理想結果。對不起,如果它誤導你。 –

回答

1

可以使用k均值聚類,以找到兩個簇然後找到每個兩點從集羣它們之間的距離是最低

%a function for rotation of points 
function out = rot(theta,data) 
    mat = [cos(theta), -sin(theta); 
      sin(theta), cos(theta)]; 
    out = data * mat.'; 
end 
a= [rand(505,1)*.4 , rand(505,1) ]; 
b= [rand(500,1)*.4 + .6 , rand(500,1)]; 
a = [a;b]; 
rt = rot(.4,a); 
%kmeans clustering 
km=kmeans(rt,2); 
class1 = rt(km==1,:); 
class2=rt(km==2,:); 
%find min distance 
[srch, d] = dsearchn(class1, class2); 
[mn, I] = min(d); 

plot(rt(:,1), rt(:,2),'.') 
hold on 
p1 = class1(srch(I),:); 
p2 = class2(I,:); 
plot(p1(1),p1(2),'*r') 
plot(p2(1),p2(2),'*g') 
xy = [class1(srch(I),:);class2(I,:)] 
plot(xy(:,1),xy(:,2),'-g') 
axis equal 
+0

嗨rahnema,感謝您建議Kmean集羣。它解決了第一部分。我將使用霍夫變換來完成剩下的工作。除非你有其他建議。 –

+0

@ChitiiRan不需要RANSAC和Hough方法。因爲連接兩點的線顯示LiDAR的方向。但是最好使用其他聚類方法而不是kmeans,因爲kmeans對種子的初始值敏感。我建議使用SOM進行羣集。 – rahnema1