我想学习点云融合,点云拼接,网格化算法,并且用到C++的pcl库,我应该从哪里开始学起?
11 个回答
PCL能用来做什么?
再使用之前,可以看看 Tutorials , 了解到PCL最主要的应用模块,如滤波,特征提取,点云配准,kd/八叉树数据结构,分割和重建,识别等
怎么上手:
有一定的理论基础以后,可以上手了,在编译的时候,可以采用all in one 版本,内含编译好的第三方库。像exe一样安装就可以,有许多教程讲到如何安装。自行搜索
这些第三方库里:
- boost :C++的标准库的备用版
- Eigen: 用来做矩阵运算,功能强大、高速、优雅
- FlANN: Kd树,邻近点搜索
- VTK: 做可视化用
- Qhull: 凸包求取,网格计算时候有用到
此外还有搭载了并行优化的PCL库,需要自行编译。如果不采用all in one自行编译的话,cmake时候只要注意上述库的路径,编译就不难。
当你都能上手的时候,可以结合自己的关注点,跑跑Tutorials里的demo,demo里一般包含代码注释,程序结果,算法原理介绍,这样你就基本可以用起来pcl了。
必备理论知识:
- 相机模型,坐标系转换
- 数据结构:如kd 树,八叉树,半边结构
- C++ 标准算法库:PCL很多都用到了C++ stl里的容器
怎么做:
点云拼接 : 一般利用openCV+ PCL 完成了从图像序列拼接生成场景点云。主要涉及到对相机模型,坐标系转换等理论知识。
点云融合: 一般发生在点云注册配准后,存在重叠区域,进行融合
网格化: 点云由于只包含坐标,强度,颜色信息。而网格则需要建立点、边、面的拓扑,也就是surface reconstruction ,存在诸多算法。出发原理各不相同,PCL 封装了一部分,效果因数据而异。目前常用的有Poisson reconstruction 和 greedy surface reconstruction
可视化: 自带的VTK只有可视化,没有界面及交互,必要时,还需要搭载QT做基本的交互可视化。
参考资料:
- 《点云库PCL从入门到精通》 纯粹是对文档的翻译,建议看原文档
- 《高翔SLAM14讲》虽然侧重SLAM, 但有些计算机视觉的基础知识介绍
以上。