Advertisement

Colmap根据相机内外参数重建稀疏模型

阅读量:

该摘要总结了使用COLMAP进行稀疏模型重建的完整流程,包括创建工作文件夹、运行特征提取器、导入相机内参、特征匹配、三角测量以及Bundle adjustment的运行。具体步骤如下:
创建稀疏模型工作文件夹:创建cameras.txt、images.txt和points3D.txt文件,分别存储相机参数、外参信息和初始点云数据。
运行特征提取器:使用colmap feature_extractor提取图像特征点,并自动生成database.db文件。
导入相机内参:通过COLMAP GUI导入相机内参,确保所有图像使用相同的参数进行处理。
特征匹配:使用colmap exhaustive_matcher进行特征匹配,生成匹配结果。
三角测量:运行colmap point_triangulator进行三角测量,生成triangulated/sparse文件夹中的点云数据。
Bundle adjustment:通过运行COLMAP GUI导入triangulated/sparse文件夹中的模型,检查重建效果是否收敛。如果收敛则成功,否则可能需要进一步检查和调整参数。

Colmap基于相机内外参数构建稀疏[模型],并指向该链接]()。

    1. 建立稀疏模型工作文件夹
      1. 通过命令行工具进行稀疏重建
    • 2.1 提取图像的关键特征点
      • 2.2 手动导入相机内参信息
      • 2.3 进行特征匹配计算
      • 2.4 完成三角测量计算

官方文档:https://colmap.github.io/faq.html#reconstruct-sparse-dense-model-from-known-camera-poses
参考博客:http://www.mamicode.com/info-detail-2838274.html

1.创建稀疏模型工作文件夹

已知相机的姿态信息,手动生成文件cameras.txtpoints3D.txt以及images.txt,并记录其文件路径信息:

复制代码
    +── .../created/sparse
    │   +── cameras.txt
    │   +── images.txt
    │   +── points3D.txt

其中相机内参被存储于cameras.txt中,相机的外参数(外参)被存储于images.txt中,points3D.txt则为空文件。

复制代码
    # Camera list with one line of data per camera:
    # CAMERA_ID, MODEL, WIDTH, HEIGHT, PARAMS[]
    # Number of cameras: 1
    1 OPENCV 1280 720 913.603 915.366 651.568 366.541 0.0961 -0.1858 0 0

仅配置一台相机,若有多台相机,可在下一行逐一填写各相机的参数设置。基于OpenCV的相机模型。

复制代码
    # 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.477458 0.543198 -0.521067 0.453276 0.0447519 0.146365 -0.115584 1 image0001.jpg
    # Make sure every other line is left empty      
    2 0.477646 0.543413 -0.520842 0.453078 0.0401251 0.155332 -0.182149 1 image0002.jpg
         
    3 0.477833 0.543629 -0.520617 0.452881 0.0353862 0.1643 -0.24872 1 image0003.jpg
         
    4 0.478038 0.543864 -0.520372 0.452665 0.0247215 0.202905 -0.535662 1 image0004.jpg

数据的排列顺序即为IMAGE_ID, QW, QX, QY, QZ, TX, TY, TZ, CAMERA_ID, NAME依次排列。其中,IMAGE_ID表示在database management系统中的图片顺序编号,QW、QX、QY、QZ代表相机的旋转四元数,而TX、TY、TZ代表相机的平移向量。 CAMERA_ID表示使用的相机内参信息,若仅使用一台相机则所有CAMERA_ID值设为1。NMAE字段存储了图片的名称信息。由于当前数据中没有二维信息,因此每行数据结束后需要留空一行。为了整合外参信息,可以将分散的txt文件按照格式对应关系整合到Excel表格中,确保每列数据对应正确的外参信息。参考这篇博客可以获取更详细的指导。使用终端执行相关操作时,请确保路径正确。参考本次测试的路径设置:

