点云技术相关产学研社区

 找回密码
 立即注册加入PCL中国点云技术相关产学研社区

扫一扫,访问微社区

查看: 9807|回复: 6

pcl中随机采样一致设置随机采样点个数问题

[复制链接]
发表于 2013-6-4 21:36:19 | 显示全部楼层 |阅读模式
我想利用pcl随机采样一致算法,现在想设置每次随机采样点个数,并返回采集的点在整个点云中的索引号。请教各位这个怎么设置?
回复

使用道具 举报

发表于 2013-6-4 21:54:49 | 显示全部楼层
我用过直接检测平面和圆球的流程,你貌似要自己调用,单纯的随机采样一致性算法实现是吧,这样的话,你可以看看,随机采样一致性对应类的内部实现,我记得看过一次..
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-4 22:02:01 | 显示全部楼层
mypcl 发表于 2013-6-4 21:54
我用过直接检测平面和圆球的流程,你貌似要自己调用,单纯的随机采样一致性算法实现是吧,这样的话,你可以 ...

嗯,我想自己调用,不知道你还有没有看到随机采样一致中初始最小采样点是怎么获取的,比如直线初始随机采集两个点,有一个getSamples()函数,但是又好像不是,如果你有印象的话,给我点提示,谢谢!
回复 支持 反对

使用道具 举报

发表于 2013-6-5 16:35:45 | 显示全部楼层
clackyang 发表于 2013-6-4 22:02
嗯,我想自己调用,不知道你还有没有看到随机采样一致中初始最小采样点是怎么获取的,比如直线初始随机采 ...

杨兄,应该是这样的吧,我参考的是ransac.hpp中的pcl::RandomSampleConsensus<PointT>::computeModel (int)的实现
里面的getsample和具体模型参数估计是随机采样一致性中的主要两步,这个都可以具体设置好的模型有关,和本身随机采样一致性算法流程没关系,你可以看看,它分别调用了 sac_model_->getSamples (iterations_, selection); 和sac_model_->computeModelCoefficients (selection, model_coefficients),dirty job其实是这些具体模型的类去实现的。随机采样一致性只是个大体的抽象流程。   呵呵,不知道说清楚了没。多多分享,共同学习!!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-6 14:43:06 | 显示全部楼层
mypcl 发表于 2013-6-5 16:35
杨兄,应该是这样的吧,我参考的是ransac.hpp中的pcl::RandomSampleConsensus::computeModel (int)的实现 ...

嗯,RandomSampleConsensus继承了pcl::SampleConsensus<PointT>,我也参考了pcl::RandomSampleConsensus<PoinT>::computeModel(int)的实现,其中随机数的生成是利用pcl::SampleConsensus<PointT>中成员函数pcl::SampleConsensus<T>::rnd(),但是rnd()是protected,我不能调用,后来查到到可以利用成员函数void pcl::SampleConsensus< T >::getRandomSamples        (const boost::shared_ptr< std::vector< int > > & indices,size_t         nr_samples,std::set< int > & indices_subset)可以获取需要获取的自己设置的随机点,这个函数也可以用pcl::RandomSampleConsensus<PoinT>调用,现在这个问题已经解决了。共同学习!
回复 支持 反对

使用道具 举报

发表于 2016-11-3 20:00:08 | 显示全部楼层
clackyang 发表于 2013-6-6 14:43
嗯,RandomSampleConsensus继承了pcl::SampleConsensus,我也参考了pcl::RandomSampleConsensus::compute ...

你好,你是怎么获取采样点在原点云中的索引号的?我现在急需这方面的解决方法!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-8 20:12:21 | 显示全部楼层
WangCC 发表于 2016-11-3 20:00
你好,你是怎么获取采样点在原点云中的索引号的?我现在急需这方面的解决方法! ...

利用这个函数void pcl::SampleConsensus< T >::getRandomSamples        (const boost::shared_ptr< std::vector< int > > & indices,size_t         nr_samples,std::set< int > & indices_subset)可以获取需要获取的自己设置的随机点,
运用:
pcl::RandomSampleConsensus<pcl::PointXYZ>ransac;
set<int> samplePointIndex;//存储采样点
int samplePointsize;//采样点个数
boost::shared_ptr<std::vector<int>> PtIndexPtr(new std::vector<int>(pointIndex));//获取指向容器的指针
//获取随机采样点
ransac.getRandomSamples(PtIndexPtr,samplePointsize,samplePointIndex);
回复 支持 反对

使用道具 举报

本版积分规则

QQ|小黑屋|点云技术相关产学研社区 ( 陕ICP备13001629号 )

GMT+8, 2024-4-29 13:59 , Processed in 2.252396 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表