首先根据重建结果的文件夹导出相机模型:
colmap model_converter --input_path {work_dir} --output_path {work_dir} --output_type TXT
这样在output_path中可以得到cameras.txt和images.txt。后者images.txt里包含了相机外参,注释写的很清楚,包含了外参中的旋转矩阵R代表的四元数和平移向量T的三个分量
# Image list with two lines of data per image:
# IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME
# POINTS2D[] as (X, Y, POINT3D_ID)
# Number of images: 13, mean observations per image: 146.76923076923077
13 0.731322 0.413487 -0.490561 0.231402 6.34071e+06 470334 -397028 1 fc8a9e63e34b2e91850b1437c14abd74157123.jpg......
我们重点来看cameras.txt里的相机内参
# Camera list with one line of data per camera:
# CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
# Number of cameras: 1
1 OPENCV 1280 720 1249.43 519.15 640 360 0.0639308 -0.127667 -0.212406 -0.073309
这里很好理解的是前面几个参数"1 OPENCV 1280 720 "分别代表了 CAMERA_ID, MODEL, WIDTH, HEIGHT
后面的参数"1249.43 519.15 640 360"分别代表了内参矩阵中的fx,fy,cx,cy
然而再后面的四个数字"0.0639308 -0.127667 -0.212406 -0.073309"代表什么含义呢?
我们通过colmap官方文档对相机模型的定义
Camera Models — COLMAP 3.9-dev documentation
找到头文件,根据下面的源码地址可以看出实际上这四个数字对应了k1, k2, p1, p2
当然也可以看OPENCV官方文档对相机参数的定义和详解
Camera Calibration and 3D Reconstruction — opencv v2.1 documentation