3D重建作业-软件安装(1)

本文详细介绍了在Ubuntu 16.0 上安装Bundler及其依赖库的步骤,包括获取源码、安装ImageMagick、GFortran、LAPACK、BLAS、libjpeg和libz。此外,还提供了编译Bundler、配置相机参数以及解决常见错误的方法,以进行3D重建的初步工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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:通用目的的压缩库

  1. 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.youkuaiyun.com/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/binexpo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值