You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点云顺序调用pcl::RandomSample多次返回相同索引问题求助

问题根因

pcl::RandomSample为了保证算法结果可复现,默认使用固定的随机数种子,同一个采样实例只要没有更新种子,多次调用filter()接口时会生成完全相同的随机序列,最终返回的采样索引就会完全一致,这是PCL的刻意设计而非bug。

操作错误点

复用了同一个pcl::RandomSample实例重复执行采样,没有在两次调用filter()之间更新随机种子,不符合非固定结果的随机采样需求。

修复方案

只需在每次调用filter()前,调用setSeed()接口传入新的随机种子即可,推荐使用std::random_device生成真随机种子避免重复:

#include <random>

// 随机数生成设备,用于生成随机种子
std::random_device rd;

pcl::RandomSample<pcl::PointXYZRGB> sample(false);
sample.setInputCloud(cloud);
sample.setSample(5);

pcl::Indices indices;
// 第一次采样前设置随机种子
sample.setSeed(rd());
sample.filter(indices);
for (auto &i : indices) {
  std::cout << i << std::endl;
}

std::cout << "==========" << std::endl;

indices.clear();
// 第二次采样前重新设置新的随机种子
sample.setSeed(rd());
sample.filter(indices);
for (auto &i : indices) {
  std::cout << i << std::endl;
}

如果不需要复用采样实例,也可以每次采样前重新创建新的pcl::RandomSample对象,效果一致。

内容的提问来源于stack exchange,提问作者Morten Nissov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:57:01