三维重建_COLMAP安装、使用和参数说明(翻译自官方文档)

原文:https://blog.csdn.net/X_kh_2001/article/details/82591978

近期因为想要入选学校某位很厉害的老师的某个项目,布置的小任务就是先把colmap以及openMVS跑一跑。我就记录了一下学习的经过。

 

一、Ubuntu上源码编译colmap:
       参考网址:https://colmap.github.io/install.html

      

1、获取源码:

             

git clone https://github.com/colmap/colmap
2、安装依赖项:
             

     sudo apt-get install \
 
                         git \
 
                         cmake \
 
                         build-essential \
 
                         libboost-program-options-dev \
 
                         libboost-filesystem-dev \
 
                         libboost-graph-dev \
 
                         libboost-regex-dev \
 
                         libboost-system-dev \
 
                         libboost-test-dev \
 
                         libeigen3-dev \
 
                         libsuitesparse-dev \
 
                         libfreeimage-dev \
 
                         libgoogle-glog-dev \
 
                         libgflags-dev \
 
                         libglew-dev \
 
                         qtbase5-dev \
 
                         libqt5opengl5-dev \
 
                         libcgal-dev
                  

                   PS:在Ubuntu16.04下,CGAL的cmake配置是损坏的,必须安装CGAL的qt5包:

                           

 sudo apt-get install libcgal-qt5-dev
 

       3、编译安装Ceres-Solver:             

         sudo apt-get install libatlas-base-dev libsuitesparse-dev
 
              git clone https://ceres-solver.googlesource.com/ceres-solver
 
              cd ceres-solver
 
              git checkout $(git describe --tags)               # Checkout the latest release
 
              mkdir build
 
              cd build
 
              cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
 
              make -j12
 
              sudo make install
        

       4、配置和编译colmap:
                  

        git clone https://github.com/colmap/colmap.git
 
              cd colmap
 
              git checkout dev
 
              mkdir build
 
              cd build
 
              cmake ..
 
              make -j12
 
              sudo make install
好了到这里为止就安装完colmap了。运行一下,

             

colamp gui
成功打开一个colmap的窗口就说明安装成功了。

 

 

 

二、colmap的工程结构:
      

      这是colmap组织工程的大概结构。这里先大概了解一下有印象即可。

        

       建立稠密图一系列操作后的工程结构:

       

 
三、colmap的使用:
快速入门参考网址:https://colmap.github.io/tutorial.html

colmap -h #查看所有用法
 

1、图形化交互界面:
    

colmap gui
 

#视频教程地址:

   https://demuc.de/colmap/

   https://www.youtube.com/watch?v=bDHJM6nAKtc(前半段为colmap的使用)

一般可进行的操作:

新建/打开一个工程
导入/导出模型(可导出模型的常用的二进制文件格式和txt格式)
特征点提取(这个过程中有可选参数)
稀疏图特征点匹配(也有可选参数)
稠密图图像去畸变
稠密图特征点再匹配
稠密图建图(融合)
建网格添纹理
查看数据集里的图片的情况(在Database Management里面,可以查看每张图片的特征点提取情况、每张与其他张的匹配情况等等)
 

GUI界面简易教程总结:

使用别人的数据集:
      数据集下载地址:https://demuc.de/colmap/datasets/

  然后在gui界面里面,左上角file打开新建工程,然后选中你下载下来的数据集的database.db文件和图片的文件夹,然后菜单栏里Reconstruction→Start Reconstruction,等一段时间就OK了,时长视你电脑cpu性能而定。

  然后想建立稠密图的话,Reconstruction→Dense reconstruction,在Workspace里建立一个空文件夹并选中,然后左上几个按钮Undistortion、Stereo、Funsion依次点完,然后确定,你就能看到你所建立的稠密图了。其中Stereo这一步会消耗大量时间。后面两个按钮是加网格纹理的,Poisson、Delaunay,但建出来后colmap看不了,会提示你用meshlab类似的东西去查看,这一步就看个人喜好了。

 

使用自己的图片集:
  仍然新建工程,database选择NEW,然后放在你存放图片的image文件夹的同级目录。图片文件夹选择你的image。然后菜单栏Processing→Feature extraction,参数不太懂的话直接默认参数,然后直接点击Extract即可。这个完了后Processing→Feature matching,仍然不太懂的话就不用改参数直接Run,等一会儿也就好了。然后跳转到上述用别人的数据集的时候的Reconstruction→Start Reconstruction这一步,后面的步骤完全相似。

 

2、终端操作:
参考网址:https://colmap.github.io/cli.html

1.打开工程进行自动重建:

   

DATASET_PATH=/path/to/project  #工程文件夹里必须包含一个叫做images的文件夹,里面放着重建所需要的图片

   

colmap automatic_reconstructor \
 
     --workspace_path $DATASET_PATH \
 
     --image_path $DATASET_PATH/images
2.单步重建:

-路径设置:

     

