一.Bundler下載與安裝
1.Bundler工具包下載
(1)Bundler下載
Bundler源代碼現(xiàn)在在GitHub上托管,下載地址: GitHub:bundler_sfm ,也可以在官網(wǎng)上查看相關(guān)信息:Bunlder官網(wǎng)
(2)SIFT下載
Bundler工具包需要利用SIFT進(jìn)行特征提取,下載地址:SIFT
2.Bundler編譯安裝
可以參考官網(wǎng)文檔:安裝文檔,安裝過程中可能會出現(xiàn)一些問題,記錄如下:
(1)Bunlder編譯
只需要進(jìn)入Bunlder根目錄并執(zhí)行make即可
cd bundler_sfm
make
編譯過程中可能會出現(xiàn)"error trying to exec 'f951': execvp: No such file or directory"問題,解決方法:
sudo apt-get install gfortran
可能出現(xiàn)以下問題:
解決方法:
sudo apt-get install libjpeg-dev
可能出現(xiàn)以下問題:
解決方法:
sudo apt-get install libblas-dev liblapack-dev
(2)SIFT執(zhí)行文件
解壓下載的SIFT工具包,將"sift"文件拷貝到文件夾/bundler_sfm/bin中(bundler根目錄下的bin文件夾)
安裝SIFT運行所需要的依賴包,詳細(xì)參見GitHub上的issue#36
安裝命令:
sudo apt-get install libc6-dev-i386
(3)jhead安裝
sudo apt-get install jhead
安裝完成后將jhead文件拷貝至./bin目錄下
sudo cp /usr/bin/jhead ./bin
(4)ANN共享文件配置
依據(jù)官網(wǎng)文檔,我們需要將/libANN_char.so加入到系統(tǒng)庫中
Finally, once Bundler is compiled, copy the approximate nearest neighbors (ANN) shared library at BASE_PATH/bin/libANN_char.so (Linux/cygwin) or BASE_PATH/bin/ann_1.1_char.dll (Windows VS2005) to a location in your LD_LIBRARY_PATH
執(zhí)行以下命令即可:
sudo cp ./lib/libANN_char.so /lib
3.測試
利用Bundler自帶的example中的圖片進(jìn)行測試,以kermit為例:
cd ./examples/kermit
../../RunBundler.sh
最終會生成很多文件。其中bundle文件夾下的bundler.out中存儲了重建的稀疏3D坐標(biāo)和相機(jī)參數(shù)。內(nèi)容的具體格式參見README.md
4.Bundle2PMVS轉(zhuǎn)換
利用Bundler得到場景的稀疏點云后可以利用PMVS進(jìn)行稠密點云重建,在此之前需要將Bundler的輸出轉(zhuǎn)換為CMVS-PMVS2的輸入格式。Bundler自帶了轉(zhuǎn)換工具:bin目錄下的Bundle2PMVS:
../../bin/Bundle2PMVS prepare/list.txt bundle/bundle.init.out
執(zhí)行完畢后有如下提示:
此時在bundler_sfm/examples/kermit目錄下會生成pmvs子目錄,將pmvs目錄中的prep_pmvs.sh中的BUNDLER_BIN_PATH修改為bundler的bin文件夾的路徑,例如:
BUNDLER_BIN_PATH=/home/st/app/bundler_sfm/bin
修改完成后運行:
sh pmvs/prep_pmvs.sh
得到txt,visualize,models目錄和bundle.rd.out, list.rd.txt, vis.dat, pmvs_options.txt等文件,這些文件就可以作為PMVS的輸入了。
二.PMVS/CMVS下載與安裝
1.PMVS/CMVS下載
Bundler官網(wǎng)上提供的PMVS鏈接已經(jīng)失效,PMVS2和CMVS的官網(wǎng)地址分別為:PMVS和CMVS
下載pmvs-2-fix0.tar.gz
下載cmvs-fix2.tar.gz(243Mb)
2.PMVS/CMVS安裝
(1)PMVS安裝
安裝過程參考官方文檔:PMVS文檔
Compilation
We suggest on using the binary distribution, but if you choose to compile the source codes, try the following.
1.Make sure you have all the libraries listed above in your system.
2.Go to directory "program/main"
3.Add INCLUDE and LDLIBRARY paths to Makefile
4.make depend
5.make
編譯之前,安裝依賴庫:
sudo apt-get install libgtk2.0-dev libdevil-dev libboost-all-dev libatlas-cpp-0.6-dev libatlas-dev imagemagick libcminpack-dev libgfortran3 libmetis-edf-dev libparmetis-dev freeglut3-dev libgsl0-dev
sudo apt-get install libgsl0-dev libblas-dev libatlas-dev liblapack-dev liblapacke-dev
進(jìn)入program/main目錄,在Makefile中添加YOURINCLUDEPATH和YOURLDLIBPATH路徑。
make depend
make
可能出現(xiàn)以下錯誤:
解決方法:
修改../base/numeric/mylapack.cc文件
Update ../base/numeric/mylapack.cc
From:
extern "C" {
#include <clapack/f2c.h>
#include <clapack/clapack.h>
};To:
extern "C" {
//#include <clapack/f2c.h>
//#include <clapack/clapack.h>
#include <lapacke.h>
};
#define integer int
修改../base/numeric/mylapack.h文件
Update ../base/numeric/mylapack.h
From:
static void lls(std::vector& A, std::vector& b, long int width, long int height);
static void lls(std::vector& A, std::vector& b, long int width, long int height);To:
static void lls(std::vector& A, std::vector& b, int width, int height);
static void lls(std::vector& A, std::vector& b, int width, int height);
注意:liblapack.so.3需要鏈接到/usr/lib/下的liblapack.so.3,libblas.so.3需要鏈接到/usr/lib/下的libblas.so.3,不然編譯會警告:找不到libgfortran.so.1
修改好后再編譯,編譯好后測試:
cd program/main
./pmvs2 ../../data/hall/ option.txt
(2)CMVS安裝
安裝過程參考官方文檔:CMVS文檔
1)安裝依賴軟件和依賴庫
Bundler
PMVS2
Graclus 下載完后根據(jù)個人系統(tǒng)版本,修改Makefile.in文件中的
COPTIONS選項
COPTIONS = -DNUMBITS=32 #32位機(jī)器
COPTIONS = -DNUMBITS=64 #64位機(jī)器
修改完后在終端執(zhí)行make命令進(jìn)行編譯。編譯完成后將libmetis.a和libmultilevel.a兩個文件放到PMVS2的Makefile文件中YOUR_LDLIB_PATH設(shè)置的路徑下。
2)CMVS安裝
進(jìn)入PMVS2目錄,備份Makefile文件
cd ./pmvs-2
mv program/main/Makefile program/main/Makefile.bak
將下載好的CMVS工具包解壓并將文件覆蓋PMVS的文件,然后修改Makefile文件:拷貝program/main/Makefile.bak文件中的YOUR_INCLUDE_PATH 和 YOUR_LDLIB_PATH,設(shè)置YOUR_INCLUDE_METIS_PATH為Graclus的目錄:
YOUR_INCLUDE_METIS_PATH = -I/home/st/app/graclus1.2/metisLib
注意前面加上"-I"。另外,下載的CMVS中的Makefile文件中有幾行(10,13,16行)說明內(nèi)容需要手動注釋掉(前面加#號即可)。修改完Makefile文件后make即可。
如果出現(xiàn)以下錯誤:
解決方法:修改../base/cmvs/bundle.cc文件
Add this to ../base/cmvs/bundle.cc
#include <numeric>
修改好后重新make,如果出現(xiàn)以下錯誤:
解決方法:修改genOption.cc文件
Add this to genOption.cc
#include <cstdlib>
修改好后重新make即可。
安裝成功后將會得到pmvs2、cmvs、genOption三個二進(jìn)制文件。
3.PMVS使用
以PMVS工具包自帶的data/hall為例,進(jìn)入program/main目錄
默認(rèn)指令:
./pmvs2 ../../data/hall/ option.txt
如果機(jī)器內(nèi)存不是很大的話,可以分兩步執(zhí)行:
./pmvs2 ../../data/hall/ option.txt-0000
./pmvs2 ../../data/hall/ option.txt-0001
如果機(jī)器內(nèi)存足夠的話,可以嘗試下面的指令獲得稠密點云:
./pmvs2 ../../data/hall/ option-highres.txt
結(jié)果將會保存在文件夾hall/models下,默認(rèn)指令下,將會得到三個文件:outputs.option.txt.ply、option.txt.patch、option.txt.pset
4.CMVS使用
參考CMVS官方文檔
5.稠密點云的可視化
利用PMVS進(jìn)行稠密重建得到的outputs.option.txt.ply可以用可視化軟件MeshLab進(jìn)行顯示。
三.參考內(nèi)容
如果有其他的問題,可以訪問FAQ