首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在二维点云中查找最大的空矩形(迷失方向)

在二维点云中查找最大的空矩形(迷失方向)
EN

Stack Overflow用户
提问于 2016-09-26 17:17:52
回答 1查看 540关注 0票数 0

如上所述,我希望在给定的二维点云中找到最大的空矩形。然后,此信息将用于获取图像中显示为绿线的平行线,然后将用于获取LiDAR旋转的角度。

我已经用这个点云数据在matlab中尝试了凸包,边界和alpha形状函数。从表面上看,我想我必须

(1)将点云分成两块(礼品包装算法?)然后

(2)应用边界函数,从边界函数中提取坐标,

(3)我正在考虑运行RANSAC直线拟合。

然而,RANSAC需要更多的分数来判断这条线的“适合性”。目前,我正在探索Hough变换,看看直线检测是否适用于这种情况。

因此,这里的问题是,

(1)我是否在正确的轨道上找到绿线?还是有更好的方法?

(2)当直线垂直时,如何从直线获取角度值/渐变(tan(90) = inf)

第二幅图像描述了原点可能位于云点的中心或偏移量。我们可以假设将会有不同距离的平行线。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-26 19:11:01

您可以使用kmeans聚类来查找两个聚类,然后从一个聚类中分别查找距离最小的两个点

代码语言:javascript
复制
%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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39698956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档