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

相关推荐
疯狂的喵4 小时前
C++编译期多态实现
开发语言·c++·算法
scx201310044 小时前
20260129LCA总结
算法·深度优先·图论
2301_765703144 小时前
C++中的协程编程
开发语言·c++·算法
m0_748708054 小时前
实时数据压缩库
开发语言·c++·算法
小魏每天都学习5 小时前
【算法——c/c++]
c语言·c++·算法
智码未来学堂5 小时前
探秘 C 语言算法之枚举:解锁解题新思路
c语言·数据结构·算法
Halo_tjn5 小时前
基于封装的专项 知识点
java·前端·python·算法
杀生丸学AI5 小时前
【物理重建】PPISP :辐射场重建中光度变化的物理合理补偿与控制
人工智能·大模型·aigc·三维重建·世界模型·逆渲染
春日见6 小时前
如何避免代码冲突,拉取分支
linux·人工智能·算法·机器学习·自动驾驶
副露のmagic6 小时前
更弱智的算法学习 day59
算法