SFM图像三维重建(二)

openMVG/openMVS/bundler基于SFM的图像三维重建(二)

  • Linux下使用openMVG+PMVS进行三维重建
    • 1. openMVG简介
    • 2. 过程与结果
      • 1.安装openMVG
      • 2.安装PMVS-CMVS
      • 3.使用openmvg例程进行三维重建
      • 4.使用自己的图片做出来的实验效果。

SFM图像三维重建(一)的地址:
https://blog.csdn.net/abccc250110119/article/details/93471816
SFM图像三维重建(二)的地址:
https://blog.csdn.net/abccc250110119/article/details/105074333
SFM图像三维重建(三)的地址:
https://blog.csdn.net/abccc250110119/article/details/105075101

Linux下使用openMVG+PMVS进行三维重建

1. openMVG简介

openMVG (Open Multiple View Geometry):开源多视角立体几何库,这是一个cv界处理多视角立体几何的著名开源库,信奉“简单,可维护”,提供了一套强大的接口,每个模块都被测试过,尽力提供一致可靠的体验。 openMVG能够:

1.解决多视角立体几何的精准匹配问题;
2.提供一系列SfM需要用到的特征提取和匹配方法;
3.完整的SfM工具链(校正,参估,重建,表面处理等); 4.openMVG尽力提供可读性性强的代码,方便开发者二次开发,核心功能是尽量精简的,所以你可能需要其它库来完善你的系统。

openMVG分成了几个大的模块:
核心库:
各个功能的核心算法实现;
样例:
如何使用;
工具链:
将各个步骤连接起来(乱序图像集的特征匹配,SfM,处理色彩和纹理);

github地址:https://github.com/openMVG/openMVG
使用文档:http://openmvg.readthedocs.io/en/latest/

2. 过程与结果

1.安装openMVG

从github克隆到本地(含三个子模块)

git clone --recursive https://github.com/openMVG/openMVG.git

安装依赖:

sudo apt-get install libpng-dev libjpeg-dev libtiff-dev libxxf86vm1 libxxf86vm-dev libxi-dev libxrandr-dev

编译:

mkdir openMVG_Build
cd openMVG_Build
cmake -DCMAKE_BUILD_TYPE=RELEASE -DOpenMVG_BUILD_TESTS=ON -DOpenMVG_BUILD_EXAMPLES=ON . ../openMVG/src/
make
make test

测试例程都安装好了以后,进行安装

sudo make install

2.安装PMVS-CMVS

由于在例子一中安装过了,故在本例子(也就是例子二)中不再安装。在例子二中,仅用到在build/main文件夹中生成三个可执行文件 cmvs、genOption、pmvs2

3.使用openmvg例程进行三维重建

首先在openMVG_Build/software/SfM/文件夹中,运行

python tutorial_demo.py

该程序封装了SfM pipeline的脚本,它先克隆文件夹ImageDataset_SceauxCastle到SfM文件夹中,作为图像输入,再生成一个tutorial_out文件夹保存输出结果。

由于openMVG生成的是稀疏的点云,只含有它在图像中提取到的特征点的点云映射,所以需要用PMVS处理图像和位置的关系来得到稠密的点云。

SfM_Data是一个数据容器,储存在sfm_data.bin中,它包括(大概也就是二进制编码的结构):Views - 图像、Intrinsics – 相机内参数、Poses – 相机外参数、Landmarks – 三维点和它们的二维图像对应点。

把SfM_Data转化为适用于PMVS输入格式的文件
openMVG_main_openMVG2PMVS -i tutorial_out/reconstruction_global/sfm_data.bin -o tutorial_out/reconstruction_global

在reconstruction_global文件夹中会生成PMVS文件夹,包含 models,txt,visualize 三个文件夹,models为空,txt包含11个对应图像的txt文档,每个里面都是一个3x4的矩阵,大概是相机位姿,visualize包含11张图像。

然后把CMPVS-PMVS编译后生成的pmvs2复制到SfM文件夹,运行

 ./pmvs2 tutorial_out/reconstruction_global/PMVS/ pmvs_options.txt

(注意pmvs_options.txt前有一个空格)

PMVS/models文件夹中生成一个pmvs_options.txt.ply点云文件。

进入meshlab查看结果。如图9。
SFM图像三维重建(二)_第1张图片
SFM图像三维重建(二)_第2张图片

4.使用自己的图片做出来的实验效果。

官方文档里给出了两个脚本,SfM_SequentialPipeline.py 和 SfM_GlobalPipeline.py。前一个为增量式的SFM,后一个为全局SFM。

使用方法:https://openmvg.readthedocs.io/en/latest/software/SfM/SfMInit_ImageListing/

三维稀疏重建是需要相机参数的,openMVG提供了一些相机的焦距,保存在sensor_width_camera_database.txt中。但是我的手机相机参数该文档中没有,所以要自己给加上去。否则会出现以下的报错:
在这里插入图片描述
将相机参数加入文档:
在这里插入图片描述
首先采用增量式SFM实验。

在终端打开build/software/SfM文件夹,执行

python SfM_SequentialPipeline.py 
/home/chenghl/example002/my_example/dog/dog_pic 
/home/chenghl/example002/my_example/dog/dog_result

运行结束后,生成sfm_data.bin文件。将该文件拷贝到dog_result_pmvs文件夹中,再把sfm_data文件转化为适用于PMVS输入格式的文件。在dog_result_pmvs文件夹中,执行

openMVG_main_openMVG2PMVS -i sfm_data.bin -o dog_test

将pmvs2可执行文件复制到my_example文件夹中。执行

./pmvs2 dog/dog_result_pmvs/dog_test/PMVS/ pmvs_options.txt 

生成pmvs_options.txt.ply。使用meshlab查看,如图11所示。
SFM图像三维重建(二)_第3张图片
然后采用全局式SFM。
使用的相机为型号为Samsung Galaxy Camera。
在终端打开build/software/SfM文件夹,执行

python SfM_GlobalPipeline.py 
/home/chenghl/example002/my_example/pig/pig_pic2 
/home/chenghl/example002/my_example/pig/pig_result2

运行结束后,生成sfm_data.bin文件。将该文件拷贝到pig_result_pmvs2文件夹中,再把sfm_data文件转化为适用于PMVS输入格式的文件。在pig_result_pmvs2文件夹中,执行

openMVG_main_openMVG2PMVS -i sfm_data.bin -o pig_test

将pmvs2可执行文件复制到my_example文件夹中。执行

./pmvs2 pig/pig_result_pmvs2/pig_test/PMVS/ pmvs_options.txt 

生成pmvs_options.txt.ply。使用meshlab查看,如图12所示。
SFM图像三维重建(二)_第4张图片
SFM图像三维重建(二)_第5张图片

你可能感兴趣的:(图像三维重建)