汉振3D开发SDK中,可以直接调用点云滤波接口,使用方法如下:
参数解释如下: buffer:存储点云基本数据,需要按照3通道float方式存储xyz数据 targetData:滤波后结果数据,按照3通道float方式存储xyz数据 1920:点云列数 1200:点云行数 0.5:质心平均距离,也可以理解为点云点间平均距离 30:云间距离阈值
四、代码加速
有了思路,实现了效果还不够,代码需要跑得快才能真的派上用处。对于点云滤波算法,可以有以下几种加速思路: 01 多线程并行 即代码中coreUtilsConcurrent部分。本算法中将点云按照行进行拆分,分发给4个线程单独处理。在4线程下可以提速2到3倍。这里要注意的一点是在现在基于CPU的运算中,线程并不是越多越好,需要根据算法实际调整。对于本算法,4线程左右为宜,即使CPU物理上有8线程甚至16线程。主要原因是本算法较为简单,内存瓶颈比CPU运算瓶颈更容易出现。线程多反而容易造成资源争夺,降低缓存命中率,进而导致性能下降。 02 邻域相关度计算剪枝 即代码循环体内最大代码量部分。算法中邻域搜索逻辑是会先从点云当前行开始,依次搜索-1行,+1行,-2行,+2行,-3行,+3行。结合物理世界中实际点云噪点分布情况,如果在当前行和-1行都没有搜索到符合条件的邻域有效点,那么在+1,-2行这些也大概率搜索不到邻域有效点,因此当前点基本就是无效点,就可以直接删除。按照此逻辑类推,分别设置1、3、5个邻域有效点的退出条件。通过此项剪枝后,可以提速2到4倍。 03 内存访问顺序优化 因为CPU有缓存秒钟问题,所以我们希望开发的程序尽可能提高缓存命中率,以提高运行速度。对点云数据的访问,在内存上尽量从左到右访问,从上到下访问。 04 代码减少判断条件 部分可以通过内联展开,代码结构完成的判断,可以直接通过写代码方式实现,而不是通过for,函数调用方式使用。 05 减少对象拷贝 尽量通过全局变量保存热点变量。例如点云数据指针,高宽等参数,会被频繁用到,可以保存到全局变量中让后续流程可以直接访问,而不是保存到中间变量反复拷贝,或者通过指针反复解指针使用。
进行了如上几点优化后,230W点云滤波,可以控制在5到15ms以内。
更多机器视觉产品信息与应用说明,机器视觉算法,应用技巧,解决方案以及相关领域的技术分享,欢迎继续关注“汉振智能”....
我们公司主营柔性振动盘、柔性供料器、非标自动化设备、柔性振动盘、柔性生产线、柔性自动上料系统、并联机器人摆盘机、视觉自动分拣设备、柔性上料工作站、视觉检测机等业务,厂家直营,支持定制,免费获取全套方案。
本文来源于互联网,我们本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供,并以尽力标明作者与出处,如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。