matlab点云处理--pca创建最小包围盒

原包围盒

 pca创建的最小包围盒

%  原包围盒

Lx= max(pt.XLimits)-min(pt.XLimits);%点云数据的长方体包围盒的边长
Ly= max(pt.YLimits)-min(pt.YLimits);
Lz= max(pt.ZLimits)-min(pt.ZLimits);
pcshow(pt)
pos = [99.255 -4.1 0.32 Lx Ly Lz 0 0 0];
showShape('cuboid',pos,'Color','green','Opacity',0.5)

% pca创建局部坐标系

P=(1/size(in,1)) *  transpose(in - mean(in)) * (in - mean(in));
[V,D] = eig(P);


a1 = [1 0 0;0 1 0;0 0 1;0 0 0];
a2 = [transpose(transpose(mean(in))+V(:,1));transpose(transpose(mean(in))+V(:,2));transpose(transpose(mean(in))+V(:,3));mean(in)];

% svd变换 转换到原坐标系下
a1_centrioed = sum(a1',2)/size(a1',2);
a2_centrioed = sum(a2',2)/size(a2',2);
C1 = (a2' - repmat(a2_centrioed,1,size(a2',2))) * transpose(a1' - repmat(a1_centrioed,1,size(a1',2)));
[U,S,V] = svd(C1);
Rotation = V * U';
Translation = a2_centrioed - Rotation*a1_centrioed;
a3 = Rotation * in' + repmat(Translation,1,size(in',2));

% 新包围盒

pt2 = pointCloud(a3');
pcshow(pt2)
pos = [min(pt2.XLimits)+(max(pt2.XLimits)-min(pt2.XLimits))/2 min(pt2.YLimits)+(max(pt2.YLimits)-min(pt2.YLimits))/2 min(pt2.ZLimits)+(max(pt2.ZLimits)-min(pt2.ZLimits))/2 ...
       max(pt2.XLimits)-min(pt2.XLimits) max(pt2.YLimits)-min(pt2.YLimits) max(pt2.ZLimits)-min(pt2.ZLimits) 0 0 0];
showShape('cuboid',pos,'Color','green','Opacity',0.5)

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值