我有一个铺层文件,我试图变成一个网格的目的,射线追踪。它看起来像是open3d可视化工具,应该代表一个城市的一部分:

我使用open3d来获得以下网格(kdtree只是为了获得少量的点,因为文件很大):
input_file = "san.ply"
pcd = o3d.io.read_point_cloud(input_file)
point_cloud_in_numpy = np.asarray(pcd.points)
color = np.asarray(pcd.colors)
kd = scipy.spatial.cKDTree(point_cloud_in_numpy) #create kdtree for fast querying
near = kd.query_ball_point([0, 0, 0], 100)
items = point_cloud_in_numpy[near]
colors = color[near]
pcd2 = o3d.geometry.PointCloud()
pcd2.colors = o3d.utility.Vector3dVector(colors)
pcd2.points = o3d.utility.Vector3dVector(items)
pcd2.estimate_normals()
distances = pcd2.compute_nearest_neighbor_distance()
avg_dist = np.mean(distances)
radius = 2 * avg_dist
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_ball_pivoting(
pcd2,
o3d.utility.DoubleVector([radius, radius * 2]))
vertices = np.asarray(mesh.vertices)
faces = np.asarray(mesh.triangles)
o3d.visualization.draw_geometries([mesh])然而,在绘制网格时,我们得到了如下内容:

许多洞,只是根本就不是最佳的光线追踪。我也尝试使用create_from_point_cloud_poisson方法,但是我继续得到以下错误:
[ERROR] /Users/yixing/repo/Open3D/build/poisson/src/ext_poisson/PoissonRecon/Src/FEMTree.IsoSurface.specialized.inl (Line 1463)
operator()
Failed to close loop [6: 87 64 18] | (113981): (2752,2560,2196)我在网上找不到修复的方法。我试着四处看看,但我发现最好的是pymeshfix,它甚至不能工作,因为“假设输入表示一个封闭的实体对象”,而我的点云显然不是。我只是在寻找一种很好的方法来进行表面重建,让我保持城市的形状,同时也修复所有的洞,并使所有的表面由点附近的相邻表面水密。
发布于 2022-10-18 11:33:58
也许您可以从基于张量的TriangleMesh中使用TriangleMesh()来关闭漏洞:
mesh = o3d.t.geometry.TriangleMesh.from_legacy(mesh).fill_holes().to_legacy()fill_holes()为max接受一个参数。应关闭的孔尺寸
http://www.open3d.org/docs/latest/python_api/open3d.t.geometry.TriangleMesh.html#open3d.t.geometry.TriangleMesh.fill_holes
https://stackoverflow.com/questions/73265788
复制相似问题