【colmap】已知相机位姿情况下进行三维重建

如果在已知相机位姿情况进行场景的稀疏/稠密重建,需要手动创建稀疏模型。即在一个新文件夹中创建cameras.txt, points3D.txtimages.txt

COLMAP已知相机位姿情况进行场景的稀疏/稠密重建

+── path/to/manually/created/sparse/model
│   +── cameras.txt
│   +── images.txt
│   +── points3D.txt

其中 points3D.txt 文件应该为空,images.txt 文件中每隔一行为空,用于后续存放提取的特征点。有关稀疏模型结构的更多信息,可以参考这篇文章

images.txt 文件示例

1 0.695104 0.718385 -0.024566 0.012285 -0.046895 0.005253 -0.199664 1 image0001.png
# Make sure every other line is left empty
2 0.696445 0.717090 -0.023185 0.014441 -0.041213 0.001928 -0.134851 2 image0002.png

3 0.697457 0.715925 -0.025383 0.018967 -0.054056 0.008579 -0.378221 1 image0003.png

4 0.698777 0.714625 -0.023996 0.021129 -0.048184 0.004529 -0.313427 2 image0004.png

上述每幅图像必须具有和数据库中相同的image_id (每一行的第一列),数据库的数据可以通过GUI查看Database management > Processing或者将重建的模型导出为文本格式进行查看。

为了进行稀疏模型重建,需要对已知相机参数的图像重新进行特征点计算:

colmap feature_extractor \
    --database_path $PROJECT_PATH/database.db \
    --image_path $PROJECT_PATH/images

如果相机内参存在较大的畸变系数,那么应该将cameras.txt中的参数复制到数据库中(用已知的相机内参替换colmap默认赋予的内参, feature_extractor会为每幅图分配相机内参)。这样的话,后续的特征点匹配可以利用提供的相机内参。如何修改数据库中的参数,最简单的方法是利用scripts/python/database.py脚本文件。

colmap exhaustive_matcher \ # or alternatively any other matcher
    --database_path $PROJECT_PATH/database.db

colmap point_triangulator \
    --database_path $PROJECT_PATH/database.db \
    --image_path $PROJECT_PATH/images
    --input_path path/to/manually/created/sparse/model \
    --output_path path/to/triangulated/sparse/model

值得注意的是,如果最终为了得到场景的稠密三维点云模型,那么稀疏重建并不是必须的。如果已经基于已知相机参数计算得到了稀疏模型,可通过如下步骤进行稠密重建:

colmap image_undistorter \
    --image_path $PROJECT_PATH/images \
    --input_path path/to/triangulated/sparse/model \
    --output_path path/to/dense/workspace

colmap patch_match_stereo \
    --workspace_path path/to/dense/workspace

colmap stereo_fusion \
    --workspace_path path/to/dense/workspace \
    --output_path path/to/dense/workspace/fused.ply

COLMAP稀疏重建文本格式

colmap为每个重建的模型导出三个文件:cameras.txt, images.txtpoints3D.txt

cameras.txt
  每一行:相机ID,相机模型,宽,高和相机参数

images.txt
  第一行:相机外参及对应的相机ID和filename(四元数表示旋转+平移向量)
  第二行:图像中提取的keypoints (SIFT特征点是亚像素级别的精度)

points3D.txt
  记录重建的3D点

参考

posted @ 2022-07-12 14:52  达可奈特  阅读(4641)  评论(0编辑  收藏  举报