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。
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 /xx/dog_pic /xx/dog_result
其中“dog_pic”里存放的是我自己的图片。“dog_result”是我新建的一个文件夹,用来存放生成的结果的。
所以这个指令的意思是:
python SfM_SequentialPipeline.py “存放图片地址” “结果输出地址”
运行结束后,生成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 /xx/pig_pic2 /xx/pig_result2
这里的pig_pic和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图像三维重建(二)相关推荐
- 最新综述:深度学习图像三维重建最新方法及未来趋势
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天分享的是:深度学习领域基于图像的三维物体重建最新方法及未来趋势 ...
- <医学断层图像三维重建面绘制算法的研究>——第一遍阅读
医学断层图像三维重建面绘制算法的研究 参考文献:段正华. 医学断层图像三维重建面绘制算法的研究[D].哈尔滨理工大学,2020. 基于边增长的三维重建面绘制算法.在整个算法三维重建的插值上,提出了一种 ...
- 医疗图像三维重建方法小结(python+VTK+ITK+Mayavi)
医疗图像三维重建forpython 环境简介 方法 方法一 Poly3DCollection+matplotlib 方法二 VTK+ITK 方法三 Mayavi之contour3d 最终方法Mayav ...
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)
源:十三种基于直方图的图像全局二值化算法原理.实现.代码及效果.
- 对图像进行二维离散Fourier变换
用函数fft2对图像进行二维离散Fourier变换.用图像的形式分别显示清晰的频谱幅度和相位.对图像用窗函数加权,观察其Fourier变换,解释加窗前后的变化.对图像作Fourier变换和反变换.将图 ...
- 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))
目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...
- avframe转byte数组_C# amp; VB6.0 图像与二维数组 互转
背景 最近在研究C#进行图像处理,在图像处理中算法中,往往都是针对的是矩阵运算的.矩阵其实就是一个二维的数组. 为了图像处理的速度,我们都需要放在内存中处理.但网络上收集的代码,往往都是以一维数组的样 ...
- 海康威视IPCamera图像捕获 二种方法
所使用海康威视摄像头型号:DS-2CD4026FWD-(A)(P) 海康威视IPCamera图像捕获方法有两种: (1)利用SDK里面的NET_DVR_CaptureJPEGPicture_NEW进行 ...
- 计算机视觉快速入门一 —— 图像基本操作(二)
计算机视觉快速入门一 -- 图像基本操作(二) 1.灰度图 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) import cv2 #opencv读取的格 ...
- 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除
9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...
最新文章
- elasticsearch 索引 red 状态恢复 green
- 人力资源部如何运用OKR?看三大层面最新OKR模板
- 详细讲解JAVA中的IO流
- k8s label和label选择器
- .net 技术类网址
- 1、jeecg 笔记开篇
- python3中import的那么些坑
- 吉林建筑大学计算机科学技术,魏立明 - 吉林建筑大学 - 电气与计算机学院
- phpstudy中php页面不识别php代码解决方法
- linux系统信息 命令,Linux_Linux系统信息查看命令大全,系统 # uname -a # - phpStudy...
- PostgreSQL13.1-CN-v1.0中文手册.chm下载
- 奥维查看行政边界_全国乡镇行政区划数据乡镇边界数据查询获取方式
- 如何提升小目标的检测效果
- 离散数学 群,环和域
- js判断true和false
- TCP粘包,拆包及解决方法、丢包的原因及解决办法
- 基于用户乘车行为大数据的客流分析及预测模型
- 【MySQL学习】4、MySQL存储过程和函数
- 基于C++的3D魔方游戏+完整源代码
- 端午节论屈原之离骚和程序开发之离怨