一、代码
Python
import numpy as np
import open3d as o3ddef apply_gaussian_filter(pcd, k=30, sigma=1.0):"""对点云应用高斯滤波。参数:pcd (open3d.geometry.PointCloud): 输入的点云。k (int): 每个点的邻居数量。sigma (float): 高斯核的标准差。返回:open3d.geometry.PointCloud: 高斯滤波后的点云。"""# 估计法线以改善KNN搜索pcd.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))# 构建KNN树pcd_tree = o3d.geometry.KDTreeFlann(pcd)points = np.asarray(pcd.points)new_points = np.zeros_like(points)# 对每个点应用高斯滤波for i, point in enumerate(points):# 搜索KNN[k, idx, _] = pcd_tree.search_knn_vector_3d(point, k)knn_points = points[idx, :]# 计算中心点到邻居的距离distances = np.linalg.norm(knn_points - point, axis=1)# 计算高斯权重weights = np.exp(-(distances ** 2