DATASET_PATH=/path/to/dataset
#工程文件夹里必须包含一个叫做images的文件夹,里面放着重建所需要的图片

-提取特征点:

     

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
 
--poisson法建网格添加纹理:

     

colmap poisson_mesher \ 
 
     --input_path $DATASET_PATH/dense/ \
 
     --output_path $DATASET_PATH/dense/meshed-poisson.ply
 
--delaunay法建网格添加纹理:

     

colmap delaunay_mesher \
 
   --input_path $DATASET_PATH/dense/fused.ply \
 
   --output_path $DATASET_PATH/dense/meshed-delaunay.ply
 

 

其实这些功能gui里都提供的很好了,如果觉得在gui里操作比较简单的话在gui操作更方便。

      在colmap命令行使用过程中如果遇到哪条指令忘记是啥了直接-h就OK了

      另所有命令和gui操作在文档里都有,需要的话去直接查就OK了。

 

 

四、关于一些常用参数的选择
(翻译自官方文档,因为之前对这一领域了解不多,刚刚开始接触,所以有很多名词翻译的很有缺陷,实在抱歉)

1.特征点提取(Extract features)的相机模型(camera models)的选择:
你的相机参数可以在EXIF中直接提取或者在实验室中先验得到相机参数。建议如果是用的缩放系数相同的同义相机,最好就选择共享相同的参数。

参考网页:https://colmap.github.io/cameras.html

SIMPLE_PINHOLE,PINHOLE:如果选择的图像先天不失真,就使用这个相机模型。当然,即使在图片未失真的情况下,colmap也会选择尝试用一个相对更复杂的相机模型来改善相机参数。

SIMPLE_RADIAL,RADIAL:如果一个相机参数是未知的并且每张图片都有一个不同的相机标定,比如互联网的上的图片,那么就应该选择这个相机模型。这两个模型分别是OPENCV, FULL_OPENCV的简化模型,这两个模型分别只用一个和两个参数来估计相机的径向畸变效应。

OPENCV,FULL_OPENCV:如果你对每张图片的都有一个先验的相机参数,那么既可以选择使用这个相机模型。当然你也可以选择让多张图片共享同一个相机参数然后colmap来估计该相机参数。当然,如果你每张图片实际上都有一个不同的相机参数的话,自动重建很有可能失败。

SIMPLE_RADIAL_FISHEYE,RADIAL_FISHEYE,OPENCV_FISHEYE,FOV, THIN_PRISM_FISHEYE:鱼眼相机模型使用用这些相机模型。其他的所有相机模型均不能修复鱼眼相机模型的畸变。FOV模型是由Google的 Google Project Tango使用。确保不要将omega初始化为0。

 

可以在gui界面里双击specific images或者在导出的模型里看cameras.txt文件来检查估计的相机参数对不对。

 

为了得到最佳的重建效果,可以尝试多种不同的相机模型。

通常,如果你估计的焦距值和失真系数严重错误的话,一般是选择了过于复杂的相机模型。相反的,如果colmap使用了太多的本地迭代和相机之间联系的调整,则是选择的相机模型过于简单而不能完全的修复畸变效果。

 

可以选择在多张图片之中选择共享参数以获得更可信的重建结果。Share intrinsic camera parameters或者你也可以在重建过程中修正相机参数。Fix intrinsic camera parameters

源码中关于相机模型的部分的头文件camera_models.h:

https://github.com/colmap/colmap/blob/master/src/base/camera_models.h

 

2、特征点匹配(Match features)的匹配模式的选择:
穷举匹配(Exhaustive Matching):当你的数据集比较小的时候(小于100张),选择这种模式。这种模式匹配速度足够快并且是最好的效果。每张图片都与其他的所有图片进行匹配。最后生成的块大小取决于你载入内存中的图片的数量。

顺序匹配(Sequential Matching):当你拍照的时候是以连续的方式(比如视频)采集图像的话,这种方式是有用的。连续帧具有视觉重叠。每一帧的图像不必和其他所有图像都进行匹配。只有连续帧匹配就OK了。该模式也有内置的循环检测,第N个图像与其视觉上最为相似的图片匹配。但需要事先训练字典树。https://demuc.de/colmap/ 在这里可以下载。此种方法非常适合在视频序列中大量采用的情况,相比于全局匹配模式大大降低了matching时间。

字典树匹配(Vocabulary Tree Matching):在这种匹配模式下,每张图片都与与他视觉上最相近的经过按空间顺序重新排序的邻居匹配。也需要实现训练好字典树,网页地址同上。

空间匹配(Spatial Matching):这种模式下每个图像均与其空间最近邻居进行匹配。可以在数据库中手动设置空间位置。默认情况下colmap还会从EXIF中获取GPS的相关信息并用来寻找空间上最相近的邻居。如果有准确的先验空间位置信息的话,这种是推荐的匹配模式。

