boundary()函数寻找三维平面点云精确边界(二)

k = boundary(x,y,z)https://ww2.mathworks.cn/help/matlab/ref/boundary.html#d123e105000

在上一节已经看到,由于某些不在近似平面附近的杂点影响,边界搜索出错

为了消除此类影响,需要重新规划基准平面进行分步投影降维。

最小二乘法平面拟合

最小二乘拟合平面的原理,即为将我们现有的所有数据点

获得平面方程后,我们可以进行两次投影,其一,由原点投影至平面方程的黄色点,此时所有点都处于平面方程上。其二,黄色点对平面xoy进行投影,此时的最终红色投影点处于水平面上,这类点的边界仍然是关联到蓝色原点的边界的。

如图,相对于直接对xoy平面进行投影,通过二次投影而实现的数据降维能够明显减小特异点云造成的降维误差。

关于三维点平面回归的做法已经有很多,再此就不再赘述平面方程的计算方法了。

点面投影参考:

点到平面的垂直向量_三尺流流的博客-CSDN博客python实现一些简单空间三维算法https://blog.csdn.net/qq_55433334/article/details/125304475

逻辑流

1.原点云平面拟合得到方程:Ax+By+Cz+D=0;

2.原点对平面方程进行投影,获得处于平面的投影点云;

3.砍掉z轴坐标并使用k = boundary(x,y,s)搜索边界;

4.通过边界索引查询平面的投影点云的边界。

代码matlab

注意,此处输入的点云文件为处于同一平面上的三列坐标点云txt文件

clear all;
close all;
A=load('..\拟合平面整体投影.txt')


x = A(:,1)
y = A(:,2)
z = A(:,3)
k = boundary(x,y,0.8);
hold on;


K = A(k,:) 

figure(1)
plot(x(k),y(k),'.');

figure(2)
scatter3(A(:,1),A(:,2),A(:,3),'.')
hold on
scatter3(K(:,1),K(:,2),K(:,3),'*')
hold on 
scatter3(K(1,1),K(1,2),K(1,3),'o')

 其中,小图为在xoy平面投影使用k = boundary(x,y,s)搜索边界,大图为通过边界索引查询平面的投影点云的边界。

精确度上来看0.5m的距离上有20到30个边界点了,边界点云请查询工作区:

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三尺流流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值