目录
pcd.uniform_down_sample(every_k_points=5) pcd.voxel_down_sample(voxel_size=0.02) pcd.farthest_point_down_sample(num_samples=2000)
1. 体素下采样
point_cloud_voxel_downsampling.py
import open3d as o3d
if __name__ == "__main__":
# 1. pcd
print("Load a ply point cloud, print it, and render it")
sample_ply_data = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(sample_ply_data.path)
# Flip it, otherwise the pointcloud will be upside down.
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
print(pcd)
o3d.visualization.draw([pcd])
# 2. voxel_down_sample
print("Downsample the point cloud with a voxel of 0.05")
downpcd = pcd.voxel_down_sample(voxel_size=0.05)
o3d.visualization.draw([downpcd])
2. 均匀下采样
上面的代码更换:
# downpcd = pcd.voxel_down_sample(voxel_size=0.05) # every_k_points (int): Sample rate, the selected point indices are [0, k, 2k, ...] downpcd = pcd.uniform_down_sample(every_k_points=15)
3. 最远距离采样
关键代码:
downpcd = pcd.farthest_point_down_sample(num_samples=1000)
Downsamples input pointcloud into output pointcloud with a set of points has farthest distance. The sample is performed by selecting the farthest point from previous selected points iteratively. 即每次选择的采样点都是距离已经采样的点云最远的点。
import open3d as o3d
if __name__ == "__main__":
# 1. pcd
print("Load a ply point cloud, print it, and render it")
sample_ply_data = o3d.data.PLYPointCloud()
pcd = o3d.io.read_point_cloud(sample_ply_data.path)
# Flip it, otherwise the pointcloud will be upside down.
pcd.transform([[1, 0, 0, 0], [0, -1, 0, 0], [0, 0, -1, 0], [0, 0, 0, 1]])
print(pcd)
o3d.visualization.draw([pcd])
# 2. voxel_down_sample
print("Downsample the point cloud with a voxel of 0.05")
downpcd = pcd.farthest_point_down_sample(num_samples=1000)
# downpcd.paint_uniform_color((1, 0, 0))
o3d.visualization.draw([downpcd])