openMVG配置过程主要参考openmvg官网
1. 首先进行外部库的安装
sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libxxf86vm1 libxxf86vm-dev libxi-dev libxrandr-dev
2. 如果想要看.svg文件,安装Graphviz(可选)
sudo apt-get install graphviz
3. 下载并切换到openMVG目录
git clone --recursive https://github.com/openMVG/openMVG.git
cd openMVG
mkdir openMVG_Build && cd openMVG_Build
trick1:
在获取openMVG源以及子模块时:
git clone --recursive https://github.com/openMVG/openMVG.git
git clone https://github.com/openMVG/openMVG.git
cd openMVG
git submodule init
git submodule update
4. 配置并生成(需要安装cmake)
cmake -DCMAKE_BUILD_TYPE=RELEASE /home/xx/openMVG/src/
cmake --build . --target install
../openMVG/src/
指自己下载的openMVG中的src的路径。
trick:
cmake --build . --target install
后报错:
执行下面的命令前加上 sudo 添加权限:
sudo cmake -DCMAKE_BUILD_TYPE=RELEASE /home/xx/openMVG/src/
sudo cmake --build . --target install
#Prepare and empty machine for building:
sudo apt-get update -qq && sudo apt-get install -qq
#安装图像格式的一些库:
sudo apt-get -y install git cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev
#Eigen (Required):
git clone https://gitlab.com/libeigen/eigen.git --branch 3.2
mkdir eigen_build && cd eigen_build
cmake . ../eigen
make -j4 && sudo make install
cd ..
eigen可能会出问题:
no matching function for call to Eigen::Matric
主要原因:colmap的eigen和openmvs的eigen版本冲突。
解决:
INCLUDE_DIRECTORIES(/usr/local/eigen3/include/eigen3)
推荐:openmvs>colmap/openmvg
2. 高版本ceres和eigen冲突
我在colmap里安装的是ceres1.4版本的,所以不会遇到这个trick。
#Boost (Required):
sudo apt-get -y install libboost-iostreams-dev libboost-program-options-dev libboost-system-dev libboost-serialization-dev
#OpenCV (Required)
sudo apt-get -y install libopencv-dev
#CGAL (Required)
sudo apt-get -y install libcgal-dev libcgal-qt5-dev
#VCGLib (Required)
git clone https://github.com/cdcseacave/VCG.git vcglib
#Ceres (Optional)
安装colmap的时候安装过了,不再安装,包括eigen也是,刚才又重装了一遍,真烦。
#GLFW3 (Optional)
sudo apt-get -y install freeglut3-dev libglew-dev libglfw3-dev
#OpenMVS
git clone https://github.com/electech6/openMVS_comments.git openMVS
mkdir openMVS_build && cd openMVS_build
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/path to vcglib/vcglib"
其中,/path to vcglib/vcglib
要写自己的vcglib的路径,我的是:
cmake . ../openMVS -DCMAKE_BUILD_TYPE=Release -DVCG_ROOT="/home/xx/code/MVS/vcglib"
#如果想生成共享库,可以在cmake加如下命令:
-DBUILD_SHARED_LIBS=ON
#生成 OpenMVS 库文件:
make -j4 && sudo make install
安装完成。
这里所用的数据集:ETH3D的electro_dslr_jpg.7z
数据集。
建立一个文件夹,用来保存这次的内容。我是在SFM文件夹(/home/xx/openMVG/openMVG_Build/software/SFM),在里面新建两个文件夹data(存用的照片)和 output(输出文件存储)。
1. 读入图像,产生数据
openMVG_main_SfMInit_ImageListing -i data/electro_dslr_jpg/electro/images/dslr_images -o output/matches -f 4800
在/home/xx/openMVG/openMVG_Build/software/SfM/output/match/ 下生成sfm_data.json文件
注意这里的4800忘记改了,这里填的是焦距,要使用估计的相机内外参数。若图片像素为2382×2128,则应填3399 ≈ max(2382,2128)×1.2
2. ComputeFeatures 图像特征点描述
openMVG_main_ComputeFeatures -i output/matches/sfm_data.json -o output/matches
3. ComputeMatches 图像特征点检测
openMVG_main_ComputeMatches -i output/matches/sfm_data.json -o output/matches
4. IncrementalSfM 光束法平差累计式SFM(全局式的也有我没做,官网有命令)
openMVG_main_IncrementalSfM -i output/matches/sfm_data.json -o output/out_Incremental_Reconstruction -m output/matches
5. ExportUndistortedImages导出畸变矫正后的图像
openMVG_main_ExportUndistortedImages -i output/matches/sfm_data.json -o output/out_Incremental_Reconstruction/image
6. openMVG_main_openMVG2openMVS
转换生成文件形式变成.mvs文件,并生成畸变矫正后图像为了后续处理。这条命令在 /home/xx/openMVG/openMVG_Build/software/SfM/output/out_Incremental_Reconstruction
下右键打开终端,就是sfm_data.bin所在文件夹。
openMVG_main_openMVG2openMVS -i sfm_data.bin -o scene.mvs
以上操作即將openMVG产生的数据转换成了openMVS可操作的数据类型。
reference:
OpenMVG on your image dataset
openMVG官方教程
UBUNTU16.04+OPENMVG+OPENMVS实现自己数据三维重建
openMVG+openMVS实现三维重建demo
我们安装的所有东西都在openMVS_biild这个路径下,我们主要用的是bin这个文件里的可执行文件:
1. 稠密重建
在home/xx/openMVG/openMVG_Build/software/SfM/output/out_Incremental_Reconstruction
目录下执行:
/home/xx/code/MVS/openMVS_build/bin/DensifyPointCloud scene.mvs
2. 曲面重建
/home/xx/code/MVS/openMVS_build/bin/ReconstructMesh -d 4 scene_dense.mvs
-d 4与–resolution-level=4的作用是为了简化运算,减小了重建的网格数量与精细程度
3. 网格优化
/home/xx/code/MVS/openMVS_build/bin/RefineMesh --resolution-level=4 scene_dense_mesh.mvs
4. 纹理贴图
/home/xx/code/MVS/openMVS_build/bin/TextureMesh scene_dense_mesh_refine.mvs
结果不是很好,应该是像素焦距没调好,明天再试试。
reference: