已知相机内外参通过COLMAP进行稀疏/稠密模型重建操作过程

      在https://colmap.github.io/faq.html#reconstruct-sparse-dense-model-from-known-camera-poses  中介绍了已知相机内外参如何通过COLMAP进行稀疏和稠密模型重建的过程,这里按照说明操作一遍:

      在instant-ngp中,执行scripts/colmap2nerf.py时除了生成transforms.json外,还有一些中间文件生成,如colmap_text目录,此目录下有3个文件:
      (1).cameras.txt:相机内参
      (2).images.txt:相机外参
      (3).points3D.txt:3D点云数据
      这里以lego中train目录的数据作为测试集,执行命令如下:注:执行命令前移除train中的r_48.png和r_91.png两幅图像,因为在执行colmap2nerf.py时,此两幅图像并没有进入images.txt中

python ../../../scripts/colmap2nerf.py --colmap_matcher exhaustive --colmap_camera_model PINHOLE --run_colmap --images train --aabb_scale 4

      1.在instant-ngp/data/nerf/lego目录下新建目录reconstruct/created/sparse/model,将colmap_text目录下的3个文件拷贝到此目录下并做修改:模拟已知的相机内外参,实际中应为真实场景获取的数据

mkdir -p reconstruct/created/sparse/model
cp -a colmap_text/* reconstruct/created/sparse/model/

      (1).cameras.txt:不需要调整
      (2).images.txt:调整,每两行定义一幅图像的信息,删除第二行
      (3).points3D.txt:清空

      2.提features,执行如下命令:执行结果如下图所示,生成database.db

colmap feature_extractor --ImageReader.camera_model PINHOLE --database_path database.db --image_path ../train

      3.手动导入相机内参:将cameras.txt中的内参拷贝到database.db中. IMAGE_ID为对应图像在database management的顺序,CAMERA_ID为对应使用的相机,若只使用一台相机全为1.
      手动导入:
      (1).打开COLMAP GUI,双击COLMAP.bat;
      (2).File --> New project: 
            1).Database:Open,刚生成的database.db
            2).Images:Select, 选择存放图像集的目录,然后点击Save
      (3).Processing --> Database management:点击Cameras,对每个camera_id的params进行修改:修改为cameras.txt对应的,注意:两边的CAMERA_ID要一一对应,如下图所示:

      4.特征匹配,执行如下命令:结果如下图所示,database.db会被修改 

colmap exhaustive_matcher --database_path database.db

      5.点三角测量,执行如下命令:目录triangulated/sparse/model需要手动创建 

colmap point_triangulator --database_path database.db --image_path ../train --input_path created/sparse/model --output_path triangulated/sparse/model

      处理错误:reconstruction.cc:79 Check failed: existing_image.Name() == image.second.Name() (r_13.png vs. r_11.png)
      将database.db中Images中image_id, camera_id, name三者要与images.txt中的完全一一对应,database.db中Images内容如下图所示:按照此顺序,调整images.txt,注:只修改IMAGE_ID的值,不要忘记最后的空行

      修改后重新执行上述命令,结果如下图所示:triangulated/sparse/model目录下会生成cameras.bin, images.bin, points3D.bin, database.db也会被修改

      6.查看稀疏模型重建结果:打开COLMAP GUI
      (1).File --> Import Model: 选择triangulated/sparse/model目录
      (2)."Directory does not contain a project.ini" 点击:No: 查看重建结果,结果如下图所示:
      (3).导出model为txt:File --> Export model as text: 将结果保存在triangulated/sparse/model目录下:会生成project.ini, cameras.txt, images.txt, points3D.txt,可与created/sparse/model目录下的文件作对比,看两边camera_id, image_id是否一致,不一致会影响后续的执行 

      7.image undistorter,执行如下命令:结果如下图所示,dense/workspace目录需手动创建,dense/workspace目录下会生成images、sparse、stereo三个目录 

colmap image_undistorter --image_path ../train --input_path triangulated/sparse/model --output_path dense/workspace

 

      8.稠密3D重建,执行如下命令:结果如下图所示,注,此步需要CUDA支持,Anaconda安装时并没有指定,这里使用从官网下载的可执行文件,并且需要将lib目录下的动态库拷贝到colmap.exe目录下,否则会提示缺少各种动态库,此步比较耗时,在台式机上执行,在dense/workspace/stereo目录下,depth_maps和normal_maps目录内会增加类似r_0.png.geometric.bin,r_0.png.photometric.bin文件 

D:/soft/COLMAP/COLMAP-3.8-windows-cuda/bin/colmap.exe patch_match_stereo --workspace_path dense/workspace

      9.稠密点云融合,执行如下命令:结果如下图所示,在dense/workspace目录下会生成fused.ply文件 

colmap stereo_fusion --workspace_path dense/workspace --output_path dense/workspace/fused.ply

      10.查看稠密模型重建结果:打开COLMAP GUI
      (1).Reconstruction --> Dense reconstruction: 点击Select,选择dense/workspace目录
      (2).点击Fusion,稍等片刻,弹出对话框,为了可视化点云,点击Yes,结果如下图所示
      (3).关闭Dense reconstruction,可对可视结果进行缩小、放大、旋转等操作

猜你喜欢

转载自blog.csdn.net/fengbingchun/article/details/130667646
今日推荐