我在 open3d 中的 create_from_point_cloud_alpha_shape 方面遇到问题。 这是我的代码。
import open3d as o3d
import numpy as np
mesh = o3d.io.read_triangle_mesh('Bunny.stl')
print(mesh)
pcd = mesh.sample_points_poisson_disk(750)
alpha = 0.3
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha)
mesh.compute_vertex_normals()
o3d.visualization.draw_geometries([mesh], mesh_show_back_face=True)
这是错误消息。
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(pcd, alpha)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
IndexError: invalid unordered_map<K, T> key。
我不知道问题是什么。我检查了stl文件和pcd数据,没有问题。 请..
检查 stl 文件 检查pcd数据 尝试不同的 alpha 值
IndexError: invalid unordered_map<K, T> key
错误消息通常表明 Open3D 代码库中存在问题,而不是的代码或数据的问题。这种特殊的错误通常与 Open3D 中的 Alpha 形状构建算法的特定版本和某些数据集有关。
可以尝试以下几种解决方案:
- 更新 Open3D: 确保使用的是最新版本的 Open3D。较新版本通常包含错误修复和改进。可以使用以下命令更新 Open3D:
bash
pip install --upgrade open3d
-
尝试不同的 Alpha 值: 如所述,已经尝试过这一点。但是,值得尝试更广泛的值范围,例如从较小的值(例如 0.05)开始,然后逐渐增加,看看是否可以成功创建网格。
-
简化网格: 如果更新 Open3D 或更改 Alpha 值不起作用,则可以尝试简化网格。这可以通过减少构成网格的三角形数量来实现。可以使用 Open3D 中的
simplify_quadric_decimation
方法来做到这一点。
python
simplified_mesh = mesh.simplify_quadric_decimation(target_number_of_triangles=500)
mesh = o3d.geometry.TriangleMesh.create_from_point_cloud_alpha_shape(simplified_mesh.sample_points_poisson_disk(750), alpha)
- 使用其他表面重建方法: 如果 Alpha 形状方法仍然不起作用,则可以尝试使用 Open3D 中的其他表面重建方法,例如泊松表面重建:
python
pcd.estimate_normals()
mesh, densities = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd, depth=8)
- 报告问题: 如果尝试了所有这些解决方案并且仍然遇到错误,则可以在 Open3D GitHub 存储库中报告问题:https://github.com/isl-org/Open3D/issues
请确保在的问题报告中包含以下信息:
- 使用的 Open3D 版本
- 的操作系统
- 重现该问题的代码段
- 如果可能,请提供示例数据集
这将帮助 Open3D 开发人员更快地识别和解决问题。
标签:python,pycharm,open3d From: 78847134