您当前的位置: 首页 > 

图像的点云拼接-原理讲解与代码实现

发布时间:2021-06-01 11:20:00 ,浏览量:1

点击上方“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<<"正在将图像转换为点云..."<            
关注
打赏
1688896170
查看更多评论

暂无认证

  • 1浏览

    0关注

    105932博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0522s