slambook2
slambook2 copied to clipboard
请教ch13(设计SLAM系统)中src/dataset.cpp中的代码含义
想要请教的代码片段如下:
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呢?
求这个数据集的具体链接
大佬这个问题解决了吗?最近刚入门,也在琢磨这个问题,我的困惑点和您一模一样
K = K * 0.5是因为输入图像缩放为原图的一半,所以内参也要缩放为原来的一半