点击上方“3D视觉工坊”,选择“星标”
干货第一时间送达
理解好图像的点云拼接,需要从相机的模型说起。理解相机的成像原理之后,便可更为深刻的理解图像的点云如何拼接在一起。
首先说下相机的概念与原理。
相机概念与原理
相机的作用:将三维世界中的坐标点(单位为米)映射到二维图像平面(单位为像素)。
通常我们见到的相机都是针孔相机,但是不是简单的 针孔,还有透镜的畸变存在,所以在做图像处理时要进行畸变校正。
由于畸变的存在,我们在使用相机之前都要进行相机标定。
目的就是求出内参对于简单的应用求出径向畸变和切向畸变就够了。
所谓的外参就是相机的位姿。
有了外参、内参、图像、深度信息 便可以把图像中的点,转到世界坐标系下,并带有RGB的颜色。就形成了所谓的点云。
相关的公式也很好理解 ,就是通过相似三角形的原理。
注意其中fx 、fy、 cx 、cy也就是相机的内参了。在相机出厂时会给出。
理解了相机的概念与原理,来编辑代码实现下。
Code实现
全部代码
先放上全部代码,再进行分段讲解
#include#includeusing namespace std; #include #include #include#include // for formating strings #include #include #include int main( int argc, char** argv ) { vectorcolorImgs,depthImgs;//彩色图和深度图 vectorposes;//相机位姿 ifstream fin("../pose.txt");//文件读入 相机位置 文件 if(!fin)//相机位姿读入失败 { cerr<<"请在有pose.txt的目录下运行此程序"<>d; Eigen::Quaterniond q( data[6], data[3], data[4], data[5] ); Eigen::Isometry3d T(q); T.pretranslate( Eigen::Vector3d( data[0], data[1], data[2] )); poses.push_back( T ); } //相机内参 double cx=325.5; double cy=253.5; double fx=518.0; double fy=519.0; double depthScale = 1000.0; cout<<"正在将图像转换为点云..."<关注打赏
立即登录/注册


微信扫码登录