点云处理_PCA理解_提取物体点云几何主轴

点云做 PCA 是理解 PCA 最直观的例子之一。

对于一个物体的点云,PCA 的核心目的就是:

把每个 3D 点看成一个样本,点的 (x,y,z) 坐标看成 3 个特征,通过分析点云在哪个方向分布最"长",提取物体的几何主轴。


1. 一个物体的点云如何表示成矩阵?

谁是样本?谁是特征?

这是最关键的。

样本 Sample

每一个点就是一个样本。

特征 Feature

x y z
点1 (x_1) (y_1) (z_1)
点2 (x_2) (y_2) (z_2)
... ... ... ...
点N (x_N) (y_N) (z_N)

2. PCA 为什么能提取点云几何主轴?

假设你有一个"细长的杆状物体":

text 复制代码
                PC1 主轴
              ↗
        ●  ●  ●  ●  ●  ●
      ●  ●  ●  ●  ●  ●
    ●  ●  ●  ●  ●

点云在 PC1 方向上分布最长。

而在其他两个方向上的变化较小。

所以:

  • PC1:最长方向 → 物体主轴
  • PC2:次长方向 → 第二几何方向
  • PC3:最短方向 → 厚度方向

例如:

text 复制代码
           PC2
            ↑
            │
      ● ● ● │ ● ●
    ● ● ● ● ● ● ● ● ─────→ PC1
      ● ● ● │ ● ●
            │

对于 3D 物体:

3. 第一步:计算点云中心

4. 第二步:点云中心化

5. 第三步:计算点云协方差矩阵

所有点在 x 方向上有多"分散"

x 和 y 是不是一起变化,以及怎么一起变化

6. 协方差矩阵为什么能够描述物体形状?

这是点云 PCA 最重要的一点。

假设物体沿某个斜方向延伸:

text 复制代码
z
↑
│             ●
│          ●
│       ●
│    ●
│ ●
└────────────────→ x

你会发现:

当 (x) 增大时,(z) 也增大。

因此:

Cov(x,z)>0

协方差矩阵就能够记录:

点云在 XYZ 三个方向之间是如何共同变化的。

它不仅告诉你:Var(x),Var(y),Var(z)

还告诉你:Cov(x,y),Cov(x,z),Cov(y,z)

因此 PCA 可以找到:

真正的物体延伸方向,而不仅仅是世界坐标系的 X/Y/Z 方向。


7. 第四步:对协方差矩阵进行特征值分解

因此它们天然形成一个新的 3D 坐标系:

text 复制代码
                v3
                ↑
                │
                │
                O────────→ v1
               ╱
              ╱
             ↙
            v2

这个坐标系就是:


8. 特征值和物体形状有什么关系?

可以理解为:

text 复制代码
长度  ───────────→ λ₁

宽度        ↑
            │ λ₂

厚度   ⊙ λ₃

9. 一个具体的点云例子


计算质心


计算协方差矩阵


求特征值和特征向量

也就是说,PCA 自动发现:

这个物体主要沿 XY 平面的 45° 方向延伸。

虽然我们事先没有告诉 PCA:

"物体沿 45° 方向。"

它通过协方差矩阵自动找到了这个方向。


10. 在点云中,PCA 到底是谁对谁?

结合你前面问的"谁是样本、谁是特征、矩阵如何表示",可以总结成:

原始点云

PCA 概念 点云中的含义
一个样本 一个 3D 点 Pi
样本数 N 个点
一个特征 x、y、z 坐标
特征维度 3
原始数据矩阵 N x 3
均值 点云质心
中心化 每个点减去质心
协方差矩阵 (3 x 3)
特征向量 点云几何主轴方向
特征值 点云沿该主轴的分散程度

11. 对点云提取主轴的完整代码逻辑

cpp 复制代码
// 1. 输入 N 个 3D 点
N × 3 点云矩阵 X

// 2. 计算点云质心
mu = mean(X)

// 3. 中心化
Xc = X - mu

// 4. 计算 3×3 协方差矩阵
C = Xc.transpose() * Xc / (N - 1)

// 5. 特征值分解
C * v = lambda * v

// 6. 按特征值降序排列
lambda1 >= lambda2 >= lambda3

// 7. 提取主轴
v1 = 第一主轴,物体最长方向
v2 = 第二主轴,物体次长方向
v3 = 第三主轴,物体最小扩展方向

最终:

对于 SLAM、点云处理中的一个实际理解就是:PCA 不关心世界坐标轴原来是怎么定义的,而是根据点云自身的空间分布,自动找出它"最主要的延伸方向"。

相关推荐
狂奔solar17 天前
PCA主成分分析 —— 用更少的维度保留最多的信息
机器学习·pca
暂未成功人士!2 个月前
点云处理的关键技术流程和常用算法
ros·pcl·点云处理·点云去噪滤波
apcipot_rain3 个月前
计科八股20260606——二叉树、PCA、图深度学习、进程上下文、C语言预编译、文件读写、单精度浮点数
c语言·数据结构·算法·pca·图神经网络
装不满的克莱因瓶3 个月前
矩阵的主成分是什么?主成分分析(PCA)又能做什么?
人工智能·线性代数·算法·机器学习·ai·矩阵·pca
不务正业的小主治3 个月前
ezygene-降维分析
pca·msd·umap·简析基因·ezygene·降维分析·tsne
Daydream.V3 个月前
主成分分析 PCA 详解
python·信息可视化·数据分析·pca
点云学徒3 个月前
【PCL中Ptr释放问题 aligned_free 的2种解决方法】
c++·pcl·点云处理
普中科技4 个月前
【普中 51-Ai8051 开发攻略】-- 第 20 章 输入捕获实验
单片机·嵌入式硬件·输入捕获·pca·普中科技·ai8051u·aicube
kyle~5 个月前
Open3D---FPFH 3D点云的快速点特征直方图描述符
3d·机器人·点云处理