import open3d as o3d import numpy as np import copy # 读取PCD文件 pcd = o3d.io.read_point_cloud("rabbit.pcd") # 可视化原始点云 o3d.visualization.draw_geometries([pcd]) # 下采样 pcd_down = pcd.voxel_down_sample(voxel_size=0.05) # 去噪 pcd_remove_noise, ind = pcd_down.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) # 提取法向量 pcd_remove_noise.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30)) # 平面分割 plane_model, inliers = pcd_remove_noise.segment_plane(distance_threshold=0.01, ransac_n=3, num_iterations=1000) # 点云配准 source = copy.deepcopy(pcd_remove_noise) target = copy.deepcopy(pcd_remove_noise) source.transform(plane_model.get_rotation_matrix()) icp_output = o3d.pipelines.registration.registration_icp(source, target, 0.1, np.identity(4), o3d.pipelines.registration.TransformationEstimationPointToPoint(), o3d.pipelines.registration.ICPConvergenceCriteria(relative_fitness=1e-6, relative_rmse=1e-6, max_iteration=50)) # 点云重建 mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd_remove_noise, depth=10, scale=1.1, linear_fit=True)[0:2] # 可视化重建结果 o3d.visualization.draw_geometries([mesh])
简单三维重建
猜你喜欢
转载自blog.csdn.net/qq_53545309/article/details/129430324
今日推荐
周排行