File size: 2,071 Bytes
3217786
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# import open3d as o3d

# # 加载点云数据
# pcd = o3d.io.read_point_cloud("/data_160TB/2021/yangkun/gaussian-splatting-main-copy/eg3d_human/train/person_0/point_cloud/iteration_12000/point_cloud.ply")

# # 基于统计距离滤波
# # cl, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0)
# # 设置体素的大小
# voxel_size = 0.01

# # 进行体素化
# voxel_grid = o3d.geometry.VoxelGrid.create_from_point_cloud(pcd, voxel_size)

# # 可视化滤波后的点云
# # inlier_cloud = pcd.select_by_index(ind)
# # o3d.visualization.draw_geometries([inlier_cloud])

# # 保存滤波后的点云为PLY格式
# o3d.io.write_point_cloud("/data_160TB/2021/yangkun/gaussian-splatting-main-copy/eg3d_human/train/person_0/point_cloud/iteration_12000/point_cloud0.ply", voxel_grid)

import open3d as o3d

# 加载点云数据
point_cloud = o3d.io.read_point_cloud("/data_160TB/2021/yangkun/gaussian-splatting-main-copy/eg3d_human/train/person_0/point_cloud/iteration_12000/point_cloud.ply")

# 将点云数据转换为 CPU 模式
point_cloud_cpu = point_cloud.to_legacy_pointcloud()
# 计算法向量
point_cloud_cpu.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30))

# 获取法向量和曲率
normals = point_cloud_cpu.normals
curvatures = point_cloud_cpu.compute_curvature()

# 设置曲率阈值
curvature_threshold = 0.05  # 根据具体情况调整阈值

# 根据曲率进行剔除
filtered_points = []
for i in range(len(point_cloud_cpu.points)):
    if curvatures[i] < curvature_threshold:
        filtered_points.append(point_cloud_cpu.points[i])

# 创建剔除后的点云
filtered_point_cloud = o3d.geometry.PointCloud()
filtered_point_cloud.points = o3d.utility.Vector3dVector(filtered_points)

# 保存稠密化后的点云为PLY文件
o3d.io.write_point_cloud("/data_160TB/2021/yangkun/gaussian-splatting-main-copy/eg3d_human/train/person_0/point_cloud/iteration_12000/point_cloud0.ply", filtered_point_cloud)

print("Point cloud densification completed and saved as output_dense_point_cloud.ply")