前言
colmap是广泛使用的多视图重建工具,可以利用多个视角的图像估计相机内外惨同时重建三维点云,他的输出格式需要一些了解以便后续任务的使用。本文理解自官方文档,作为个人记录使用,同时希望可以帮助到其他人。
稀疏重建Sparse Reconstruction
cameras.txt
相机ID、模型(Model)、宽、高、其他参数(主点焦距)。
其中
- SIMPLE_PINHOLE, PINHOLE:针孔相机模型,适用于无畸变的图像,SIMPLE使用一个焦距参数即f,PINHOLE使用两个焦距参数fx和fy,也可以使用更加复杂的相机模型来改进内参
- SIMPLE_RADIAL, RADIAL :如果内参未知、每张图像都具有不同的标定参数(互联网中的图片),SIMPLE用了一个畸变参数,RADIAL用了两个畸变参数,这两个模型都是OPENCV模型的简化模型
- OPENCV, FULL_OPENCV :在你知道先验的相机内参的时候,使用这两个相机模型。你可以选择让COLMAP自己估计内参, 也可以将自己知道的内参告诉COLMAP(COLMAP只能共享一套内参,不能指定多个相机模型),让COLMAP去估计外参。如果每张图片有不同的内参的话,自动重建可能会失败。
- SIMPLE_RADIAL_FISHEYE , RADIAL_FISHEYE , OPENCV_FISHEYE , FOV , THIN_PRISM_FISHEYE :当你的相机模型是鱼眼模型的时候使用这几种相机模型(其他上述的模型都无法真正模拟鱼眼镜头的失真效果),Google Project Tango使用FOV模型,确保不将omega初始化为0
bash
# Camera list with one line of data per camera:
# CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
# Number of cameras: 3
1 SIMPLE_PINHOLE 3072 2304 2559.81 1536 1152
2 PINHOLE 3072 2304 2560.56 2560.56 1536 1152
3 SIMPLE_RADIAL 3072 2304 2559.69 1536 1152 -0.0218531
如果后续任务是3dgs、4dgs渲染,那一般外部去畸变后采用针孔相机模型来处理。
images.txt
世界到相机坐标系
bash
# 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: 2, mean observations per image: 2
1 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180141.JPG
2362.39 248.498 58396 1784.7 268.254 59027 1784.7 268.254 -1
2 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180142.JPG
1190.83 663.957 23056 1258.77 640.354 59070
- 第一行 : quaternion 四元数 QW, QX, QY, QZ + translation vector 平移向量TX, TY, TZ +相机ID + 图像名称
- 第二行: 2D点对应3D点ID
points3D.txt
3D点ID(images.txt)+ 3D点的X, Y, Z, R, G, B + 重投影误差(全局BA后) + 图像ID(images.txt) + 2D点ID(images.txt中点的索引)
bash
# 3D point list with one line of data per point:
# POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)
# Number of points: 3, mean track length: 3.3334
63390 1.67241 0.292931 0.609726 115 121 122 1.33927 16 6542 15 7345 6 6714 14 7227
63376 2.01848 0.108877 -0.0260841 102 209 250 1.73449 16 6519 15 7322 14 7212 8 3991
63371 1.71102 0.28566 0.53475 245 251 249 0.612829 118 4140 117 4473
密集重建 Dense Reconstruction
文件夹结构
bash
+── images
│ +── image1.jpg
│ +── image2.jpg
│ +── ...
+── sparse
│ +── cameras.txt
│ +── images.txt
│ +── points3D.txt
+── stereo
│ +── consistency_graphs
│ │ +── image1.jpg.photometric.bin
│ │ +── image2.jpg.photometric.bin
│ │ +── ...
│ +── depth_maps
│ │ +── image1.jpg.photometric.bin
│ │ +── image2.jpg.photometric.bin
│ │ +── ...
│ +── normal_maps
│ │ +── image1.jpg.photometric.bin
│ │ +── image2.jpg.photometric.bin
│ │ +── ...
│ +── patch-match.cfg
│ +── fusion.cfg
+── fused.ply
+── meshed-poisson.ply
+── meshed-delaunay.ply
+── run-colmap-geometric.sh
+── run-colmap-photometric.sh
其中
- images文件夹包含未失真的图像
- sparse文件夹包含使用未失真相机的稀疏重建
- stereo文件夹包含立体重建结果
- point-cloud.ply和mesh.ply是融合和网格划分过程的结果
Depth and Normal Maps 深度图和法线图
格式 with&height&channels& followed by row-major float32 binary data. For depth maps channels=1 and for normal maps channels=3
Consistency Graphs 一致性图
一致性图定义了图像中所有像素与其一致的源图像。该图存储为混合文本和二进制文件,其中文本部分相当于深度图和法线图,二进制部分是int32 格式为 的连续值 列表<image_idx1>...<image_idxN>。
总结
由于我的后续任务是3dgs,所以我只关注稀疏重建的内外参+密集重建的ply点云文件