slambook2 icon indicating copy to clipboard operation
slambook2 copied to clipboard

请教ch13(设计SLAM系统)中src/dataset.cpp中的代码含义

Open LiKangyuLKY opened this issue 3 years ago • 3 comments

想要请教的代码片段如下:

for (int i = 0; i < 4; ++i) {
        char camera_name[3];
        for (int k = 0; k < 3; ++k) {
            fin >> camera_name[k];
        }
        double projection_data[12];
        for (int k = 0; k < 12; ++k) {
            fin >> projection_data[k];
        }
        Mat33 K;
        K << projection_data[0], projection_data[1], projection_data[2],
            projection_data[4], projection_data[5], projection_data[6],
            projection_data[8], projection_data[9], projection_data[10];
        Vec3 t;
        t << projection_data[3], projection_data[7], projection_data[11];
        t = K.inverse() * t;
        K = K * 0.5;
        Camera::Ptr new_camera(new Camera(K(0, 0), K(1, 1), K(0, 2), K(1, 2),
                                          t.norm(), SE3(SO3(), t)));
        cameras_.push_back(new_camera);
        LOG(INFO) << "Camera " << i << " extrinsics: " << t.transpose();
    }

这一部分代码从KITTI数据集的calib.txt中读取相机的配置参数,定义了投影矩阵projection_data[12]来读取。 请问这里记录的投影矩阵和相机的内外参之间有什么关系呢,为什么要用下面这两行代码来计算t和K?

t = K.inverse() * t;
K = K * 0.5;

最后在LOG里记录的INFO应该是相机的外参吧,怎么是用t的转置?用的为啥不是R | t呢?

LiKangyuLKY avatar Dec 15 '21 14:12 LiKangyuLKY

求这个数据集的具体链接

warden2018 avatar Dec 24 '21 03:12 warden2018

大佬这个问题解决了吗?最近刚入门,也在琢磨这个问题,我的困惑点和您一模一样

MarkShawn2020 avatar Jun 19 '22 05:06 MarkShawn2020

K = K * 0.5是因为输入图像缩放为原图的一半,所以内参也要缩放为原来的一半

CnybTseng avatar Jun 24 '22 09:06 CnybTseng