最新动态
PCL 中 KdTree 的使用心得
2024-12-17 14:36


为了促进同行业人员(特指 LiDAR 点云处理人员或相近行业)的技术交流,解决平时开发过程中遇到的技术性问题,博主建立一个QQ群,欢迎大家积极加入,共同引领点云行业的快速发展 ~

群名:LiDAR点云部落
群号:190162198


今天在优化自己的代码时,发现影响程序运行时间的罪魁祸首在 KdTree 的使用上,经过优化,将 30s 的程序优化到 7s,故记录下 KdTree 的优化心得

链接:PCL KdTree 官方教程


首先从搜索方式来讲,一个是基于最近点的个数来搜索,一个是基于半径搜索

从结果来讲,两者得到的都是搜索到的点及这些点到搜索点距离的额平方

两者的具体原理请自行查找

那么在单线程的情况下,到底谁快

其实这个没有绝对的好坏,并且也很难通过一定的方法对比好坏

可以明确的是,这两个方法在大多数场景下是没法替换的,因为选择使用哪一种搜索方式肯定与你的用途或目的有关,比如说,你要求邻域的协方差,你只能用 radiusSearch(),你是无法通过 nearestKSearch() 来控制邻域点的个数的;反之同理

既然你根据你的想法确定了搜索方式,那么你会问,怎么最快


方法一:并行加速(如 omp ,或者用 GPU 加速)

这里推荐一篇 xuyiqiang87 写的非常好的 OMP 文章

PCL 中 KdTree 的使用心得

首先我们以 nearestKSearch() 为例,讲解怎么加速

 

值得注意的是,我把 std::vector vecIdx(K); 和 std::vector vecDistance(K); 写在了 for 循环里!否则在并行计算中程序会 crash

方法二:预先设定 K 值

预先设定 K ,并且直接初始化 vecIdx(K) 和 vecDistance(K);,从理论上来讲,该操作一定程度上防止了 std::vector 在 capacity 不够的情况下导致的内存申请与释放

但是在现实大部分场景中,你的 capacity 足够你用。也就是说,这并不会很明显的加快你的程序,或者说,在千万级别的点云处理中,基本无速度变化…上亿级别的估计会有吧…

所以这个方法无实质性作用

方法三:在保证正确率的情况下,减少或者抽稀要构建 KdTree 的点云中点的个数

为什么要这样做?假设你的点非常密集,那么 KdTree 在做 K 临近搜索时,要进行一定的排序比较操作,点非常密集,那么差别就小,比较起来比较耗时。所以从某种程度上讲,nearestKSearch() 更适合于点数适中的情况下。

但是记得前提:在保证正确率的情况下

方法四:构建多个相同的 KdTree ,分别搜索

放弃吧 … 这不是明智的选择

方法五:待挖掘


方法一:并行加速(如 omp )

原理同上

方法二:点云质量较好的情况下,将大半径搜索改为小半径搜索加聚类

这个详细说一下什么意思

在点云质量较好的情况下,假设你原来是用的 float radius = 0.5f; 进行搜索,那么的话,速度会比较慢,半径越大,需要判断的点越多,需要计算的距离的平方也越多

那么的话,换一种想法,我们改成 float radius = 0.1f; 进行搜索,在搜索得到的点中,依次以这些点为搜索点,继续向外扩散,最终达到 radius = 0.5f 的效果

这个思想非常类似于聚类中的 DBSCAN(网上有很多介绍)

这种思想非常适用于区域增长,或者是基于一定条件聚类的算法中,配合上 OMP 的加速,可以达到相当好的效果

伪代码大概为

 

方法三:点云质量较差的情况下,用 nearestKSearch() 代替

这个就不多说了,经验之谈,写多了自然就会了 …

方法四:待挖掘


    以上就是本篇文章【PCL 中 KdTree 的使用心得】的全部内容了,欢迎阅览 ! 文章地址:http://ww.kub2b.com/news/6121.html
     栏目首页      相关文章      动态      同类文章      热门文章      网站地图      返回首页 企库往资讯移动站 http://ww.kub2b.com/mobile/ , 查看更多   
最新文章
环球圆桌对话:用反制告诉美方,霸道高关税是错的
编者按:近日,美国借“对等关税”的名义挑动全球范围的“关税战”,引起国际舆论关注。中国为什么必须就“对等关税”实施反制?
OPPO、ViVO、加多宝的品牌营销强在哪里?oppo手机是哪个国家的品牌「OPPO、ViVO、加多宝的品牌营销强在哪里?」
今天跟大家分享品牌营销,它有规律可循。▌一、营销的品牌导向1.企业的品牌导向:创业的时候,开始的时候是产品导向,还是品牌导
手机静态ip设置参数 这七步帮你完成手机静态ip「手机静态ip设置参数 这七步帮你完成」
手机在我们现在飞速发展的社会中有着十分重要的作用,随着互联网的发展,手机的速度也是越来越快,越来越流畅。但也有时候我们在
tplogin重新设置密码,tplogincn路由器设置管理密码是多少tplogincn手机登录「tplogin重新设置密码,tplogincn路由器设置管理密码是多少」
tplogincn路由器路由器的管理密码:1.一般路由器的管理账号和密码是:admin(小写字母)。2.有些路由器要求安全登录一次,并设置自己
vivo 是什么手机牌子?认识一款手机-VIVOvivo中文叫什么手机「vivo 是什么手机牌子?认识一款手机-VIVO」
vivo,一个从音乐手机起步,逐渐成长为全球知名品牌,在智能手机领域不断追求创新和完美的品牌。从最初的步步高音乐手机,到如今
游戏手机的自我救赎:ROG 8 Pro上手后,我看到了ROG的未来专门打游戏的手机「游戏手机的自我救赎:ROG 8 Pro上手后,我看到了ROG的未来」
来源|锚思科技作者|陈宝玉 游戏手机二选一,告诉你我的选择!!! 游戏手机作为手机的一个细分产品线,只有专业玩家和对游戏有
battery guru最新版 v2.3.13手机电池检测软件「battery guru最新版 v2.3.13」
battery guru最新版是一款能够对你安卓设备的电池进行保护,能够延长其使用寿命。多项功能的设置,让你能够通过更为精准的数据,
CBA1/4决赛:辽篮拿到赛点,青岛队扳平比分
4月15日,2024-2025赛季中国男子篮球职业联赛(CBA)季后赛四分之一决赛继续进行,首回合失利的青岛队客场大胜广厦队将总比分扳
单场0分又被雪藏!火箭队第18人恐难留队,三分精准,但功能单一
火箭队季后赛的对手已然确定。北京时间4月16号,孟菲斯灰熊队客场不敌勇士队。如此一来,灰熊队还得与独行侠以及国王队的胜者进
《刺客信条:奥德赛》v1.5.0十四项修改器[MrAntiFun][Epic]刺客信条手机版下载「《刺客信条:奥德赛》v1.5.0十四项修改器[MrAntiFun][Epic]」
《刺客信条:奥德赛》v1.5.0十四项修改器,包含无限肾上腺素,无限技能点,完美潜行等等功能助你轻松“暗杀”!让你在希腊尽情无