【算法】三维重建colmap工具的输出格式

前言

colmap是广泛使用的多视图重建工具,可以利用多个视角的图像估计相机内外惨同时重建三维点云,他的输出格式需要一些了解以便后续任务的使用。本文理解自官方文档,作为个人记录使用,同时希望可以帮助到其他人。

https://colmap.github.io/format.html

稀疏重建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点云文件

相关推荐
Jerry4 小时前
LeetCode 28. 找出字符串中第一个匹配项的下标
算法
Jerry5 小时前
LeetCode 459. 重复的子字符串
算法
海石8 小时前
1500分的题目,确实有实力,不过还是我略胜一筹
算法·leetcode
海石8 小时前
【记忆化搜索】条条大路通AC,走好适合你的那一条,走到后再考虑走得快
算法·leetcode
Jerry10 小时前
LeetCode 151. 反转字符串中的单词
算法
a11177613 小时前
LM 算法迭代过程动画演示(SLAM)
算法
头茬韭菜13 小时前
Context 的生死抉择:四层压缩、截断算法与 Session Memory
算法·ai
Jerry13 小时前
LeetCode 541. 反转字符串 II
算法
Jerry13 小时前
LeetCode 344. 反转字符串
算法
搞科研的小刘选手13 小时前
【香港大学主办&IEEE出版】第六届计算机视觉、应用与算法国际学术会议(CVAA 2026)
算法·计算机视觉·应用·学术会议