姜子鵬,卜凡亮,秦 靜
(中國人民公安大學(xué) 信息技術(shù)與網(wǎng)絡(luò)安全學(xué)院,北京 100038)
在虛擬環(huán)境中,三維重建是處理、分析和操作模型的基礎(chǔ)[1]。根據(jù)獲取場(chǎng)景的不同可將其分為基于紋理信息和基于深度信息的三維重建[2]?;谏疃刃畔⒌闹亟煞譃榻佑|式和非接觸式,非接觸式技術(shù)又有主動(dòng)和被動(dòng)掃描的區(qū)別。常見飛行時(shí)間(time of flight,ToF) 相機(jī)、激光系統(tǒng)、結(jié)構(gòu)光系統(tǒng)和 Kinect 深度傳感器等[3]均使用了非接觸式主動(dòng)掃描技術(shù)。
現(xiàn)有三維重建技術(shù)可分為實(shí)時(shí)和非實(shí)時(shí)技術(shù)。非實(shí)時(shí)技術(shù)主要有雙目視差法、明暗恢復(fù)形狀法等。因存在計(jì)算復(fù)雜、操作繁瑣等問題,以上方法并不能實(shí)時(shí)應(yīng)用于三維場(chǎng)景重建。實(shí)時(shí)三維重建技術(shù)依靠設(shè)備發(fā)出光線與物體發(fā)生反射后,通過設(shè)備接收深度信息以完成重建。目前實(shí)時(shí)三維重建技術(shù)主要有: 單激光線掃描法[4]、傅里葉變換輪廓法、彩色條紋結(jié)構(gòu)光法等。實(shí)時(shí)三維重建算法效率高,處理數(shù)據(jù)量小,能有效處理噪聲。目前能用于實(shí)時(shí)三維重建的設(shè)備有基于結(jié)構(gòu)光的 Kinect[5]、基于Time of Flight的Camcube[6]和 Mesa Imaging Swiss Ranger 4000[7]。
針對(duì)三維重建的技術(shù)方法,國內(nèi)外學(xué)者進(jìn)行了大量研究。劉利剛等[8]采用一種實(shí)用性方法對(duì)不同視角下的不同身體部位進(jìn)行配準(zhǔn),利用多個(gè)外設(shè)協(xié)調(diào)工作實(shí)現(xiàn)對(duì)動(dòng)態(tài)和靜態(tài)人體三維重建。劉鑫等[9]給出一種物體快速重建方法,借助圖形顯卡GPU,提出一種簡(jiǎn)單易用的粗標(biāo)定方法和全自動(dòng)快速物體重建方法。針對(duì)Kinect Fusion 需要大量 GPU存儲(chǔ)空間的問題,曾鳴[10]提出一種基于八叉樹的數(shù)據(jù)結(jié)構(gòu),并在數(shù)據(jù)節(jié)點(diǎn)存儲(chǔ)符號(hào)距離函數(shù),在八叉樹結(jié)構(gòu)的基礎(chǔ)上,重建更新和表面預(yù)測(cè),從而高效利用 GPU 的并行計(jì)算能力。Rushmeier等[11]將基于深度圖像的三維重建過程分為幾何處理和面的表示。Peter Henry等[12]利用SIFT特征匹配定位和TORO優(yōu)化算法,設(shè)計(jì)了一種實(shí)時(shí)視覺SLAM系統(tǒng)。Fiorairo等[13]提出了RGB-D SLAM算法,使用 Hogman優(yōu)化算法和SURF特征匹配搭建實(shí)時(shí)性高、魯棒性強(qiáng)的重建系統(tǒng)。Harris 等[14]首次提出角點(diǎn)的定義。Shi等[15]在此基礎(chǔ)上進(jìn)行改進(jìn),提出一種效果更好的角度提取方法。目前使用比較廣泛的特征點(diǎn)提取和匹配方法是SIFT(scale-invariant feature transform)方法[16]。
本文結(jié)合現(xiàn)有研究課題,聚焦于PCL環(huán)境搭建過程及點(diǎn)云庫在三維重建中的應(yīng)用,以SIFT算法為基礎(chǔ),結(jié)合FLANN算法,對(duì)圖像進(jìn)行特征提取與匹配,以提高特征匹配效率。
點(diǎn)云庫,全稱Point Cloud Library (PCL)[17],是一個(gè)既可以單獨(dú)使用又可以作為輔助工具的工程,本質(zhì)是一個(gè)開源C++編程庫,可以在Windows和Linux等操作系統(tǒng)上運(yùn)行。點(diǎn)云庫常被用于處理點(diǎn)云數(shù)據(jù)和二維或三維圖像。建立點(diǎn)云庫的最初目的是為三維點(diǎn)云數(shù)據(jù)處理和ROS[18]研究及應(yīng)用建立一個(gè)基礎(chǔ)架構(gòu)。PCL第一個(gè)基礎(chǔ)算法是由Dr. Rusu開發(fā),于2009年由Willow Garage公司進(jìn)一步開發(fā)完成。若OpenCV[19]是二維信息獲取與處理的結(jié)晶,則點(diǎn)云庫在三維信息獲取與處理上具有同等地位。
PCL將三維重建和點(diǎn)云數(shù)據(jù)處理中所有常見功能整合在一起,保證了算法緊湊性和結(jié)構(gòu)清晰性,提高了算法代碼簡(jiǎn)潔性[20]。PCL功能如圖1所示。
圖1 PCL功能模塊
PCL模塊功能[21]包括:① Common模塊包含常用庫,提供常用函數(shù);②Filters模塊,去除噪音點(diǎn),為特征提取等過程提供過濾器;③Features模塊,實(shí)現(xiàn)邊界點(diǎn)估計(jì), 計(jì)算NARF描述子等;④ Keypoints模塊,實(shí)現(xiàn)關(guān)鍵點(diǎn)提取,決定在何處提取特征描述符;⑤Registration模塊,實(shí)現(xiàn)點(diǎn)云的配準(zhǔn)方法;⑥Kd-tree模塊,實(shí)現(xiàn)基于FLANN的KD樹最近鄰搜索;⑦Oc-tree模塊,實(shí)現(xiàn)基于八叉樹最近鄰搜索;⑧Segmentation模塊,實(shí)現(xiàn)點(diǎn)云分割提??;⑨ Sample Consensus模塊,對(duì)點(diǎn)云進(jìn)行擬合;⑩Surface模塊,實(shí)現(xiàn)表面重建技術(shù);Range Image模塊,深度圖,由Kinect獲取后可轉(zhuǎn)換為點(diǎn)云;IO模塊,實(shí)現(xiàn)PCD (Point Cloud Data) 文件的讀寫和數(shù)據(jù)輸入輸出;Visualization模塊, 實(shí)現(xiàn)基于VTK依賴庫的三維可視化。
本文編譯環(huán)境為Microsoft Visual Studio 2010,操作系統(tǒng)分別是32位Windows 7和64位 Windows 10,不適用于其它編譯環(huán)境。
2.1.1 預(yù)編譯包介紹
預(yù)編譯包是一個(gè)集成了PCL中第三方依賴庫的安裝包,因依賴庫被提前編譯過,安裝后即可直接使用。
為方便初學(xué)者在最短時(shí)間內(nèi)體驗(yàn)到PCL的強(qiáng)大功能,PCL官方網(wǎng)站為Windows用戶提供了經(jīng)典PCL 1.6.0版本及其相應(yīng)PDB(程序數(shù)據(jù)庫)文件下載。適合該版本PCL的運(yùn)行系統(tǒng)是編程兼容性最強(qiáng)的Windows7(32位)操作系統(tǒng)。PCL預(yù)編譯包如圖2所示。
圖2 PCL預(yù)編譯包
2.1.2 預(yù)編譯包安裝
安裝預(yù)編譯包時(shí),需要注意運(yùn)行版本的選擇,否則安裝時(shí)系統(tǒng)可能因不兼容而報(bào)錯(cuò)。因?yàn)轭A(yù)編譯包中的OpenNI版本老舊,所以為保證能在PCL配置完成后,順利通過外接設(shè)備(Kinect)獲得包含點(diǎn)距離信息的深度圖像,需要另外安裝最新的OpenNI(開放式自然交互)相關(guān)組件。本文選擇安裝的32位PCL1.6.0版本安裝包以及OpenNI相關(guān)組件如下所示:
PCL-1.6.0-AllInOne-msvc2010-win32.exe
OpenNI-Win32-1.5.4-Dev.msi
Sensor-Win-OpenSource32-5.1.0.msi
安裝預(yù)編譯包時(shí)選好安裝路徑,推薦選擇默認(rèn)的3個(gè)安裝包安裝目錄,以便系統(tǒng)自動(dòng)設(shè)置環(huán)境變量及安裝路徑,然后按照指示完成安裝。預(yù)編譯包及相關(guān)組件安裝完成后,手動(dòng)下載圖2顯示的PDB(程序數(shù)據(jù)庫)文件,再解壓到預(yù)編譯包安裝目錄的“bin”文件夾下。
完成以上操作后,需要對(duì)OpenNI進(jìn)行運(yùn)行測(cè)試。運(yùn)行安裝目錄中的測(cè)試程序Ni- Viewer(64).exe,看到圖3所示的影像后,說明OpenNI安裝成功,能夠被PCL調(diào)用,可進(jìn)行下一步工作。
圖3 OpenNI運(yùn)行示例
2.1.3 環(huán)境變量設(shè)置
一般情況下,預(yù)編譯包安裝完成后,系統(tǒng)變量會(huì)被自動(dòng)設(shè)置,如果沒有,可以手動(dòng)添加。在系統(tǒng)變量里添加“PCL_ROOT:(你的PCL的安裝路徑)”,在系統(tǒng)變量Path里加入:%PCL_ROOT%in。
2.1.4 包含目錄設(shè)置
本文PCL安裝在C盤。首先,在VS新建一個(gè)項(xiàng)目,在屬性管理器中找到VC++的包含目錄,添加第三方依賴庫頭文件夾路徑。第三方依賴庫“include”頭文件夾可在PCL安裝目錄中“3rdParty”文件夾中找到,見圖4。
圖4 頭文件路徑添加
2.1.5 庫目錄設(shè)置
在新建項(xiàng)目的屬性管理器中找到VC++選項(xiàng),在其庫目錄中添加 C:Program Files PCL 1.6.0lib等第三方依賴庫靜態(tài)鏈接庫的路徑。第三方依賴庫“l(fā)ib”庫文件夾也可在PCL安裝目錄的“3rdParty”文件夾中找到,見圖5。
圖5 庫文件路徑添加
2.1.6 附加依賴項(xiàng)設(shè)置
添加附加依賴項(xiàng),將本文安裝的幾個(gè)第三方依賴庫靜態(tài)鏈接庫名稱全部添加到“工程屬性頁→鏈接器→輸入項(xiàng)”中,見圖6。第三方依賴庫靜態(tài)庫可以在相應(yīng)安裝目錄下的“l(fā)ib”文件夾中找到。
圖6 靜態(tài)庫添加
由于需要添加靜態(tài)鏈接庫的數(shù)量過多,所以無法一一列舉,只能以截圖的方式顯示部分添加的靜態(tài)鏈接庫,見圖7。需要添加的靜態(tài)鏈接庫數(shù)量為199個(gè),圖7展示的只是其中的22個(gè),其余靜態(tài)庫未被展示。
圖7 部分靜態(tài)鏈接庫
本文推薦利用第三方庫編譯包從源碼搭建PCL,雖然沒有利用PCL預(yù)編譯包直接安裝的便捷,但比手動(dòng)編譯第三方依賴庫和源代碼簡(jiǎn)單、省時(shí)。這種配置方法一方面繼承了源碼搭建的優(yōu)點(diǎn)——既可了解源代碼編譯工作原理和過程,另一方面又克服了預(yù)編譯包只能安裝特定PCL版本的缺點(diǎn),能夠在允許范圍內(nèi)隨意切換PCL源代碼版本進(jìn)行編譯,隨時(shí)補(bǔ)充和更新PCL功能。
2.2.1 第三方依賴庫安裝
搭建過程必備的第三方依賴庫有:用于共享指針和線程的Boost(C++半標(biāo)準(zhǔn)庫)[22];用作SSE優(yōu)化數(shù)學(xué)的矩陣后端Eigen(矩陣類庫)[23];基于KD樹中的快速近似最近鄰搜索的FLANN(近似最近鄰搜索庫);用于三維點(diǎn)云渲染和可視化的VTK(可視化工具包)[24]。
另外,可以選擇性安裝的依賴庫有:用于曲面上凸凹?xì)し纸獾腝Hull(計(jì)算幾何庫);OpenNI (RGB-D傳感器庫);具有圖形用戶界面的應(yīng)用程序Qt。
第三方依賴庫有多個(gè)版本,需要選擇跟操作系統(tǒng)、編譯環(huán)境和PCL相匹配的版本,才能保證PCL順利配置。本文系統(tǒng)環(huán)境參數(shù)包括:①操作系統(tǒng),64位Windows 10;②編譯環(huán)境包括Microsoft Visual Studio 2010(提供Kinfu模塊);③第三方依賴庫,如圖8所示。
圖8 第三方依賴庫
2.2.2 源代碼編譯
首先獲取PCL源代碼。源代碼版本眾多,到目前為止已經(jīng)更新到PCL 1.8.1,源代碼可從GitHub官方網(wǎng)站下載。圖9為本文下載到的多個(gè)PCL版本。
圖9 源代碼的幾個(gè)不同版本
運(yùn)行CMake - GUI(見圖10)應(yīng)用程序,點(diǎn)擊“Configure(配置)”按鈕。
圖10 CMake - GUI用戶界面
本文使用Microsoft Visual C++ 2010編譯器,構(gòu)建32位PCL,可選擇“Visual Studio 10”生成器;構(gòu)建64位PCL,可選擇“Visual Studio 10 Win64”。本文選用64位PCL。
選擇生成器后,點(diǎn)擊Finish關(guān)閉對(duì)話框窗口。CMake將開始配置PCL并查找其依賴庫。CMake在尋找依賴庫時(shí)會(huì)出現(xiàn)多種找不到路徑的情況,需人工幫助尋找。
對(duì)PCL源代碼進(jìn)行Configure和 Generate,然后打開CMake生成的VS2010解決方案進(jìn)行編譯即可,對(duì)ALL-BUILD和INSTALL各Debug和Release編譯一次。Debug生成的是調(diào)試版本的程序,使用者可隨時(shí)對(duì)程序代碼進(jìn)行調(diào)試修改;Release生成的是完美編譯后封裝好的程序,無法進(jìn)行調(diào)試。建議后續(xù)使用過程中使用Release版,在使用過程中不會(huì)影響程序代碼。對(duì)所有項(xiàng)目進(jìn)行編譯需約半小時(shí)的時(shí)間消耗。
2.2.3 環(huán)境變量設(shè)置
在操作系統(tǒng)環(huán)境變量里添加系統(tǒng)變量。添加過程與預(yù)編譯包系統(tǒng)變量添加過程相同。
2.2.4 工程目錄及依賴項(xiàng)添加
在VS2010新建項(xiàng)目中的屬性管理器里添加包含目錄、庫目錄和依賴項(xiàng),添加過程同預(yù)編譯包工程目錄和依賴項(xiàng)的添加過程。
本文選擇Linux運(yùn)行平臺(tái)版本為Ubuntu16.04。
首先,打開Ubuntu終端,下載第三方依賴庫,命令行代碼見圖11。
圖11 安裝第三方庫命令行代碼
在Ubuntu終端逐行輸入圖11中的命令并運(yùn)行,在保證每一個(gè)依賴庫安裝成功后,才可進(jìn)行后續(xù)操作。
從Linux社區(qū)下載源代碼,其命令行代碼見圖12。
圖12 源代碼下載命令
源代碼文件218.43M,包含106 789個(gè)子文件。下載過程耗時(shí)較長,見圖13。
圖13 源代碼下載
完成安裝依賴庫和下載源代碼兩個(gè)準(zhǔn)備工作后,可開展編譯源代碼。按照?qǐng)D14中的5句命令逐一輸入終端并運(yùn)行,即可進(jìn)行源代碼編譯。
圖14 編譯源代碼
經(jīng)過安裝依賴庫、下載源代碼和編譯源碼步驟后,Linux平臺(tái)PCL安裝成功,如圖15、圖16所示。
圖15 安裝好的PCL模塊
圖16 PCL配置成功
4.1.1 FLANN 特征緊鄰像素匹配
近鄰搜索問題在圖像識(shí)別和數(shù)據(jù)分析等各種應(yīng)用中具有重要意義。但是,沒有一種算法比標(biāo)準(zhǔn)的蠻力搜索能更好地在高維度空間中解決該問題。Muja & Lowe[25]于2009年提出了基于K均值樹[26]或KD樹[27]搜索的FLANN算法,該算法可以根據(jù)數(shù)據(jù)集或點(diǎn)云分布特點(diǎn)推薦建立索引類型。FLANN (近似最近鄰快速庫)是用C++編程語言編寫、用于執(zhí)行快速近似最近鄰搜索的庫。同時(shí),F(xiàn)LANN算法在高維空間最近鄰查找中不會(huì)受到局部敏感哈希[28]影響。該算法運(yùn)用的特征空間是向量空間Rn(n維),其重點(diǎn)在于使用歐幾里得距離[29]找到目標(biāo)點(diǎn)鄰近點(diǎn)。特征點(diǎn)g和特征點(diǎn)k的特征分向量可以分別記為Dg和Dk,歐氏距離d(g,k) 可以表示為:
d(g,k) =
(1)
本文首先利用 KD樹將二維圖像數(shù)據(jù)點(diǎn)劃分為幾個(gè)特定部分,目的是在KD樹結(jié)構(gòu)中尋找與目標(biāo)點(diǎn)距離最近的歐氏距離。將所有檢索到的歐氏距離d(g,k)通過KD樹存儲(chǔ),然后可有效搜索到與目標(biāo)點(diǎn)距離最近的點(diǎn)。整個(gè)搜索過程是一個(gè)自上而下的遞歸過程,將查詢點(diǎn)和分割點(diǎn)的值進(jìn)行循環(huán)比較,判別查詢點(diǎn)在左區(qū)域還是右區(qū)域,再進(jìn)行循環(huán)和對(duì)應(yīng)分割點(diǎn)比較,直到搜索成功為止。
4.1.2 SIFT匹配算法
Lowe[[30]于2004年提出了一種具有劃時(shí)代意義的高效局部特征算法—SIFT(Scale Invariant Feature Transform)算法。在不同尺度空間中尋找特征點(diǎn)進(jìn)行描述,最后進(jìn)入算法核心的匹配環(huán)節(jié)。因此可以將SIFT算法概括成以下步驟(見圖17):
圖17 SIFT算法流程
(1)搜索特征點(diǎn)。根據(jù)尺度空間理論[[31],在圖像多尺度空間中尋找并確認(rèn)每一個(gè)尺度空間里對(duì)應(yīng)極值點(diǎn),獲得極值點(diǎn)所在位置的像素坐標(biāo),這些坐標(biāo)包含備選特征點(diǎn)位置信息。剔除低對(duì)比度的極值點(diǎn)和易受噪聲干擾的備選特征點(diǎn),得到被篩選過的特征點(diǎn)集。
(2)詳細(xì)描述提取的特征點(diǎn)。對(duì)特征點(diǎn)的鄰域進(jìn)行梯度加權(quán)計(jì)算,得到對(duì)應(yīng)的鄰域梯度幅度值和方向,利用直方圖方法獲取每個(gè)鄰域梯度主幅度值和主方向;然后再通過計(jì)算得到以該特征點(diǎn)為中心像素點(diǎn)的梯度主幅度值和主方向,利用特征描述向量描述該特征點(diǎn)。
(3)關(guān)鍵點(diǎn)匹配。對(duì)于兩個(gè)匹配特征點(diǎn)存在最鄰近匹配對(duì)與次鄰近匹配對(duì),將最鄰近歐式距離與次鄰近歐式距離進(jìn)行相比,若比值小于某一設(shè)定閾值則為正確匹配。最后采用RANSAC算法[ [32]對(duì)點(diǎn)對(duì)進(jìn)行進(jìn)一步優(yōu)化。
4.1.3 實(shí)驗(yàn)過程
利用Kinect獲取兩張RGB圖像(見圖18、圖19),作為初始輸入圖像。
圖18 RGB1
圖19 RGB2
圖19是彩色攝像機(jī)在圖18的視角基礎(chǔ)上向右平移后拍攝的圖像。
首先,使用SIFT算法,利用關(guān)鍵點(diǎn)周圍的像素,計(jì)算關(guān)鍵點(diǎn)描述子以便對(duì)關(guān)鍵點(diǎn)進(jìn)行描述,計(jì)算參數(shù)為關(guān)鍵點(diǎn)半徑及角度。特征描述子不是單純的標(biāo)量,還是一個(gè)矩陣,一個(gè)特征向量為一行。當(dāng)兩個(gè)特征點(diǎn)越相似,其描述子也越相似。圖20是對(duì)初始RGB1圖像進(jìn)行特征描述子計(jì)算后的輸出圖像。
圖20 RGB1特征描述子選取
圖21 特征描述子粗匹配
然后,使用FLANN搜索匹配算法對(duì)已經(jīng)計(jì)算出來的特征描述子進(jìn)行匹配(見圖21)。經(jīng)過對(duì)關(guān)鍵點(diǎn)特征描述子粗匹配后,總共得到620對(duì)匹配點(diǎn)對(duì)。從結(jié)果可以看出,僅依靠描述子匹配得到的結(jié)果繁多,且把許多并不相似的點(diǎn)對(duì)也進(jìn)行了匹配。
針對(duì)不相似點(diǎn)對(duì)過多的問題,本文首先進(jìn)行一次篩選,去除第一類誤匹配情況,即去掉相距距離太大的點(diǎn)對(duì)。篩選原則是去掉大于4倍最小距離的點(diǎn)對(duì)。經(jīng)過一次剔除處理,錯(cuò)誤的匹配對(duì)明顯減少(見圖22),與圖21特征描述子粗匹配相比,輸出的圖像干凈整潔了許多,處理后的關(guān)鍵點(diǎn)特征匹配點(diǎn)對(duì)驟降為128對(duì)。第一次篩選處理剔除了492對(duì)無關(guān)匹配,降低了后續(xù)處理的工作量,節(jié)約了時(shí)間。
圖22 一次處理后匹配點(diǎn)對(duì)
圖23 二次處理得到的特征點(diǎn)對(duì)
通過細(xì)致觀察可以發(fā)現(xiàn),兩個(gè)RGB源圖像之間只發(fā)生了水平方向旋轉(zhuǎn),所以正確的匹配線應(yīng)該是水平的,非水平匹配線為誤匹配。圖22顯示出匹配點(diǎn)對(duì)存在個(gè)別錯(cuò)誤的匹配。針對(duì)出現(xiàn)的第二類誤匹配情況,可以利用PCL的RANSAC算法進(jìn)行二次篩選處理(見圖23)。
經(jīng)過二次處理,得到圖23的結(jié)果。剔除了第二類誤匹配情況后,得到了一幅含有16對(duì)特征匹配點(diǎn)對(duì)的圖像,二次處理去掉了112對(duì)誤匹配點(diǎn)對(duì)。通過觀察表1以及圖23可以發(fā)現(xiàn),利用PCL的RANSAC算法可以得到一個(gè)數(shù)量適中且較為準(zhǔn)確的關(guān)鍵點(diǎn)特征匹配結(jié)果,并且極大降低了誤匹配率。
表1 匹配點(diǎn)對(duì)處理結(jié)果對(duì)比
但在圖23中,特征點(diǎn)對(duì)仍有2對(duì)誤匹配,這是由于兩幅RGB源圖中的關(guān)鍵點(diǎn)特征描述子過于相似導(dǎo)致的。針對(duì)圖23中出現(xiàn)的第三類誤匹配情況,還需要后續(xù)通過調(diào)整關(guān)鍵點(diǎn)搜索匹配算法、細(xì)化篩選處理標(biāo)準(zhǔn)以及相關(guān)參數(shù)解決該問題,以得到更好的匹配結(jié)果。
4.2.1 點(diǎn)云實(shí)時(shí)抓取
通過調(diào)用PCL中輸入輸出模塊(IO)的抓取函數(shù)和可視化模塊(Visualization)的點(diǎn)云查看函數(shù),實(shí)現(xiàn)外接設(shè)備通過第三方接口與編譯環(huán)境的連通,完成對(duì)空間物體的實(shí)時(shí)點(diǎn)云化處理與顯示(見圖24)。
圖24 點(diǎn)云實(shí)時(shí)顯示
圖25 PCD文件讀取
4.2.2 點(diǎn)云文件讀取與初步重建
點(diǎn)云數(shù)據(jù)以PCD(Point Cloud Data)文件(見圖25)為常用載體進(jìn)行儲(chǔ)存,PCD的內(nèi)容以ASCII碼的形式展現(xiàn),方便計(jì)算機(jī)寫入與讀取。
由未經(jīng)后期處理的原始點(diǎn)云數(shù)據(jù)重建成的三維空間圖像如圖26所示。從圖中可以看出,重建的空間模型大致輪廓存在,但是紋理信息缺失,而且還有嚴(yán)重的數(shù)據(jù)丟失,導(dǎo)致重建模型圖并不完整。
圖26 三維重建圖像
本文在Windows及Linux系統(tǒng)下完成了PCL搭建,指出了配置過程中應(yīng)注意的多個(gè)事項(xiàng),為尚在PCL環(huán)境搭建初學(xué)者提供了有效參考。同時(shí),在采用傳統(tǒng)SIFT特征點(diǎn)提取算法的基礎(chǔ)上,結(jié)合FLANN搜索匹配算法對(duì)特征點(diǎn)進(jìn)行匹配,降低了誤匹配率,取得了很好的實(shí)驗(yàn)結(jié)果,但是仍存在數(shù)量較小的誤匹配,這也是今后研究中需要解決的問題。另外,重建模型紋理細(xì)節(jié)還不夠明顯,需要后期進(jìn)一步優(yōu)化。