
В настоящее время я пытаюсь восстановить поверхность по облаку точек с помощью Open3D. Не все мои нормальные векторы направлены наружу, как вы можете видеть, в этой области «шеи» они начинают указывать внутрь. Кто-нибудь знает, как решить эту проблему? Вот мой код:
def load_dicom(path: str):
return pydicom.dcmread(path)
(... Code to extract points from .dcm file...)
if __name__ == "__main__":
pts = sample_points_on_sphere(5000) #(N,3)
rtstruct = "path/to/file.dcm"
roi = "PTV"
out = "out/ptv_mesh.ply"
rs = load_dicom(rtstruct)
pts = extract_roi_point_cloud_mm(rs, roi)
#eagle = o3d.data.EaglePointCloud()
#pcd = o3d.io.read_point_cloud(eagle.path)
# create empty point cloud
pcd = o3d.geometry.PointCloud()
# assign points
pcd.points = o3d.utility.Vector3dVector(pts)
# Create PointCloud
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(pts)
avg_dist = np.mean(pcd.compute_nearest_neighbor_distance())
pcd.estimate_normals(
search_param=o3d.geometry.KDTreeSearchParamKNN(knn=50)
)
pcd.normalize_normals()
pcd.orient_normals_consistent_tangent_plane(300)
o3d.visualization.draw_geometries(
[pcd],
point_show_normal=True
)
Подробнее здесь: https://stackoverflow.com/questions/798 ... rds-open3d
Мобильная версия