如上所述,我希望在给定的二维点云中找到最大的空矩形。然后,此信息将用于获取图像中显示为绿线的平行线,然后将用于获取LiDAR旋转的角度。
我已经用这个点云数据在matlab中尝试了凸包,边界和alpha形状函数。从表面上看,我想我必须
(1)将点云分成两块(礼品包装算法?)然后
(2)应用边界函数,从边界函数中提取坐标,
(3)我正在考虑运行RANSAC直线拟合。
然而,RANSAC需要更多的分数来判断这条线的“适合性”。目前,我正在探索Hough变换,看看直线检测是否适用于这种情况。
因此,这里的问题是,
(1)我是否在正确的轨道上找到绿线?还是有更好的方法?
(2)当直线垂直时,如何从直线获取角度值/渐变(tan(90) = inf)
第二幅图像描述了原点可能位于云点的中心或偏移量。我们可以假设将会有不同距离的平行线。


发布于 2016-09-26 19:11:01
您可以使用kmeans聚类来查找两个聚类,然后从一个聚类中分别查找距离最小的两个点
%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 equalhttps://stackoverflow.com/questions/39698956
复制相似问题