本文看了博主三维点云学习(1)上-PCA主成分分析 法向量估计_主成分分析法表面法向量估计-CSDN博客的文章,内容基本上参考了该博文,在这里写只是为了记笔记,没有要抄袭的意思,如果要更详细的了解,可以去看该博文。
首先,读取点云数据并且处理点云数据,我下载的一个点云数据文件不是pcd文件,我首先读取了点云数据,并将其处理为array数据,该数据的shape为(641, 3),表示有641个xyz的数据,后面的代码和前面博文的相同(该代码用到了pca主成分分析原理,也很好理解,在前面博文有解释,要单独理解主成分分析原理,可以看我的另一篇博文12.1 主成分分析原理(PCA)_主成分分析零均值化-CSDN博客,该博文详细解释了主成分分析原理),代码如下:
import numpy as np
import open3d as o3d
import open3d as o3d
import os
import numpy as np
import matplotlib.pyplot as plt
from pandas import DataFrame
from pyntcloud import PyntCloud
# 聚类算法
def cluster(points, radius=100, nums=250):
"""
points: pointcloud
radius: max cluster range
"""
print("................", len(points))
items = []
while len(points) > 1:
item = np.array([points[0]])
base = points[0]
points = np.delete(points, 0, 0)
distance = (points[:, 0] - base[0]) ** 2 + (points[:, 1] - base[1]) ** 2 + (points[:, 2] - base[2]) ** 2# 获得距离
infected_points = np.where(distance <= radius ** 2) # 与base距离小于ra