【算法】三维重建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点云文件

相关推荐
ANYOLY5 小时前
Sentinel 限流算法详解
算法·sentinel
No0d1es5 小时前
电子学会青少年软件编程(C/C++)六级等级考试真题试卷(2025年9月)
c语言·c++·算法·青少年编程·图形化编程·六级
AndrewHZ6 小时前
【图像处理基石】图像去雾算法入门(2025年版)
图像处理·人工智能·python·算法·transformer·cv·图像去雾
Knox_Lai6 小时前
数据结构与算法学习(0)-常见数据结构和算法
c语言·数据结构·学习·算法
橘颂TA6 小时前
【剑斩OFFER】算法的暴力美学——矩阵区域和
算法·c/c++·结构与算法
不会c嘎嘎6 小时前
每日一练 -- day1
c++·算法
hansang_IR7 小时前
【记录】网络流最小割建模三题
c++·算法·网络流·最小割
xwill*7 小时前
Helix: A Vision-Language-Action Model for Generalist Humanoid Control
人工智能·算法
blammmp7 小时前
算法专题二十:贪心算法
数据结构·算法·贪心算法
小白程序员成长日记7 小时前
2025.11.17 力扣每日一题
数据结构·算法·leetcode