PCA构建点云包围盒

在前文中利用pcl官网的代码构建了AABB与OBB包围盒。但是后面发现一个问题,在官网给定的点云可以构建,但是自己的点云却不能构建。原因尚未查询。后面 在网上查找到利用PCA进行构建包围盒。

注:

本文着重讲解的是PCA的原理,代码可以在参考文章中找到。文章中很多公式在word编辑完成,并未在博客中再次编辑,望见谅。

参考的文章:https://blog.csdn.net/qq_16775293/article/details/82801240

首先说一下边界体的概念。边界体是用来包围一个三角网格的所有顶点,也就是将所有的三角形包围在边界体内部。同样的包围盒也是类似的将所有的点包围在一个盒子中,这个盒子也分为很多种:AABB包围盒、OBB包围盒、包围球等。本章主要讲的是OBB包围盒。

PCA(Principal Component Analysis)主成分分析

主成分分析可以用来计算有多个变量组成的数据集的坐标系空间,数据集的多个变量可以分成多个不相关分量,存在一个顶点位置数组中的x,y,z坐标值就是这样的数据集(点云)。数据集中最不同的方向表示主分量的基本主元。

将每个点设为P_{i}=<x_{i},y_{i},z_{i}>,点云就看作P_{1},P_{2},P_{3},...P_{N}, N个点构成的数据集。首先利用以下公式计算位置平均数m

在构建一个协方差矩阵C,

协方差矩阵是由以下六个元素组成的对称矩阵:

协方差矩阵表示x,y,z坐标值之间的相互关系。若这三个坐标值两两无关,则他们在协方差矩阵上元素的值为0,为了将所有的点集中均匀的沿着坐标轴分布,需要将协方差矩阵转换成对角阵。我们可以利用线性代数里面的内容:

            以作为该对象自然轴对应的方向,下面计算出从顶点沿X、Y、Z三个方向最大和最小位置,根据这些最大值和最小值可以容易的构建出边界盒的六个平面。

为了确定最大和最小的范围,可以通过计算每个顶点位置坐标P_{i}与单位向量的内积来完成。边界盒的6个平面分别为:

边界盒的尺寸就是X,Y,Z三个方向上相应内积的最大值与最小值之差,边界盒的中心O就是三对反向平面中三个平面的交点,令a,b,c分别为X,Y,Z上最大值与最小值的平均值:

代码原理在参考的文章中原理简述部分已经说明,在此不再赘述。

PCA在很多地方还可以用到,笔者觉得了协方差矩阵、特征值、特征向量的几何意义是理解PCA的关键。上述代码中还用到四元数,四元数主要用于旋转变化,在后面会再写一篇文章简述一下。

最终代码测试的结果:

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值