Bundler可以得到较为稀疏的点云(point clouds)数据。如果需要得到更密集的点,MVPS2。一种比较常见的途径是使用Bundler来得到相机参数,然后使用Bundle2PMVS程序,将生成结果转换为PMVS2的输入,然后使用PMVS2来得到更密集的点云。CMVS是一个场景聚类程序,在使用PMVS2前可以使用它来进行一些预处理。
Ubunu16.0 安装bundler
一、Bundler源码包的获取
1. 到http://phototour.cs.washington.edu/bundler/下载Bundler的源码包bundler-v0.4-source.tar.gz
2. 下载完成后,解压该源码包:
tar -zxvf bundler-v0.4-source.tar.gz
并将其解压缩到一个目录中,称为BASE_PATH。
3.在系统上安装ImageMagick:用于将jpg文件转换为pgm格式,这是David Lowe的SIFT二进制文件所需的格式。
4.功能检测器SIFT,地址:http://www.cs.ubc.ca/~lowe/keypoints/
make之后会有sift可执行文件并将其复制到BASE_PATH / bin,确保它被称为’sift’
RunBundler.sh脚本依赖于正在安装的bash和perl。 在Windows中运行此脚本的最简单方法是通过cygwin。
二、GFortran的安装
Bundler所依赖的库中有些库是用Fortran写成的。为了编译Fortran程序,需要安装GFortran编译器。
sudo apt-get?install gfortran
三、编译 / 安装依赖库
Bundler所依赖的外部库列表如下:
LAPACK:线性代数计算库
BLAS:基础线性代数子程序,在LAPACK包中有自带,但需进行设置
libjpeg:jpeg库,Ubuntu已自带
libz:通用目的的压缩库
- LAPACK、BLAS的编译
下载LAPACK编译包,下载地址为:
http://www.netlib.org/lapack/#_strong_lapack_version_3_3_0_strong
下载完后解压:
tar -zxvf lapack-3.3.0.tgz
在make之前,需要先创建一个make.inc文件,命令为:
cd lapack-3.3.0
cp make.inc.example make.inc
使用Ubuntu+gfortran,则无须更改make.inc里的内容。
设置BLAS需要修改一下makefile:
gedit Makefile
光标定位到第11行并将内容改为:
lib: blaslib lapacklib tmglib
保存退出,然后开始make整个工程:
make
编译完成后,目录下将生成blas_LINUX.a、lapack_LINUX.a和tmglib_LINUX.a三个文件。如图1所示。
图1 LAPACK编译结果
将这三个文件分别更名为:libblas.a,liblapack.a,libtmglib.a并复制到BASE_PATH/lib目录下。
2.zlib的编译安装
下载地址:http://www.zlib.net/
解压:
tar-zxvf zlib-1.2.5.tar.gz
编译安装:
cd zlib-1.2.5
./configure
sudo make install
四、编译安装Bundler
设置共享库:将BASE_PATH\bin目录下的libANN_char.so复制到BASE_PATH/lib中。
回到Bundler的工程目录,make
根据报错提示修改如下:
BATH_PATH/src/Bundle2PMVS.cpp
217行更改为 fprintf(f_scr, “mv %s.jpg %s/visualize/%08d.jpg\n”,
151行改为output_path
BATH_PATH/src/BundleApp.h
620行更改为BundlerApp();或者直接注释
更改后再次make进行编译安装。
make完成后在bin目录下就会看到新生成的bundler可执行文件。
五、测试Bundler
RunBundler.sh中17行编译BASE_PATH的地址,19行末加分号
在BASE_PATH\examples\kermit下执行sh RunBundler.sh
完成后,提示运行成功,如图2所示。
Kermit下的运行截图:
kermit/Bundle下截图:
Bundler输出的文件大多以“bundle_*.out”的形式来命名,我们称之为“bundle文件”。
这些ply文件可以通过使用专用的查看器scanalyze来查看,地址为:
http://graphics.stanford.edu/software/scanalyze/
几个错误及其解决方法:
无法找到相机CCD传感器宽度信息。初次使用自己拍摄的照片兴致勃勃测试程序效果的时候,一般都会遇到这个问题。而没有CCD宽度信息,就无法计算点云的三维坐标,再继续跑下去也是白搭。
解决方法:①先确定你的相机型号,然后到网上查找该相机的CCD参数。比如www.dpreview.com。需要注意的是,程序要求的CCD宽度并不是说只能用CCD相机,CMOS相机也是一样的,CMOS感应器宽度就是所需的CCD宽度。
② 查到CCD/CMOS宽度信息后,在bin目录下找到extract_focal.pl配置文件,使用notepad++之类的记事本程序打开,按照相应格式把你的相机传感器宽度信息加进去。注意格式要严格按照规定:
“[Camera make] [Camera model]” => [Sensor width]
(即”[相机制造商] [相机型号]” => [传感器宽度])。比如我们的相机是”NIKON CORPORATION NIKON D7100” => 23.5
另,至于如何确定相机制造商Camera make和型号Camera model,可以把你拍摄的一张照片放到bin文件目录中,打开cmd控制台,通过jhead程序进行确认。如下图,我的照片是1.jpg:
在利用Bundler得到场景的稀疏点云后就可以利用PMVS进行稠密点云的重建了,当然在这之前我们还需要将Bundler的输出转换为CMVS-PMVS2的输入格式。我们利用bin下的Bundle2PMVS即可完成这一过程。
../../bin/Bundle2PMVS prepare/list.txt bundle/bundle.init.out
Centos7上用的是:
media/data-1/sy/3Dre/BASE_PATH/bin/Bundle2PMVS
/media/data-1/sy/3Dre/BASE_PATH/examples/ET/prepare/list.txt boundle/bundle.init.out
Ubuntu下用的是
/media/sy/life/cv/3Dre/sfm/BASE_PATH/bin/Bundle2PMVS /media/sy/life/cv/3Dre/sfm/BASE_PATH/examples/ET/prepare/list.txt /examples/ET/bundle/bundle.out
/media/sy/life/cv/3Dre/sfm/BASE_PATH/bin/Bundle2PMVS /media/sy/life/cv/3Dre/sfm/BASE_PATH/examples/test/prepare/list.txt /examples/test/bundle/bundle.out
执行完毕后会有如下提示:
Error opening file /examples/ET/bundle/bundle.init.out for reading
@@ Conversion complete, execute “sh pmvs/prep_pmvs.sh” to finalize
@@ (you will first need to edit prep_pmvs.sh to specify your bundler path,
@@ so that the script knows where to find your
@@ RadialUndistort and Bundle2Vis binaries)
此时会生成了pmvs子目录, 里面有文件prep_pmvs.sh,我们需要执行
sh pmvs/prep_pmvs.sh,
在执行前需要编辑prep_pmvs.sh,将BUNDLER_BIN_PATH修改为bundler的bin文件夹的实际路径。例如:
BUNDLER_BIN_PATH=/media/sy/life/cv/3Dre/sfm/BASE_PATH/bin
之后就可以执行sh pmvs/prep_pmvs.sh了。
然后,会得到txt, visualize, models目录和bundle.rd.out, list.rd.txt, vis.dat, pmvs_options.txt等文件,这些东西就可以作为PMVS的输入了。
报错更改记录:
/media/data-1/sy/3Dre/BATH_PATH/src/RadialUndistort.cpp中359行
int last_dot = files[i].rfind(‘.’);改成int last_dot = files[i].rfind(‘.’,1);
ImageMagick安装:
https://blog.csdn.net/nash603/article/details/6102615
下载的是ImageMagick-6.4.0-0.tar.gz
通过命令 tar xzvf ImageMagick-6.4.0-0.tar.gz解压
./configure
make
make install
设置环境变量。我的做法是输入命令 vim ~/.bash_profile
PATH= PATH:/opt/bokee/ImageMagick/binexportLDLIBRARYPATH=:/opt/bokee/soft/JMagick/lib:/opt/bokee/ImageMagick/libexportDYLDLIBRARYPATH=:/opt/bokee/soft/JMagick/lib:/opt/bokee/ImageMagick/libexportPATH保存关闭文件后,输入source /.bashprofile跟新配置文件,大功告成!检查ImageMagick是否已经安装成功,在命令行输入convert−version。安装成功以后出现的信息如下: P A T H : / o p t / b o k e e / I m a g e M a g i c k / b i n e x p o r t L D L I B R A R Y P A T H =: / o p t / b o k e e / s o f t / J M a g i c k / l i b : / o p t / b o k e e / I m a g e M a g i c k / l i b e x p o r t D Y L D L I B R A R Y P A T H =: / o p t / b o k e e / s o f t / J M a g i c k / l i b : / o p t / b o k e e / I m a g e M a g i c k / l i b e x p o r t P A T H 保 存 关 闭 文 件 后 , 输 入 s o u r c e / . b a s h p r o f i l e 跟 新 配 置 文 件 , 大 功 告 成 ! 检 查 I m a g e M a g i c k 是 否 已 经 安 装 成 功 , 在 命 令 行 输 入 c o n v e r t − v e r s i o n 。 安 装 成 功 以 后 出 现 的 信 息 如 下 : convert -version
Version: ImageMagick 6.4.0 12/28/10 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2008 ImageMagick Studio LLC