传递匹配(Transitive Matching):这种匹配模式使用已经存在的特征匹配的传递关系来完成更完整的匹配图。例如如果图像A匹配B而B也匹配C,那么colmap将尝试直接匹配A到C。

自定义匹配(Custom Matching):这种模式下允许指定的单个图片去匹配其他图片或者导入指定的已匹配的信息。要指定图像对的话,必须提供一个文本文件如下(每行一对一):

其中image1.jpg是图像文件夹的相对路径。有两种方式来导入单个的特征点匹配方法。原始的(未经过几何校验的)和已经经过几何校验的。在这两种选项中,格式是这样的:

 

 

其中image1.jpg是图像文件夹在工程中的相对路径,并且数字是各个图像中从零开始的特征的索引。如果给大型图像集导入很多匹配项的话,采用脚本语言更为合适。

 

3、导出格式:
参考网页:https://colmap.github.io/format.html

模型导出的格式常用的主要是二进制文件格式或者txt文件格式。当然你的需求如果是其他格式的话也是可以的。

二进制文件格式colmap读取起来更加快速,txt文件格式是人可读的,但colmap读取起来比较慢。如果colmap选择要读取的目录下面既有二进制文件格式又有txt文本格式,colmap会优先选择二进制文件格式。

直接在gui界面里,左上角有一个export model 和export model as text,根据你的需要选择导出目录并导出就OK了。

导出的模型一般包括三个文件:cameras.txt/ cameras.bin, images.txt/ images.bin, points3D.txt/ points3D.bin,这三个文件的作用顾名思义,具体的一些介绍去上面网页里看就OK了。

 

文章可能多处有缺陷,欢迎大家来指正!
--------------------- 
作者:圣右 
来源:CSDN 
原文:https://blog.csdn.net/X_kh_2001/article/details/82591978 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 很高兴能够为您服务。Colmap和OpenMVS是两种三维重建技术,Colmap使用稠密图估计技术来提取图像的结构和视差图,而OpenMVS则使用深度估计技术,它使用更复杂的算法来处理图像,可以提高重建的准确度。 ### 回答2: COLMAP和OpenMVS是两种常用的三维重建软件工具,它们在图像处理、特征匹配、三维点云生成等方面有着各自的特点。 COLMAP是一个开源的三维重建软件,主要用于结构化重建。它能够使用大量的图像来构建三维场景,并生成高质量的点云和稠密地图。COLMAP使用视觉几何技术,包括特征提取、特征匹配和相机姿态估计等,以及三角测量和非线性优化等算法来进行三维重建COLMAP的特点是准确性高、稠密度好,但对于大规模场景处理速度较慢,对于计算资源有一定要求。 OpenMVS是一个用于多视图密集重建的开源软件。它基于图像处理和计算几何算法,能够从来自不同角度的图像中生成细致的三维模型。OpenMVS的特点是处理速度快、对于大规模数据处理也比较高效。它通过多视图稠密重建、稀疏点云三角化和纹理映射等算法来实现三维重建。OpenMVS适用于需要对大规模数据进行快速重建的情况。 综上所述,COLMAP和OpenMVS都是常用的三维重建软件工具,它们在特点和适用场景上有些区别。COLMAP适用于对结构化场景进行准确重建,而OpenMVS适用于对大规模数据进行快速重建。选择使用哪种软件工具应根据具体的需求和项目要求来决定。同时,COLMAP和OpenMVS都有各自的优点和局限性,可以根据具体情况选择使用或结合使用,以得到更好的三维重建结果。 ### 回答3: Colmap和OpenMVS是两种用于三维重建的计算机视觉工具。其中,Colmap是一个用于密集三维重建相机定位的开源软件包,而OpenMVS是一个用于稠密三维重建的工具。 Colmap主要用于从一组相片生成稀疏重建结果,并且可以使用这些结果进行稠密三维重建。它使用SIFT或者其他特征提取算法来提取图像中的特征点,并通过这些特征点来计算相机的姿势。然后,Colmap通过对特征点进行三角化,重建相机姿势和特征点的3D位置来生成稀疏点云。接下来,可以使用这些点云来生成稠密的三维重建结果。Colmap具有较高的精度和鲁棒性,适用于从大规模图像集合中进行三维重建。 OpenMVS是一个专门用于稠密三维重建的工具。它接受稀疏点云和图像作为输入,然后通过将图像投影到点云上来生成稠密点云。OpenMVS采用了特定的密集重建算法,可以精确地重建物体的表面形状和纹理信息。此外,OpenMVS还提供了更多的后处理和可视化工具,以优化和改进重建结果。 Colmap和OpenMVS具有各自的特点和优势。Colmap对于从大型图像集合中进行稀疏重建非常强大,而OpenMVS则更专注于产生高质量的稠密重建结果。两者可以搭配使用,通过先用Colmap生成稀疏点云,再输入给OpenMVS生成稠密点云,从而实现更全面和精细的三维重建
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值