標籤:
一。什麼是Bundler
Bundler是一個採用C和C++開發的稱為SfM(struct-from-motion)的系統,實現了根據使用者提供的無序的映像序列,產生稀疏的三維點雲模型。它能夠利用無序的圖片集合(例如來自網路的圖片)重建出3D的模型。最早的版本被用在Photo Tourism的項目上。
Photo Tourism系統可以互動式瀏覽和探索大型非結構化情境照片集合。系統有一個基於映像的建模前端,它會自動計算每一張照片的角度,以及稀疏模型對應的情境和形象的3D 模型。
圖1.Photo Tourism
Bundler的輸入是一些映像、映像特徵以及映像匹配資訊,輸出則是一個根據這些映像反應的情境的3D重建模型,伴有少量識別得到的相機以及情境幾何資訊。系統借用一個由Lourakis 和Argyros提供的稱為Sparse Bundle Adjustment的開發包的修改版,一點一點遞增地重建出映像情境。Bundler已經成功的應用在許多網路相簿系統,尤其是一些建築相簿裡。
二。過程如下:
1.訪問 http://www.cs.cornell.edu/~snavely/bundler/ 下載bundler-v0.4-source.zip並解壓。
2.在windows平台下,使用visual studio2010開啟bundler-v0.4-source目錄下的vc++目錄中的工程檔案:Bundler.sln;
然後按順序逐個編譯bundler所需的依賴庫,
有:5point、ann_1.1_char、cblas、getopt、imagelib、jpeg、matrix、sba-1.5、sfm-driver、f2c、clapack、cminpack等。
在編譯f2c時,會給出無法找到#include "sysdep1.h"檔案的錯誤 以及會提示無法找到#include "arith.h"檔案的錯誤。
解決方案:進入f2c的目錄,
1>將sysdep1.h0檔案名稱修改為sysdep1.h;
2>將signal1.h0檔案名稱修改為signal1.h;
3>建立一個arith.h檔案,在檔案裡添加如下內容即可:
#define IEEE_8087
#define Arith_Kind_ASL 1
#define Long int
#define Intcast (int)(long)
#define Double_Align
#define X64_bit_pointers
#define QNaN0 0x0
#define QNaN1 0xfff80000
這時,編譯f2c,便成功了。
接下來編譯keyMatchFull和Bundler項目,一切順利。:-)
為了進行獲得稠密的三圍重建效果,利用Bundler提供的Bundle2PMVS和RadialUndistort工具,產生稠密重建PMVS軟體所需的參數。
在編譯Bundlr2PMVS時,在Bundle2PMVS.cpp檔案中會出現“未知的標識符mkdir”的錯誤。
解決方案:
1>在檔案的開頭添加#include <direct.h>,
2>將mkdir替換為_mkdir,如下所示:
//mkdir(output_path, 0770);
_mkdir(output_path);
至此,Bundle2PMVS編譯成功。
在編譯RadialUndistort時,在RadialUndistort.cpp檔案中會出現“無法識別的標識符index” 以及 無法開啟jpeglib.h。
解決方案:1>修改代碼如下所示:
//char *space = index(buf, ‘ ‘);
//if (space) *space = 0;
std::string str(buf);
int space_pos = str.find(‘ ‘);
str.at(space_pos) = 0;
files.push_back(str);
2>修改LoadJPEG.cpp的標頭檔為#inlcude "jpeglib.h",然後添加jpeglib.h的路徑如下:
至此,RadialUndistort編譯成功。
3.在成功執行Bundler前,我們需要做幾步準備工作:
(1)將需要的檔案複製到指定目錄
Bundler產生完成後,需要將bundler-v0.4-source\vc++\Debug\目錄下的Bundler.exe、Bundle2PMVS.exe、KeyMatchFull.exe、RadialUndistort.exe、jpeg.dll、ann_1.1_char.dll檔案統統考到bundler-v0.4-source\bin\目錄下。
(2)下載和安裝Cygwin
Cygwin是許多自由軟體的集合,最初由Cygnus Solutions開發,用於在各種版本的Microsoft Windows上運行UNIX類系統。由於Bundler預設是通過在Unix環境下執行shell指令碼來啟動Bundler的,因為在Windows環境下需要安裝Cygwin以執行shell指令碼。
Cygwin的:http://cygwin.com/
Cygwin的安裝過程:
圖10.選擇下一步
圖11.選擇Install from Internet
圖12.選擇下載目錄
圖13.選擇串連方式 Use Internet Explorer Proxy Settings
圖14.這裡彈出的警告一定要選擇“確定”
圖15.選擇需要的安裝包
肯定需要使用Devel組件,但不必全部安裝,選擇裡面的四個關鍵包安裝即可,為了使我們安裝的Cygwin能夠編譯器,我們需要安裝gcc編譯器,預設情況下,gcc並不會被安裝,我們需要選中它來安裝。為了安裝gcc,我們用滑鼠點開組件列表中的“Devel”分支,在該分支下,有很多組件,我們必須的是:
binutils
gcc
//gcc-mingw
gdb
圖16.開啟Devel分支
圖20.選擇gdb
但要注意一點,Bundler程式中會使用perl、python來進行一些預先處理,因此在安裝過程中需要把Devel、Perl、Python三個組件庫都選上。另外還有ImageMagick這個庫,用來處理圖片。
圖21.選擇ImageMagick庫,在Graphics分支下
圖22.選擇perl、python組件庫
圖23.安裝完成(時間可能比較長)
(3)下載特徵檢測器
Bundler推薦使用SIFT來進行特徵提取,可以到SIFT的作者David Lowe的首頁上下載他提供的SIFT Demo作為我們的檢測器。下載頁面為:http://www.cs.ubc.ca/~lowe/keypoints/或者直接點擊下載:SIFT demo program(Version 4, July 2005)
下載完成後,解壓該文檔,將目錄下的siftWin32.exe檔案拷貝到bundler-v0.4-source\bin目錄中。
圖24.特徵檢測器
(4)準備圖片
將要進行分析處理的圖片放到一個目錄裡,Bundler自己也提供了兩套圖片,分別放在bundler-v0.4-source\examples\ET和bundler-v0.4-source\examples\kermit中。
(5)運行Bundler
開啟Cygwin,cd定位到BASE_PATH目錄下(你的Bundler所在目錄,定位方法參見Cygwin指令),然後輸入下面的命令:./RunBundler.sh examples/ET 或者:./RunBundler.sh examples/Kermit
./RunBundler.sh examples/ET ./RunBundler.sh examples/Kermit
圖27.Bundler輸出的結果(目錄bundle)
4.後續工作
Bundler輸出的檔案大多以“bundle_*.out”的形式來命名,我們稱之為“bundle檔案”。預設命令下,Bundler在每張圖片經過分析和註冊(register)後都會輸出一個相應的bundle檔案用來儲存當前的狀態資訊,並以“bundle_<n>.out”的形式命名。當所有的檔案都註冊後,Bundler就會輸出一個最終的檔案“bundle.out”。另外,每一回合結束時還會緊接著產生一些尾碼名為“ply”的檔案,這些檔案包含的是經過重建後的相機和點的資訊。這些ply檔案可以通過使用專用的查看器scanalyze來查看,地址為:http://graphics.stanford.edu/software/scanalyze/。當然也可以通過meshlab來查看,為:http://meshlab.sourceforge.net/。
利用Bundler可以得到較為稀疏的點雲(pointclouds)資料。如果需要得到更密集的點,可以使用Yasutaka Furukawa博士寫的另外一個非常強大的軟體包,稱為PMVS2,下載:http://grail.cs.washington.edu/software/pmvs/。一種比較常見的途徑是使用Bundler來得到相機參數,然後使用Bundle2PMVS程式,將產生結果轉換為PMVS2的輸入,然後使用PMVS2來得到更密集的點雲。另外,讀者們可能會對另外一個同樣由Furukawa博士開發的工具 + 生產力——CMVS感興趣,CMVS是一個情境聚類程式,在使用PMVS2前可以使用它來進行一些預先處理,下載:http://grail.cs.washington.edu/software/cmvs/。
轉自:http://m.blog.csdn.net/blog/u010069101/23294019#
【轉】win7 64位配置bundler-v0.4-source