• 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

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

    1. # Camera list with one line of data per camera:
    2. # 一行一个相机参数列表
    3. # CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
    4. # 相机ID, 相机, 宽, 高, 参数[]
    5. # Number of cameras: 3
    6. 1 SIMPLE_PINHOLE 3072 2304 2559.81 1536 1152
    7. 2 PINHOLE 3072 2304 2560.56 2560.56 1536 1152
    8. 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

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

    1. # Image list with two lines of data per image:
    2. # 每张图像数据占两行
    3. # IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME
    4. # 图像ID, QW, QX, QY, QZ, TX, TY, TZ, 相机ID, NAME
    5. # POINTS2D[] as (X, Y, POINT3D_ID)
    6. # 2D点坐标和对应3D点ID, 若没有对应的3D点则ID标记为-1
    7. # Number of images: 2, mean observations per image: 2
    8. 1 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180141.JPG
    9. 2362.39 248.498 58396 1784.7 268.254 59027 1784.7 268.254 -1
    10. 2 0.851773 0.0165051 0.503764 -0.142941 -0.737434 1.02973 3.74354 1 P1180142.JPG
    11. 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点的信息,每个点占一行,例如:

    1. # 3D point list with one line of data per point:
    2. # 每个点占一行
    3. # POINT3D_ID, X, Y, Z, R, G, B, ERROR, TRACK[] as (IMAGE_ID, POINT2D_IDX)
    4. # POINT3D_ID:三维点的id (二维点可以根据此id找到图片对应的三维点) 
    5. # X, Y, Z:三维点坐标
    6. # R, G, B:三维点颜色信息
    7. # ERROR:投影误差(基于像素)
    8. # Number of points: 3, mean track length: 3.3334
    9. 63390 1.67241 0.292931 0.609726 115 121 122 1.33927 16 6542 15 7345 6 6714 14 7227
    10. 63376 2.01848 0.108877 -0.0260841 102 209 250 1.73449 16 6519 15 7322 14 7212 8 3991
    11. 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后更新。

    如下:

  • 相关阅读:
    CSS 字体:Font
    NodeMCU ESP8266 的PWM波形输出教程(图文并茂)
    springboot使用@Validated校验不生效
    ESKF及其推导
    Blazor前后端框架Known-V1.2.14
    Vue切换回页面可见状态后,避免执行多次滚动定位的动画
    【数据库系统概论】作业3 第三章 习题4|5|9
    基于FPGA的图像二值化处理,包括tb测试文件和MATLAB辅助验证
    C++类模板再学习
    prosody相关概念了解。xmpp,jabber,bosh等
  • 原文地址:https://blog.csdn.net/qq_43307074/article/details/127964162