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
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/
从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
由于在例子一中安装过了,故在本例子(也就是例子二)中不再安装。在例子二中,仅用到在build/main文件夹中生成三个可执行文件 cmvs、genOption、pmvs2
首先在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点云文件。
官方文档里给出了两个脚本,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。
使用的相机为型号为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