点云的基本特征和描述,PCA主成分分析

本文深入探讨了点云特征的基本要求与分类,详细解析了点云的基本特征描述,并重点介绍了PCA(主成分分析)在点云数据处理中的应用。通过谱定理、Rayleigh商及SVD分解,揭示了PCA的数学原理,最后详述了点云PCA的具体步骤,包括计算协方差矩阵、特征分解等关键环节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、点云特征的基本要求

在这里插入图片描述http://www.pointclouds.org/documentation/tutorials/

二、点云特征的分类

在这里插入图片描述在这里插入图片描述https://blog.csdn.net/shaozhenghan/article/details/81346585

三、点云的基本特征描述

  1. 二维情况
    在这里插入图片描述
  2. 三维情况
    在这里插入图片描述

四、PCA(Princile Components Analysis)主成分分析

4.1 谱定理(Spectral Theorem)

在这里插入图片描述

4.2 Rayleigh Quotients

在这里插入图片描述

4.3 SVD分解的物理意义

在这里插入图片描述
矩阵M经过SVD分解,分解成两个正交矩阵UV和对角阵 σ \sigma σ,因此一个高维向量乘以M矩阵就相当于对向量在高维空间进行了旋转和拉伸。

在这里插入图片描述

  • 使用的核心算法是矩阵的特征值分解。
  • 基于矩阵特征值或者SVD分解求:
  1. 法向量方向
  2. 对应(等效)椭球体的最短轴方向
  3. 对应点云坐标的协方差矩阵的最小特征值对应的特征向量

在这里插入图片描述

  • 数据集在某个基上的投影值(也是在这个基上的坐标值)越分散,方差越大,这个基保留的信息也就越多
  • 信息量保存能力最大的基向量一定是的协方差矩阵的特征向量,并且这个特征向量保存的信息量就是它对应的特征值.

4.4 点云的PCA步骤

  1. 找到点 x i x_i xi周围半径 R R R范围内的所有点 X X X,计算均值:
    x ˉ = 1 n ∑ i = 1 N x i \bar{x}=\frac{1}{n} \sum_{i=1}^{N} x_{i} xˉ=n1i=1Nxi
  2. 计算样本方差:
    S 2 = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) 2 S^{2}=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^{2} S2=n11i=1n(xixˉ)2
  3. 计算样本协方差:

Cov ⁡ ( X , X ) = E [ ( X − E ( X ) ) T ( X − E ( X ) ) ] = 1 n − 1 ∑ i = 1 n ( x i − x ˉ ) T ( x i − x ˉ ) ) \begin{array}{l} \operatorname{Cov}(X, X)=E[(X-E(X))^T(X-E(X))] \\ \quad=\frac{1}{n-1} \sum_{i=1}^{n}\left(x_{i}-\bar{x}\right)^T(x_i-\bar{x}))\end{array} Cov(X,X)=E[(XE(X))T(XE(X))]=n11i=1n(xixˉ)T(xixˉ))

  1. 计算协方差矩阵:
    1 n ( X − x ˉ ) T ( X − x ˉ ) \frac{1}{n}(X-\bar{x})^T(X-\bar{x}) n1(Xxˉ)T(Xxˉ)

  2. 特征分解:
    V ( λ 1 λ 2 λ 3 ) V T V\left(\begin{array}{ccc} \lambda_{1} & \\ & \lambda_{2} & \\ && \lambda_{3} \end{array}\right) V^{T} Vλ1λ2λ3VT
    λ 1 ≥ λ 2 ≥ λ 3 ≥ 0 \lambda_{1} \geq \lambda_{2} \geq \lambda_{3} \geq 0 λ1λ2λ30
    在这里插入图片描述在这里插入图片描述

4.5 应用:PCA – Dimensionality Reduction

在这里插入图片描述在这里插入图片描述

打赏

码字不易,如果对您有帮助,就打赏一下吧O(∩_∩)O

支付宝

微信

### 使用PCL进行点云主成分分析 对于点云数据的主成分分析(PCA),PCL提供了专门的功能来简化这一过程。下面展示的是利用PCL库执行PCA的具体方法[^2]。 #### 加载点云数据 为了能够对点云实施PCA,首先要确保已经成功加载了目标点云文件到`pcl::PointCloud<pcl::PointXYZ>`对象中: ```cpp #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> // 声明点云变量 pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>); if (pcl::io::loadPCDFile<pcl::PointXYZ> ("test_pcd.pcd", *cloud) == -1) //* 加载点云文件 */ { PCL_ERROR ("Couldn't read file test_pcd.pcd \n"); } ``` #### 执行PCA计算 一旦拥有了点云集之后,则可以通过如下方式来进行PCA操作: ```cpp #include <pcl/features/pca.h> // 创建PCA对象并设置输入点云 pcl::PCA<pcl::PointXYZ> pca; pca.setInputCloud(cloud); // 获取特征向量矩阵以及中心化后的坐标系下的均值向量 Eigen::Matrix3f eigen_vectors = pca.getEigenVectors(); Eigen::Vector3f mean = pca.mean_; std::vector<float> eigen_values = pca.getEigenValues(); // 输出结果 std::cout << "Feature vector along the X axis: " << eigen_vectors.col(0).transpose() << std::endl; std::cout << "Feature vector along the Y axis: " << eigen_vectors.col(1).transpose() << std::endl; std::cout << "Feature vector along the Z axis: " << eigen_vectors.col(2).transpose() << std::endl; std::cout << "Mean point of all points in the dataset: [" << mean.x() << ", " << mean.y() << ", " << mean.z() << "]" << std::endl; for(size_t i=0; i<eigen_values.size(); ++i){ std::cout << "The " << i+1 << "-th Eigenvalue is : " << eigen_values[i]<< std::endl; } ``` 这段代码不仅实现了PCA的核心流程——即求解协方差矩阵及其对应的特征值特征向量;还额外给出了原始点集经由PCA变换后的新基底方向上的单位矢量表示形式,这有助于理解点云的主要分布趋势。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值