TASK:Perform PCA for the 40 objects, visualize it
使用MODELNET40数据集,选择数据集中的几张图片,使用PCA方法处理,并可视化。
MODELNET40数据集下载可去官方网站下载,或者别人的Gethub项目下载,本文使用的其中的几个模型文件。
一、MODELNET40数据集
ModelNet40 是一个广泛使用的三维计算机视觉和机器学习领域的数据集,专为3D形状分类任务设计。该数据集由 Princeton 大学的学者创建并发布,主要用于评估和训练算法在识别和分类不同三维几何形状方面的性能。
关键特性:
- 类别数量:ModelNet40 包含了40种不同的室内家具和日常物品类别,每个类别都有大量的三维模型实例。
- 数据形式:模型通常以点云或网格的形式提供,原始数据可能包含
.off
、.ply
等格式文件,也有研究者将其转化为.hdf5
格式方便快速加载和处理(本文使用的是txt文件格式的数据,每一个模型的点为文本中的一行,每行数据由6个数组成,前三个为三维坐标,后三个为颜色r,g,b归一化到[-1,1]
)。
根据之前的PCA原理分析,我们为了求得点云的主成分,只需要计算一个坐标的协方差矩阵 X . X T X.X^T X.XT(具体到本文使用的数据集是计算 X T . X X^T.X XT.X)的特征向量。最大特征值对应的特征向量为第一主成分,第二主成分为第二大的特征值对应的特征向量。
二、处理流程
开始 → 数据预处理 ↓
-
加载数据 → 中心化数据
↓
-
计算协方差矩阵/相关矩阵
↓
-
求解特征值与特征向量 → 选择主成分(PCA方向)
↓
-
进行数据投影 → 得到降维后的主成分数据
↓
-
可视化PCA结果:
→ PCA得分散点图(前两个主成分)
→ 主成分载荷图(变量在主成分上的权重分布)
→ 残差图(原始数据与PCA重构数据的差异)
↓结束
三、python实现,不使用PCA库
1.1 加载数据,中心化
def load_point_cloud(file_path):
# 读取txt文件
with open<