colmap三维重建(更新中)——Ubuntu版本(colmap的编译)
m0_74310646 2024-08-20 09:37:01 阅读 78
一、colmap的编译(含报错处理)
1.1编译
一般使用官网的方法:
Installation — COLMAP 3.9-dev documentation
https://colmap.github.io/install.html需要先注意这些:不过有的电脑不用管这些也能编译出来,应该是已经装好或者设置好了,所以这里视自己电脑实际环境的情况而定
上面在 Ubuntu 22.04 下这些命令是安装并添加环境变量,可以先查看自己系统里面有没有gcc和g++,一般都是有的,如果电脑有这些,可以查看自己带的版本,然后修改上面的gcc-*和g++-*
<code>wheris gcc
whereis g++
然后,进入编译过程:
sudo apt-get install \
git \
cmake \
ninja-build \
build-essential \
libboost-program-options-dev \
libboost-filesystem-dev \
libboost-graph-dev \
libboost-system-dev \
libeigen3-dev \
libflann-dev \
libfreeimage-dev \
libmetis-dev \
libgoogle-glog-dev \
libgtest-dev \
libsqlite3-dev \
libglew-dev \
qtbase5-dev \
libqt5opengl5-dev \
libcgal-dev \
libceres-dev
git clone https://github.com/colmap/colmap.git
cd colmap
mkdir build
cd build
cmake .. -GNinja
ninja
sudo ninja install
1.2碰到的bug
(1)nvcc fatal:Unsupported gpu architectur "compute_native"
解决:github上有大神解决了,先检查显卡的计算能力,然后重新cmake,绿色框所示
nvcc fatal : Unsupported gpu architecture 'compute_native' · Issue #2464 · colmap/colmap · GitHubDescribe the bug The following commands succeed. git clone https://github.com/colmap/colmap.git cd colmap mkdir build cd build cmake .. -GNinja It fails at cmake .. -GNinja. The full printed infomation: [36/211] Building CUDA object src/...
https://github.com/colmap/colmap/issues/2464#top
(2)大片报错libfreeimage.so: undefined reference to TIFFFieldName@LIBTIFF_4.0。。。
解决:因为与anaconda3下面的QT5冲突了,修改cmakelist.txt,删除build,重新执行cmake即可
colmap安装 libfreeimage.so: undefined reference to TIFFFieldName@LIBTIFF_4.0_libfreeimage.so.3: undefined symbol: tifffielddata-CSDN博客
https://blog.csdn.net/u012796629/article/details/106230156?spm=1001.2014.3001.5506可以看到我的cmake文件执行时,确实用了anaconda3下面的QT5,并且有warning:
安装上面的链接修改cmakelist.txt,删除build,重新执行cmake,ninja,install,没有报错。
(3)小bug,vim冲突打不开
和这一篇完全相同:
Linux Vim提示:E325: ATTENTION 解决方案_linux e325-CSDN博客
https://blog.csdn.net/weixin_62892290/article/details/131660528?spm=1001.2014.3001.5506(4)collect2: fatal error: ld terminated with signal 9 [Killed]
解决:这是在虚拟机或者wsl中的Linux系统内编译colmap时报的错,主要是因为虚拟机的内存不够了,所以被kill,增大内存即可,参考
collect2: fatal error: ld terminated with signal 9 [Killed]-CSDN博客
https://blog.csdn.net/m0_47696151/article/details/132011222?spm=1001.2014.3001.5506
二、使用colmap在终端中进行三维重建
有点小遗憾,Ubuntu系统里用的数据集比较大,只跑出了稀疏重建的结果,稠密重建太吃算力了,才330张图,计算深度被kill了好几次,死机好几次,最后fuse的时候数据都加载不完就被kill,显卡是4080+16GB显存,计算开销实在是夸张!后面会具体提到这个问题
总体命令可以参考官网的example:
Command-line Interface — COLMAP 3.9-dev documentation
https://colmap.github.io/cli.html有不知道的命令可以colmap -h查看参数形式
<code># The project folder must contain a folder "images" with all the images.
$ DATASET_PATH=/path/to/dataset
$ colmap feature_extractor \
--database_path $DATASET_PATH/database.db \
--image_path $DATASET_PATH/images
$ colmap exhaustive_matcher \
--database_path $DATASET_PATH/database.db
$ mkdir $DATASET_PATH/sparse
$ colmap mapper \
--database_path $DATASET_PATH/database.db \
--image_path $DATASET_PATH/images \
--output_path $DATASET_PATH/sparse
$ mkdir $DATASET_PATH/dense
$ colmap image_undistorter \
--image_path $DATASET_PATH/images \
--input_path $DATASET_PATH/sparse/0 \
--output_path $DATASET_PATH/dense \
--output_type COLMAP \
--max_image_size 2000
$ colmap patch_match_stereo \
--workspace_path $DATASET_PATH/dense \
--workspace_format COLMAP \
--PatchMatchStereo.geom_consistency true
$ colmap stereo_fusion \
--workspace_path $DATASET_PATH/dense \
--workspace_format COLMAP \
--input_type geometric \
--output_path $DATASET_PATH/dense/fused.ply
$ colmap poisson_mesher \
--input_path $DATASET_PATH/dense/fused.ply \
--output_path $DATASET_PATH/dense/meshed-poisson.ply
$ colmap delaunay_mesher \
--input_path $DATASET_PATH/dense \
--output_path $DATASET_PATH/dense/meshed-delaunay.ply
下面开始具体实例
2.1特征提取
colmap feature_extractor --image_path input --database_path database.db --ImageReader.camera_model OPENCV --ImageReader.single_camera 0
可以看到这些参数,以及我自己的设定,主要是路径和相机模型那些东西
2.2特征匹配
<code>colmap exhaustive_matcher --database_path database.db
2.3稀疏重建
首先要先创建一个文件夹,一般命名为sparse,重建好会生成一个子文件夹0,在0下面是重建好的模型,包括三个文件:image.bin,camera.bin,point3D.bin
<code>mkdir sparse
colmap mapper --database_path database.db --image_path input --output_path sparse
转换格式为txt:
<code>colmap model_converter --input_path sparse/0 --output_path sparse/0 --output_type TXT
看看稀疏重建的效果:
2.4去畸变(开始稠密重建)
也要先创建一个文件夹,一般命名为dense
<code>mkdir dense
colmap image_undistorter --image_path input --input_path sparse/0 --output_path dense
2.5计算深度图
colmap patch_match_stereo --workspace_path dense --PatchMatchStereo.write_consistency_graph true
这里问题来了,因为内存或者显存等原因被kill:
查看了官网的FAQ,有一些设置可以避免计算深度的时候被kill:
就是说设置降低一下图片的分辨率,图像原本是5800*3958,我这里设置最大尺寸3600,才勉强跑完深度计算。下图为计算好的深度图
<code>colmap patch_match_stereo --workspace_path dense --PatchMatchStereo.write_consistency_graph true --PatchMatchStereo.max_image_size 3600
2.6fuse
又又又爆了,稠密重建太吃内存了!但是到了这一步稠密重建算是ok了,命令是没有问题的,问题在于机器本身。这里仅仅放上shell命令。事实上,稠密重建并不推荐传统的这些方法,深度学习已经做的很好了,刚好这里引入一下,后面即将更新3D Gaussian Splatting!!!
<code>colmap stereo_fusion --workspace_path dense --output_path dense/fused.ply --StereoFusion.max_image_size=3600
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。