import open3d as o3d
import numpy as np
#读取电脑中的 ply 点云文件
source = o3d.io.read_point_cloud("/home/points/3.pcd") #source 为需要配准的点云
target = o3d.io.read_point_cloud("/home/points/1.pcd") #target 为目标点云
#为两个点云上上不同的颜色
source.paint_uniform_color([0.4, 0.6, 0.0]) #source 为黄色
target.paint_uniform_color([0.3, 0.3, 0.4]) #target 为蓝色
source = source.voxel_down_sample(voxel_size=0.05)
target = target.voxel_down_sample(voxel_size=0.05)
# source.remove_statistical_outlier(nb_neighbors=50,std_ratio=5)
# target.remove_statistical_outlier(nb_neighbors=50,std_ratio=5)
threshold = 1.5 #移动范围的阀值
trans_init = np.asarray([[1,0,0,0], # 4x4 identity matrix,这是一个转换矩阵,
[0,1,0,0], # 象征着没有任何位移,没有任何旋转,我们输入
[0,0,1,0], # 这个矩阵为初始变换
[0,0,0,1]])
reg_p2p = o3d.pipelines.registration.registration_icp(source, target, threshold, trans_init, o3d.pipelines.registration.TransformationEstimationPointToPoint())
source.transform(reg_p2p.transformation)
# #创建一个 o3d.visualizer class
vis = o3d.visualization.Visualizer()
vis.create_window(window_name ='apple', width=1920, height=1080, left=0, top=0)
render_option = vis.get_render_option()
render_option.point_size = 1
render_option.background_color = np.asarray([0.1, 0.1, 0.2])
#将两个点云放入visualizer
vis.add_geometry(source)
vis.add_geometry(target)
vis.run()
点云处理:ICP配准
于 2022-02-24 23:03:10 首次发布