ICP+点云拼接实践

  • Post author:
  • Post category:其他


写程序时觉得自己的逻辑和思路比较混乱,而且仅仅是在写比较小的程序、无需构架方面的考虑时。比如,试图修改14讲的ICP算法,使之结合拼接点云实验时,需要将前面匹配的keypoints坐标、颜色、深度保存,并在拼接点云时作为参数传入,半天不知道该在哪里加,总感觉原本的写法用起来不太会。遂从提取特征点开始,重写之。

第一步,先搞清楚每个部分如何实现吧,十分具体的框图如下

这里写图片描述

接下来,要往里面添加存储颜色、坐标的代码。匹配点最后筛选时入栈了,那对于之前检测到的特征点,检测时我们也一起提取出颜色、坐标、深度,在符合要求匹配点入栈时,一起使之入栈,是否可行?

在点云拼接实验中

colorImgs, depthImgs的类型是vector

vector<cv::Mat> colorImgs, depthImgs;
colorImgs.push_back(cv::imread(picture[i].str()));
depthImgs.push_back(cv::imread(picture[i].str(),-1));//使用-1读取原始图像?啥意思
cv::Mat color = colorImgs[i];
cv::Mat depth = depthImgs[i];

新建点云

typedef pcl::PointXYZRGB PointT;    //定义点云的格式,用XYZRGB,都有哪些方法?
typedef pcl::PointCloud<PointT> PointCloud; //用来存放点云
//新建一个点云
PointCloud::Ptr pointCloud(new PointCloud);
PointT p;
//已知世界坐标pointWorld(pw),类型是Vector3d
p.x=pw[0];
p.y=pw[1];
p.z=pw[2];
p.b=color.data[color.step+color.channels()];
p.g=color.data[color.step+color.channels()+1];
p.r=color.data[color.step+color.channels()+2];
pointCloud->points.push_back(p);

另一个sfm实验中,colors_for_all类型是vector



版权声明:本文为sinat_28752257原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。