COLMAP输出的文件类型(bin, txt)

默认情况下,COLMAP使用二进制文件格式(bin,机器可读,速度速)来存储稀疏模型。此外,COLMAP也可以将稀疏模型存储为文本文件(txt,人类可读,速度慢)。在这两种情况下,模型导出的信息被分为关于相机、图像和点云的三个文件。任何包含这三个文件的目录都构成了一个稀疏模型。二进制文件的扩展名是.bin,文本文件的扩展名是.txt。注意,当从包含二进制文件和文本文件的目录加载模型时,COLMAP更倾向于二进制格式。

参考网页:https://colmap.github.io/format.html

导出bin文件

要在GUI(可视化界面)中导出当前的模型,选择File > Export model,要导出当前数据集中的所有重建模型,选择File > Export all models,为bin文件。要想导入已经导出的模型,例如,为了可视化或恢复重建,选择File > Import model,并选择包含相机、图像和点云文件的文件夹。

此外,还可以将稀疏模型导出为其他格式,例如VisualSfM的NVM、Bundler文件、PLY、VRML等,使用File > Export model as....

导出txt文件

要在GUI导出文本格式,使用File > Export model as text导出模型。三个文本文件:camera .txt、images.txt和points3D.txt。注释以前导“#”字符开始。第一行注释简要描述了文本文件的格式。

cameras.txt

这个文件包含了数据集中所有重建相机的内参,每个相机占一行,例如:

# Camera list with one line of data per camera:
# 一行一个相机参数列表
#   CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
#   相机ID, 相机, 宽, 高, 参数[]
# 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

上述数据中,数据集包含 3 个相机,这些相机使用具有相同传感器尺寸(宽度:3072,高度:2304)的不同失真模型。 参数的长度是可变的,取决于相机型号。 对于第一个相机,有 3 个参数,单个焦距为2559.81像素,主点(即 cx,cy)位于像素位置(1536、1152)。相机的内参可以被多个图像共享,这些图像使用唯一标识符 CAMERA_ID 来指代相机。

如下:

images.txt

该文件包含数据集中所有重建图像的位姿和关键点,每个图像占两行,例如:

# Image list with two lines of data per image:
# 每张图像数据占两行
#   IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME
#   图像ID, QW, QX, QY, QZ, TX, TY, TZ, 相机ID, NAME
#   POINTS2D[] as (X, Y, POINT3D_ID)
#   2D点坐标和对应3D点ID, 若没有对应的3D点则ID标记为-1
# 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

这里,前两行定义了第一张图片的信息,以此类推。使用四元数 (QW, QX, QY, QZ) 和平移向量 (TX, TY, TZ) 将图像的重建位姿指定为从世界到图像的相机坐标系的投影。四元数是使用 Hamilton 约定定义的,例如,Eigen 库也使用该约定。投影/相机中心的坐标由 -R^t * T 给出,其中 R^t 是由四元数组成的 3x3 旋转矩阵的逆/转置,T 是平移向量。从图像上看,图像的局部相机坐标系定义为 X 轴指向右侧,Y 轴指向底部,Z 轴指向前方。

上面示例中的两个图像都使用相同的相机模型并共享内参 (CAMERA_ID = 1)。映像名称与项目的选定基础映像文件夹相关。第一个图像有 3 个关键点,第二个图像有 2 个关键点,而关键点的位置由像素坐标指定。两幅图像都观察到 2 个 3D 点,并注意第一张图像的最后一个关键点在重建中没有观察到 3D 点,因此 3D 点标识符为 -1。

如下:

发现导出的 txt 和示例不一样,找不到第二张图片的信息,苦恼很久,才醒悟是关键点信息太多了,解决办法如下:

COLMAP导出相机外参(bin文件转txt文件)

points3D.txt

该文件包含数据集中所有重建的3D点的信息,每个点占一行,例如:

#   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)
#   POINT3D_ID:三维点的id (二维点可以根据此id找到图片对应的三维点) 
#   X, Y, Z:三维点坐标
#   R, G, B:三维点颜色信息
#   ERROR:投影误差(基于像素)
# 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

这里有三个重建的 3D 点,其中TRACK[] as (IMAGE_ID, POINT2D_IDX):对应images.txt里的图像id,POINT2D_IDX 定义了 images.txt 文件中关键点的从零开始的索引。比如说上面:16 6542,意思是images.txt中图片ID为16的里面的第6542个点,这个点是该图的特征点,也映射到这个三维点。误差以重投影误差的像素为单位,仅在全局BA后更新。

如下:

  • 15
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
Colmap是一个用于稀疏三维重建的开源软件,它能够从多张图片中恢复相机的位姿。Colmap输出结果主要包括相机的内外参数以及图像的稀疏三维点云。 Colmap通过对每张图像进行特征提取和匹配,来估计相机的位姿。在特征提取阶段,Colmap会检测图像中的特征点,并计算每个特征点的描述子。在特征匹配阶段,Colmap将对每对图像之间的特征点进行匹配,从而找到它们之间的对应关系。 当Colmap完成特征提取和匹配后,它会使用RANSAC算法估计相机的初始位姿。RANSAC算法通过随机选择一些特征点组成假设模型,然后利用这些假设模型计算出位姿,并计算模型与实际数据之间的误差。通过重复这个过程来选取拟合误差最小的模型,并使用这个模型作为初始位姿。 Colmap输出的位姿主要包括相机的外部参数,即相机的旋转矩阵和平移向量。旋转矩阵描述了相机坐标系相对于世界坐标系的旋转关系,平移向量描述了相机坐标系相对于世界坐标系的平移关系。 除了相机的外部参数,Colmap还可以输出相机的内部参数,即相机的焦距、主点坐标和畸变系数。内部参数描述了相机的成像特性,例如焦距决定了相机的视场大小,主点坐标决定了图像坐标原点的位置,畸变系数则描述了相机透镜的形状。 最后,Colmap还可以输出图像的稀疏三维点云。这些点云是通过对每个图像的特征点进行三角化计算得到的,每个点的坐标代表了在世界坐标系中的位置。 综上所述,Colmap输出的位姿包括相机的内外参数以及图像的稀疏三维点云,这些信息可以用于进一步的三维重建和视觉定位任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华科附小第一名

您的支持对我的前行很重要!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值