复制代码
    /home/yzh/datatest
    ├── created
    │   └── sparse
    │       ├── cameras.txt
    │       ├── images.txt
    │       └── points3D.txt
    ├── dense
    ├── images
    │   ├── image0001.jpg
    │   ├── image0002.jpg
    │   ├── ...
    └── triangulated
    └── sparse

images/文件夹下存放图片,其他文件夹为后面操作做准备。

2.命令行执行稀疏重建

2.1提取图像特征点

在datatest目录下打开终端执行命令:

复制代码
    colmap feature_extractor --database_path database.db --image_path images

会自动生成database.db文件,输出示例:

复制代码
    ==============================================================================
    Feature extraction
    ==============================================================================
    Processed file [1/354]
      Name:            image0001.jpg
      SKIP: Features for image already extracted.
    Processed file [2/354]
      Name:            image0002.jpg
      SKIP: Features for image already extracted.
    Processed file [3/354]
      Name:            image0003.jpg
      ...
    Processed file [354/354]
      Name:            image0354.jpg
      SKIP: Features for image already extracted.
    Elapsed time: 0.006 [minutes]

2.2手动导入相机内参

在终端运行colmap gui后,依次设置File->New Project->Database->Open以打开新创建的database.db文件,并指定图片存放路径。完成设置后,进入Processing->Database management界面,配置相机内参参数,并确保所有图片都应用该参数设置。

2.3特征匹配

ProjectPath 目录上运行终端命令:

复制代码
    colmap exhaustive_matcher --database_path database.db

输出示例:

复制代码
    ==============================================================================
    Exhaustive feature matching
    ==============================================================================
    
    Matching block [1/8, 1/8] in 0.070s
    Matching block [1/8, 2/8] in 0.094s
    ...

2.4三角测量

继续在终端上执行:

复制代码
    colmap point_triangulator --database_path database.db --image_path images --input_path created/sparse --output_path triangulated/sparse

输入如下:

复制代码
    ==============================================================================
    Loading database
    ==============================================================================
    
    Loading cameras... 354 in 0.000s
    Loading matches... 5904 in 0.012s
    Loading images... 354 in 0.012s (connected 347)
    Building correspondence graph... in 0.051s (ignored 0)
    
    Elapsed time: 0.001 [minutes]
    ==============================================================================
    Triangulating image #1
    ==============================================================================
    
      => Image has 0 / 2221 points
      => Triangulated 499 points
    ...
    ==============================================================================
    Bundle adjustment
    ==============================================================================
    
    iter      cost      cost_change  |gradient|   |step|    tr_ratio  tr_radius  ls_iter  iter_time  total_time
       0  6.639401e+06    0.00e+00    2.47e+06   0.00e+00   0.00e+00  1.00e+04        0    5.93e-02    1.94e-01
       1  7.112741e+16   -7.11e+16    0.00e+00   1.04e+03  -3.41e+10  5.00e+03        0    3.50e-02    2.29e-01
       2  1.068943e+10   -1.07e+10    0.00e+00   9.39e+02  -5.14e+03  1.25e+03        0    1.97e-02    2.49e-01
       3  1.513723e+10   -1.51e+10    0.00e+00   6.78e+02  -7.42e+03  1.56e+02        0    2.63e-02    2.75e-01
    ...
    
    Bundle adjustment report
    ------------------------
    Residuals : 90434
       Parameters : 38499
       Iterations : 3
         Time : 0.136264 [s]
     Initial cost : 1.02783 [px]
       Final cost : 1.02605 [px]
      Termination : Convergence
    
      => Merged observations: 48
      => Completed observations: 49
      => Filtered observations: 24
      => Changed observations: 0.002676
    
    ==============================================================================
    Extracting colors
    ==============================================================================

关于Bundle adjustment的收敛性问题,若不收敛,必然导致失败;即使收敛,也不一定达到预期效果。我们可以使用COLMAP的图形用户界面程序,执行File->Import model,导入生成的稀疏重建模型,观察其重建效果。例如,通过导入上述方法生成的模型,可以直观评估重建质量。

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~