如何让Open3D对同一OBJ文件采样点云结果每次一致?
解决Open3D Poisson Disk采样结果不一致的问题
要让sample_points_poisson_disk每次生成相同的点云,核心是正确设置Open3D专属的随机种子,而非仅设置Python内置的随机种子——因为Open3D的采样算法使用自身独立的随机数生成器,和Python全局随机模块不共享状态。
修正后的代码
import open3d as o3d # 固定Open3D的随机种子,值可替换为任意固定整数 o3d.utility.random.seed(42) # 加载网格 mesh = o3d.io.read_triangle_mesh(objFilePath) # 执行Poisson Disk采样 density_pcd = mesh.sample_points_poisson_disk(cloudCount)
关键说明
- 必须在调用采样函数前设置
o3d.utility.random.seed(),确保采样过程使用固定的随机序列。 - 若之前尝试过Python的
random.seed()或numpy.random.seed(),这些不会影响Open3D的采样逻辑,两者的随机数生成器相互独立。 - 若仍存在不一致,检查OBJ文件是否在每次运行时被意外修改,或加载网格时是否启用了可能改变网格结构的参数(比如
enable_post_processing等,默认值为False,一般不影响)。
内容的提问来源于stack exchange,提问作者hu changpan
相关产品推荐
相关产品推荐

