本人按照
http://blog.csdn.net/zzzblog/article/details/17166869
http://oliver.zheng.blog.163.com/blog/static/1424115952011915113138431/這兩篇文章運行,發現在我的電腦上有些地方運行不對。所以我按照我能運行的步驟重新寫一下。
本人電腦是WIN8,64位操作系統。交代完畢,下面開始。(紅色部分是需要特別注意的地方,以及我認為需要改進的地方,加上更多的圖,方便使用)
Bundler是Noah Snavely博士寫的Structure from Motion的工具包。它能夠通過對某個場景不同角度的多張圖片生成稀疏點的三維信息,並且估計每一幅圖片的相機參數(內參和外參)。Bundler屬於SFM的范疇。
PMVS和CMVS(CMVS是PMVS的改進版,里面包含PMVS)是Yasutaka Furukama博士寫的已知一組圖片和圖片對應的相機參數生成dense reconstruction (稠密的三維模型)。
Bundler的配置:
Bundler的配置有兩種途徑:1)通過makefile;2)通過VS。這里我不建議用VS配置。因為VS配置出來的少了一個Bundle2Vis.exe。而且代碼幾個錯誤需要改,比較麻煩,如果一定想在VS下配置,請參考:http://blog.csdn.net/halfwet/article/details/6973918。但是在Bundler2PMVS中,我將//mkdir(output_path,0770)修改成mkdir(output_path)而不是博客所說的_mkdir(output_path),才成功的。
(1) 下載並安裝CYGWIN(下載地址: http://cygwin.com), 安裝時選擇全部安裝, 大約要用掉16G硬盤空間.
(2) 下載並解壓Bundler源碼bundler-v0.4-source.tar.gz(下載地址:http://phototour.cs.washington.edu/bundler/), 假設
Bundler的安裝位置在/bundler
(3) 編譯Bundler
在編譯之前請大家在/src打開Bundle2PMVS.cpp將217行的
$ cd E:/bundler
$ make
(在編譯到BundlerApp.h文件第620行, 出現錯誤: 不能直接調用構造函數'SkeletalApp::BundlerApp')該頭文件在/bundler/src目錄中, 注釋掉該行, 繼續make, 可以通過編譯此次make共生成bundler.exe, Bundle2PMVS,exe, BundleVis.exe, KeyMatchFull.exe, RadialUndistort.exe, libANN_char.dll, 都放置在/bundler/bin目錄下。
(4) 下載SIFT(下載地址: http://www.cs.ubc.ca/~lowe/keypoints/siftDemoV4.zip), 解壓后將其中的siftWin32.exe拷貝到/bundler/bin, 這個siftWin32.exe會被Bundler調用作為特征點探測器。
(5) 運行Bundler
Bundler里面有兩個examples,里面存放了若干不同視角的圖片,我們使用其中的一個example kermit。
$ cd E:/bundler
$ mkdir result(建立result文件夾,存放輸出結果)
$ cd result(進入result文件夾)
$ ../RunBundler.sh ..examples/kermit (注: ../examples/kermit指明用於進行多視角重建的圖像所在目錄)此時已經運行完Bundler, 在./bundle/bundle.out文件里有重建的稀疏點3D坐標和相機參數, 具體說明參見/bundler/readme.txt。
這樣/bundler會生成兩個文件夾/bundle和/prepare。

(注意紅線里的“..”的個數,這里面涉及到目錄問題)

(6) 將Bundler的輸出轉換為CMVS-PMVS2的輸入
Bundler會生成一個Bundle2PMVS.exe用於將Bundler生成的結果轉化成CMVS要求的輸入。注意這里的操作一定是在bundler的根目錄下面。否則后面生成的目錄文件會有錯
$ ../bin/Bundle2PMVS.exe prepare/list.txt bundle/bundle.out(前面也是兩個點,看下圖紅線以內,第一次我就是少了一個點,出錯了)

此時生成了pmvs子目錄, 編輯里邊的prep_pmvs.sh(用到工具EditPlus 3,網上可以搜到), 指明BUNDLE_BIN_PATH路徑來尋找RadialUndistort.exe和Bundle2Vis.exe。注意我們用的是Cygwin所以改BUNDLE_BIN_PATH要注意目錄的格式,比如我的Bundler在E盤根目錄,那么BUNDLER_BIN_PATH=/cygdrive/e/bundler/bin(地址不能有空格)
(7) 完成最后的轉換$ ./pmvs/prep_pmvs.sh
在pmvs目下生成txt, visualize, models目錄和bundle.rd.out, list.rd.txt, vis.dat, pmvs_options.txt文件, 這些都是PMVS2的輸入。pmvs子目錄的文件如下圖:

CMVS-PMVS的配置:
Yasutaka Furukama網站上提供的CMVS是基於Linux上的比較。好在有個人將它轉成了可以在Windows下運行的文件,見http://francemapping.free.fr/Portfolio/Prog3D/CMVS.html。
(1) 下載CMVS-PMVS並解壓縮。發現里面有一個binariesWin-Linux文件夾,里面有配置好的基於Linux,Win32,和Win64的可執行程序,將CMVS-PMVS-master\binariesWin-Linux\Win64-VS2010文件夾中的文件全部拷貝到之前的result文件夾目錄下(下圖這些文件)。
打開cmd
1.進入E盤(E:)
2.進入bundler/result文件夾下(cd E:\bundler\result)
3.輸入cmvs pmvs/

4.輸入genOption pmvs/(這一步不知道做什么的。。。)
5.pmvs2 pmvs/ option-0000(注意option之前的空格鍵)

這樣,我們發現/pmvs/models/文件夾多了幾個文件,其中*.ply文件為3D模型文件用下面的軟件可以查看。

稠密網格的顯示:
我們這里使用的是MeshLab:http://meshlab.sourceforge.net/
(1) 創建一個新的New Empty Project。
(2) File->ImportMesh,進入E:\bundler\result\pmvs\models,讀入里面的模型文件(如圖所示)

下一篇寫寫關於3D運動學的一些基礎知識
如果看到這里你還沒有很完美的獲得預期的結果,由於我很久沒有做這方面的工作,大家可以加群:336246221進行咨詢討論
