openMVG/openMVS/bundler基于SFM的图像三维重建(一)
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
基于SFM算法的三维重建
为了完成毕业设计,尝试了一下图像三维重建的东西……虽然都是蛮浅显的尝试,但是对我一个新手来说,能出来效果真的蛮开心~嘿嘿
参考的网页:
https://blog.csdn.net/zouyu1746430162/article/details/78638133
https://blog.csdn.net/moneyhoney123/article/details/78454659
首先是bundler+pmvs/cmvs的
bundler简介&PMVS/CMVS简介
Bundler是一个采用C和C++开发的称为sfm(struct-from-motion)的系统,它能够利用无序的图片集合(例如来自网络的图片)重建出3D的模型。最早的版本被用在Photo Tourism的项目上。
项目的官方网站在此:http://phototour.cs.washington.edu/。
Bundler的输入是一些图像、图像特征以及图像匹配信息,输出则是一个根据这些图像反应的场景的3D重建模型,伴有少量识别得到的相机以及场景几何信息。系统借用一个由Lourakis 和Argyros提供的称为Sparse Bundle Adjustment的开发包的修改版,一点一点递增地重建出图像场景。Bundler已经成功的应用在许多网络相册系统,尤其是一些建筑相册里。
Bundler 的源代码可以在这里下载:http://phototour.cs.washington.edu/bundler/
Bundler和PMVS(CMVS)是进行三维重构中非常有用的一套工具包,Bundler利用一系列无序图片可以生成场景的稀疏点云,这些稀疏点云通过PMVS工具包可以得到稠密点云,从而可以重建出场景的3D模型。
PMVS和CMVS(CMVS是PMVS的改进版,里面包含PMVS)是Yasutaka Furukama博士写的已知一组图片和图片对应的相机参数生成dense reconstruction (稠密的三维模型)。
安装过程和结果
- 安装下载bundler和PMVS/CMVS
在linux终端输入:
git clone https://github.com/snavely/bundler_sfm.git
git clone https://github.com/pmoulon/CMVS-PMVS.git
在 http://www.cs.ubc.ca/~lowe/keypoints/ 下载SIFT。(因为bundler需要SIFT进行特征提取)
安装bundler相关依赖:
sudo apt-get install liblapack-dev libblas-dev minpack-dev f2c gfortran jhead imagemagick
安装SIFT依赖:
sudo apt-get install libc6-dev-i386
安装CMVS/PMVS依赖:
sudo apt-get install libgtk2.0-dev libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-dev libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev libgsl0-dev
- 编译bundler和CMVS/PMVS
进入Makefile文件所在的目录:
cd /你自己的安装目录/bundler_sfm/
编译 :
make
将下载的SIFT程序中,SIFT可执行文件拷贝到bundler_sfm下的bin目录下;
将jhead文件拷贝到bundler_sfm下的bin目录下;
sudo cp /usr/bin/jhead bin/
将bundler_sfm/bin/目录下生成的libANN_char.so文件拷贝到系统库;
cd bundler_sfm-master
make
会生成libANN_char.so
sudo cp bin/libANN_char.so /usr/lib/
接下来对CMVS-PMVS进行编译,使用cd命令进入到CMVS-PMVS/program/下,然后依次执行以下命令:
mkdir build && cd build
cmake ..
make
执行完成后,CMVS-PMVS也就编译完成了,生成的可执行文件位于build目录下的main目录中。将生成的可执行文件cmvs、genOption、pmvs2这三个文件拷贝到bundler_sfm目录的bin下。 - 执行Bundler和CMVS-PMVS进行三维重建
先利用自带的example中的图片进行测试。
使用cd命令进入到ET文件夹下,然后执行以下命令../../RunBundler.sh
最终会生成很多的结果文件,其中bundler文件夹下的bundler.out中存储了重建的稀疏点3D坐标和相机参数。
接下来我们就可以利用PMVS进行稠密点云的重建了,在这之前需要将Bundler的输出转换为CMVS-PMVS的输入格式。利用bin下的Bundle2PMVS即可完成这一过程。
../../bin/Bundle2PMVS prepare/list.txt bundle/bundle.out
此时会生成pmvs目录,在此目录下有prep_pmvs.sh文件,编辑此文件,将里边的BUNDLER_BIN_PATH修改为bundler的bin文件夹的实际路径。
BUNDLER_BIN_PATH="/你自己的路径/bundler_sfm/bin
然后依次执行如下操作:
sh pmvs/prep_pmvs.sh
(在这一步出现了报错“unexcepted operator”,参考了网页 https://www.linuxidc.com/Linux/2014-11/110010.htm ,修改sh默认连接到bash:sudo dpkg-reconfigure dash
,解决了报错)
../../bin/cmvs pmvs/
../../bin/genOption pmvs/
../../bin/pmvs2 pmvs/ option-0000
(注意option之前的空格键)
生成的最终结果位于pmvs目录的models 文件夹下,名称为option-0000.ply - 使用meshlab软件查看结果
安装meshlab软件
sudo add-apt-repository ppa:zarquon42/meshlab
sudo apt-get update
sudo apt-get install meshlab
进入meshlsb软件后查看结果如图1:
图1
实物图片如图2
图2
图3
图4
以下为使用自己的图片实验的结果:
图5 结果
图6 实物图
没结果啊qwq。
检查后发现是因为 。无法找到相机CCD传感器宽度信息。
我使用的手机型号为Samsung SM-C5010,手机相机为同款型号。手机相机搭载的为CMOS相机,而非CCD相机,但程序要求的CCD宽度并不是说只能用CCD相机,CMOS相机也是一样的,CMOS感应器宽度就是所需的CCD宽度。
查到CCD/CMOS宽度信息后,在bin目录下找到extract_focal.pl配置文件,使用记事本程序打开,按照相应格式把你的相机传感器宽度信息加进去。
(即”[相机制造商] [相机型号]” => [传感器宽度])
之后再次进行实验,得到效果如图7所示。
图7 实验效果图
图8 实验输入的图片
今天的文章SFM图像三维重建(一)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/11825.html