PCA构建点云包围盒

PCL 同时被 2 个专栏收录
20 篇文章 6 订阅
32 篇文章 16 订阅

评价:文章主要讲解PCA生成包围盒的原理,PCA计算点云的特征向量和特征值可以使用C++编程直接实现,也可以使用PCL点云库,或者使用Python的numpy函数实现。

注:

本文着重讲解的是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的关键。上述代码中还用到四元数,四元数主要用于旋转变化,在后面会再写一篇文章简述一下。

最终代码测试的结果:

  • 0
    点赞
  • 2
    评论
  • 11
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值