単純な 3D 再構築

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) ) 
# 平面セグメンテーション
plan_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