一、前言
本文内容源自高翔博士新书《视觉SLAM十四讲》第5章相机与图像的实践环节。如果对SLAM感兴趣,强烈建议入手这本书。读这本书要比看网上这些胡乱拼凑的博客(包括本文)好得多。
二、什么是点云?
顾名思义,点云就是一大堆点放在一起,就像一朵云彩一样。所以说点云拼接是个挺有艺术感的事儿。
譬如说,我拿着RGB-D相机拍了一组照片。与普通相机不同的是,这些照片中的每个像素既有颜色又有深度。这深度值的作用可是非同小可,我们可以根据每个照片的拍摄角度和拍摄位置把这些照片组合起来,形成三维的立体图案。以下图所示的五张图片为例,它们是分别从不同角度拍摄的同一个房间。
Paste_Image.png
接下来,通过点云拼接,我们就可以还原这个房间的三维场景。
三、预备工具
Linux操作系统
Eigen3.2.1,boost1.59.0,pcl1.7.2等开源库
四、开始写代码
Step1:读取RGB图片和深度图片,以及相机位姿数据。
在本例程中,相机位姿数据是已知的,保存在“pose.txt”文件中。不过对于实际的SLAM,相机位姿数据是通过前端视觉里程计,并通过后端优化才得出的。由于本文只关注点云拼接,因此直接使用相机位姿就可以了,而不必关心它是从何而来的。
int main( int argc, char** argv )
{
//Step 1
vector<:mat> colorImgs, depthImgs;