一、代码
Python
import numpy as np
import open3d as o3d
def 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,