Bundler的安裝和配置

2021-05-28 04:59:54 字數 4524 閱讀 3824

一、什麼是bundler

bundler是乙個採用c和c++開發的稱為sfm(struct-from-motion)的系統,它能夠利用無序的集合(例如來自網路的)重建出3d的模型。最早的版本被用在photo tourism的專案上。

bundler的輸入是一些影象、影象特徵以及影象匹配資訊,輸出則是乙個根據這些影象反應的場景的3d重建模型,伴有少量識別得到的相機以及場景幾何資訊。系統借用乙個由lourakis 和argyros提供的稱為sparse bundle adjustment的開發包的修改版,一點一點遞增地重建出影象場景。bundler已經成功的應用在許多網路相簿系統,尤其是一些建築相簿裡。

三、bundler的安裝配置

在成功執行bundler前,我們需要做幾步準備工作:

cygwin的安裝比較簡單,可以參考這篇教程:

但要注意一點,bundler程式中會使用perl、python來進行一些預處理,因此在安裝過程中需要把devel、perl、python三個元件庫都選上。

3.準備。將要進行分析處理的放到乙個目錄裡,比如base_path\pictures\中(下面也統一以pictures代替目錄)。作為例子,bundler自己也提供了兩套,分別放在base_path\examples\et和base_path\examples\kermit中。

4.執行bundler。開啟cygwin,cd定位到base_path目錄下,然後輸入下面的命令:

.

/runbundler.sh pictures

關於bundler還提供了許多種命令列選項,具體的用法可以參考base_path\readme.txt檔案。

.

/runbundler.sh examples/et

或者:

.

/runbundler.sh examples

/kermit

圖2就是執行et例子的截圖:

圖2 windows下使用cygwin執行bundler的結果

linux下的安裝則簡單一些。主要的區別在於以下幾點:

1.由於linux本身支援shell,因此不需要安裝cygwin。

3.完成了上面兩步後還不夠,如果直接執行runbundler.sh指令碼,會提示圖3所示的錯誤。

圖3 提示缺少共享庫檔案錯誤

這是因為我們沒有設定好共享庫。最直接的做法是將base_path\bin目錄下的libann_char.so複製到/lib中:

$ sudo cp libann_char.so 

/lib

此時再執行一次runbundler.sh指令碼,即可順利執行完畢得到結果,如圖4所示。

圖4 linux下bundler的執行結果

四、bundler的輸出格式

我們可以在base_path\bundler目錄下找到生成的結果。如圖5所示。

圖5 bundler目錄下存放的處理結果

bundler輸出的檔案大多以「bundle_*.out」的形式來命名,我們稱之為「bundle檔案」。預設命令下,bundler在每張經過分析和註冊(register)後都會輸出乙個相應的bundle檔案用來儲存當前的狀態資訊,並以「bundle_.out」的形式命名。當所有的檔案都註冊後,bundler就會輸出乙個最終的檔案「bundle.out」。另外,每一回合結束時還會緊接著生成一些字尾名為「ply」的檔案,這些檔案包含的是經過重建後的相機和點的資訊。這些ply檔案可以通過使用專用的檢視器scanalyze來檢視,位址為:

這些bundle檔案包含了一些經過估算得到的場景和相機幾何資訊。檔案的格式如下:  

# bundle file v0.

3<

num_cameras

>

<

num_points

>

[2 integers]

<

camera1

>

<

camera2

>

...<

cameran

>

<

point1

>

<

point2

>

...<

pointm

>

每乙個camera實體的值是估算得到的相機內部和外部引數,形式為:

<

f>

<

k1>

<

k2>

[the focal length, followed by two radial distortion coeffs]

<

r>

[a 3x3 matrix representing the camera rotation]

<

t>

[a 3

-vector describing the camera translation]

每個相機的排序根據其在列表中的出現順序來指定。

每個point實體格式為:

<

position

>

[a 3

-vector describing the 3d position of the point]

<

color

>

[a 3

-vector describing the rgb color of the point]

<

view list

>

[a list of views the point

isvisible in]

其中,view list存放的是每乙個點所在的場景列表的資訊,開頭第乙個數是每個場景列表的長度資訊,然後緊接著分別是相機索引資訊、該點所在的sift關鍵點序列的索引資訊,以及該關鍵點所在的位置。

根據這些bundle檔案內容以及小孔成像模型,我們就可以大致得到每台相機的引數:

focal length (f),

two radial distortion parameters (k1and k2),

rotation (r),

translation (t)。

按照下面的法則我們可以將乙個3d點x投影到引數為(r,t,f)的相機中:

p =r 

*x +t (conversion from world to camera coordinates)

p =-

p /p.z (perspective division)

p'= f * r(p) * p (conversion to pixel coordinates)

其中,p.z是p的z座標值。r(p)是乙個用來計算出徑向畸變(radial distortion)校正的尺度變數值的函式:

r(p) 

=1.0

+k1 *||

p||^2+

k2 *||p

||^4

.

最後,利用上面的公式還可以得到相機的方向(viewing direction)為:

r

'* [0 0 -1]

'(i.e., the third row of r or third column of r')

其中,' 表示乙個矩陣或者向量的轉置,而相機的空間位置就為: 

-r

'* t .

五、總結本文介紹了如何使用bundler來根據得到相機引數以及一些空間點雲資料,並詳細介紹了它在windows和linux下的安裝和配置方法,以及輸出結果的格式。得到的資料將能夠運用在3d重建中。利用bundler可以得到較為稀疏的點雲(point clouds)資料。如果需要得到更密集的點,可以使用yasutaka furukawa博士寫的另外乙個非常強大的軟體包,稱為pmvs2。一種比較常見的途徑是使用bundler來得到相機引數,然後使用bundle2pmvs程式,將生成結果轉換為pmvs2的輸入,然後使用pmvs2來得到更密集的點雲。另外,讀者們可能會對另外乙個同樣由furukawa博士開發的實用工具——cmvs感興趣,cmvs是乙個場景聚類程式,在使用pmvs2前可以使用它來進行一些預處理。

**:

python的安裝和配置

print hello world 如果輸出 hello world 那就表明安裝成功了。下面要進行簡單的配置 開啟dos視窗,輸入python後回車,如果沒有出現 那說明你的環境變數有問題。開啟環境變數,在path裡輸入你的python安裝位置即可。下面再輸入python後回車就應該進入了pyth...

Emacs 的安裝和配置

關於emacs 的安裝和配置,網上已經有很多文章介紹,對於初學者最痛苦的莫過於解決方案分布太廣,需要一一尋找。我把各種需要用到的資料彙總一下,方便大家參考,也方便自己以後查閱。基本上下面幾個 就能滿足初學者的要求。emacs 簡單教程 中文 emacs 的簡單設定 windows 上配置emacs ...

SVN的安裝和配置

工具 1.windows 2003 sp1 2.svn 1.3.0 setup.exe svn服務端軟體 3.svnservice.exe 新增到windows服務需要的工具 4.tortoisesvn 1.4.0.7501 win32 svn 1.4.0.msi svn客戶端軟體 5.langua...