在三维重建中,运动中恢复结构(SFM)可以用来重建目标的稀疏点云并为后续的稠密重建提供相对精度更高的种子点。笔者在三维重建的相关工作中除了采用结构光(线激光和条纹光等)外,还使用过OpenMVG + C/PMVS和COLMAP等。在浏览OpenCV contrib模块时发现OpenCV也可实现SFM,基于兴趣这里也编译学习了一下。同样,笔者会在Ubuntu下和windows下分别编译及测试,但是由于篇幅问题,windows下的编译将在下一篇讲解。
1. 依赖库的安装
Ubuntu下的编译相对简单,主要是一些依赖库的安装,尤其是注意Ceres的安装。如果不安装Ceres,则重建功能将被禁用。
#安装依赖库
sudo apt-get install libgoogle-glog-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libeigen3-dev
sudo apt-get install libsuitesparse-dev
#编译、测试及安装Ceres
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
mkdir build && cd build
cmake ..
make -j4
make test
sudo make install
如果按照上述命令行,可能报错:
error: ‘integer_sequence’ is not a member of ‘std’
这是因为最新版的ceres使用了C++14标准,需要在上述步骤中CMake中修改C++编译标准。
cmake -DCMAKE_CXX_STANDARD=14 ..
当然,也可以回退版本:至少需要将ceres回退2.0以下,Eigen回退到3.3以下,此外,还可能需要回退其他库。
2. OpenCV的编译。
注意:上一步的库已经被安装到Ubuntu的环境中,在编译OpenCV库时注意查看viz和sfm是否打开,或者直接打开。
cmake -DWITH_VTK=ON -DBUILD_opencv_sfm=ON ..
然后 make --> sudo make install 即可。如果没有将相关依赖安装到ubunt