1作业要求
2原理部分
3法向量估计
法向量估计
思想:选取点云中每一点,对其进行临近点的搜索,将包含该点的临近点拟合成曲面,对曲面中的点进行PCA主成分分析,查找特征值最小的对应的特征向量,该特征向量即为该拟合曲面的法向量
4核心代码![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/44466a36e7562d2ddd5341520ac116ae.png)
5代码
# 实现PCA分析和法向量计算,并加载数据集中的文件进行验证
import open3d as o3d
import os
import numpy as np
from pyntcloud import PyntCloud
# 功能:计算PCA的函数
# 输入:
# data:点云,NX3的矩阵
# correlation:区分np的cov和corrcoef,不输入时默认为False
# sort: 特征值排序,排序是为了其他功能方便使用,不输入时默认为True
# 输出:
# eigenvalues:特征值
# eigenvectors:特征向量
def PCA(data, correlation=False, sort=True):
# 作业1
# 屏蔽开始
# 1.归一化 取均值,去中心化
average_data=np.mean(data,axis=0)#对列取均值
decentration_matrix=data-average_data#去中心化
# 2.取协方差矩阵H,并用SVD奇异值分解,求解出相应的特征值,特征向量
H=np.dot(decentration_matrix.T,decentration_matrix)#求协方差矩阵
eigenvectors,eigenvalues,eigenvectors_T=np.linalg.svd(H)#SVD特征值、特征向量 详见np.linalg.svd()函数
# 屏蔽结束