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图像三维重建(二)相关推荐

  1. 最新综述:深度学习图像三维重建最新方法及未来趋势

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 今天分享的是:深度学习领域基于图像的三维物体重建最新方法及未来趋势 ...

  2. <医学断层图像三维重建面绘制算法的研究>——第一遍阅读

    医学断层图像三维重建面绘制算法的研究 参考文献:段正华. 医学断层图像三维重建面绘制算法的研究[D].哈尔滨理工大学,2020. 基于边增长的三维重建面绘制算法.在整个算法三维重建的插值上,提出了一种 ...

  3. 医疗图像三维重建方法小结(python+VTK+ITK+Mayavi)

    医疗图像三维重建forpython 环境简介 方法 方法一 Poly3DCollection+matplotlib 方法二 VTK+ITK 方法三 Mayavi之contour3d 最终方法Mayav ...

  4. 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)

    源:十三种基于直方图的图像全局二值化算法原理.实现.代码及效果.

  5. 对图像进行二维离散Fourier变换

    用函数fft2对图像进行二维离散Fourier变换.用图像的形式分别显示清晰的频谱幅度和相位.对图像用窗函数加权,观察其Fourier变换,解释加窗前后的变化.对图像作Fourier变换和反变换.将图 ...

  6. 【图像处理】——图像的二值化操作及阈值化操作(固定阈值法(全局阈值法——大津法OTSU和三角法TRIANGLE)和自适应阈值法(局部阈值法——均值和高斯法))

    目录 一.二值化的概念(实际上就是一个阈值化操作) 1.概念: 2.实现方法 3.常用方法 二.阈值类型 1.常见阈值类型(主要有五种类型) (1)公式描述 (2)图表描述 2.两种特殊的阈值算法(O ...

  7. avframe转byte数组_C# amp; VB6.0 图像与二维数组 互转

    背景 最近在研究C#进行图像处理,在图像处理中算法中,往往都是针对的是矩阵运算的.矩阵其实就是一个二维的数组. 为了图像处理的速度,我们都需要放在内存中处理.但网络上收集的代码,往往都是以一维数组的样 ...

  8. 海康威视IPCamera图像捕获 二种方法

    所使用海康威视摄像头型号:DS-2CD4026FWD-(A)(P) 海康威视IPCamera图像捕获方法有两种: (1)利用SDK里面的NET_DVR_CaptureJPEGPicture_NEW进行 ...

  9. 计算机视觉快速入门一 —— 图像基本操作(二)

    计算机视觉快速入门一 -- 图像基本操作(二) 1.灰度图 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) import cv2 #opencv读取的格 ...

  10. 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除

    9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 文章目录 9.2.1 Python图像处理之图像数学形态学-二值形态学应用之噪声消除 1 算法原理 2 代码 3 效果 1 ...

最新文章

  1. elasticsearch 索引 red 状态恢复 green
  2. 人力资源部如何运用OKR?看三大层面最新OKR模板
  3. 详细讲解JAVA中的IO流
  4. k8s label和label选择器
  5. .net 技术类网址
  6. 1、jeecg 笔记开篇
  7. python3中import的那么些坑
  8. 吉林建筑大学计算机科学技术,魏立明 - 吉林建筑大学 - 电气与计算机学院
  9. phpstudy中php页面不识别php代码解决方法
  10. linux系统信息 命令,Linux_Linux系统信息查看命令大全,系统    # uname -a # - phpStudy...
  11. PostgreSQL13.1-CN-v1.0中文手册.chm下载
  12. 奥维查看行政边界_全国乡镇行政区划数据乡镇边界数据查询获取方式
  13. 如何提升小目标的检测效果
  14. 离散数学 群,环和域
  15. js判断true和false
  16. TCP粘包,拆包及解决方法、丢包的原因及解决办法
  17. 基于用户乘车行为大数据的客流分析及预测模型
  18. 【MySQL学习】4、MySQL存储过程和函数
  19. 基于C++的3D魔方游戏+完整源代码
  20. 端午节论屈原之离骚和程序开发之离怨

热门文章

  1. 宇视摄像头IP地址修改工具
  2. 递归神经网络教程请签收!
  3. OPENCV 实现png绘制,alpha通道叠加。
  4. 睿思荐片--最好的电影,最全的排行
  5. 疯狂Java讲义P179单例
  6. 大型企业通用ERP进销存源码 ASP.Net开发系统源码
  7. 数字化转型实践:世界级 2B 数字化营销的方法框架
  8. 数字化营销的意义所在
  9. ETC风头已过,龙头林立,黔通智联此时上市还真缺点儿“想象力”
  10. Ubuntu18.04下编译tslib触摸屏驱动