蘇龍生,古天馳,李曉東
(佛山科學(xué)技術(shù)學(xué)院 電子信息工程學(xué)院,廣東 佛山 528000)
全景圖是VR中一種實(shí)際場(chǎng)景表示方法,通常要獲得高質(zhì)量的全景圖需要購(gòu)買昂貴的專用拍攝設(shè)備,并且設(shè)備需要專業(yè)人員精確地校準(zhǔn),因此獲取全景圖成本高。用普通相機(jī)圖像拼接生成全景圖是一種比較靈活方便、成本低廉的方法,用戶甚至可以通過(guò)調(diào)整參數(shù)來(lái)調(diào)整最終效果。
在VR全景拼接技術(shù)中,其核心是全景圖像的拼接算法。目前人們比較常用的全景圖拼接算法中通常包括特征提取[1],特征點(diǎn)匹配[2],單應(yīng)性矩陣計(jì)算[3]及重疊圖像融合[4]等算法。目前常用的全景拼接軟件很多,例如Ptgui、Autopano Giga和PanoramicVR等,這些軟件在圖像拼接時(shí)偶爾會(huì)出現(xiàn)拼接配準(zhǔn)不佳,圖片縫合線錯(cuò)亂等問(wèn)題,人工對(duì)其進(jìn)行調(diào)整參數(shù)不方便。另外,由于拼接圖像提取的特征點(diǎn)數(shù)量很多,維度高,進(jìn)行特征點(diǎn)配對(duì)時(shí)計(jì)算量非常大,導(dǎo)致拼接過(guò)程比較耗時(shí)。針對(duì)以上問(wèn)題,我們研究了一種SIFT+RANSAC,利用特征篩選和多維索引樹(shù)KDG-tree[5],實(shí)現(xiàn)對(duì)圖像的快速拼接。
本算法的核心思路是通過(guò)SIFT算法來(lái)獲取拼接圖片的特征點(diǎn)[6],利用KDG-tree建立多維索引來(lái)快速完成特征比對(duì),RANSAC算法建立帶有錯(cuò)誤特征點(diǎn)的擬合迭代模型[7],在RANSAC中增加自適應(yīng)特征點(diǎn)篩選算法[8],準(zhǔn)確篩選出含有噪聲數(shù)據(jù)的點(diǎn),設(shè)置生成圖像的局部特征點(diǎn)閾值,然后利用此閾值比較來(lái)檢測(cè)相似特征點(diǎn),計(jì)算描繪出特征描述符,之后在廣義緊互對(duì)原型的基礎(chǔ)上,相應(yīng)調(diào)整圖像匹配相似時(shí)最近距離與次近距離的比值的閾值來(lái)控制相互匹配相似成功的點(diǎn)對(duì)數(shù),最后將RANSAC算法和最小二乘法結(jié)合計(jì)算找出兩幅圖像之間的正確映射關(guān)系,然后根據(jù)關(guān)系提取所有類似點(diǎn)形成點(diǎn)集[9]。
在圖像特征提取算法中,可以選用的特征比較多,但在圖像匹配中通常采用具有尺度不變性和旋轉(zhuǎn)不變性的SIFT、SURF或ORBSIFT等。SIFT算法核心可理解為將原模型切割分離成多個(gè)特征點(diǎn),提取關(guān)鍵特征點(diǎn)集,提取的關(guān)鍵特征點(diǎn)不受平移、旋轉(zhuǎn)、放大縮小、光照照射角度和投影變化等影響[10]。SIFT算法的最基礎(chǔ)應(yīng)用為在不同尺度空間上查找特征點(diǎn),拼接覆蓋特征點(diǎn),形成融合且平滑的相似模型。
(1)尺度空間。尺度空間是在二維平面中模擬人眼視角觀察模型的概念與方法,可表示為:
式中:L(x,y,σ)表示原圖像I(x,y)與一個(gè)可變尺度的2維高斯函G(xi,yi,σ)的卷積運(yùn)算;*表示卷積運(yùn)算;(x,y)代表圖像的角點(diǎn)位置;σ是尺度空間因子。
(2)特征點(diǎn)的準(zhǔn)確定位與特征點(diǎn)的方向確定。特征點(diǎn)方向由尺度不變性求取確定,檢索圖片的部分圖像為特征點(diǎn)賦予初始方向,使描述子對(duì)圖片旋轉(zhuǎn)具有穩(wěn)定性[11]。對(duì)于在DOG金字塔中檢測(cè)出的關(guān)鍵點(diǎn),采集其所在高斯金字塔圖像3σ鄰域內(nèi)像素因子的梯度和方向分布特征。梯度的模值和方向如下:
SIFT算法為避免目標(biāo)圖片保留到包含過(guò)多噪點(diǎn)數(shù)據(jù)的特征,可借助高斯核函數(shù)排除過(guò)多噪點(diǎn)數(shù)據(jù),錯(cuò)誤特征點(diǎn)會(huì)相應(yīng)減少,最后借助少量正確特征點(diǎn)去模擬出原始圖片中正確特征點(diǎn)集。
(3)高斯核函數(shù)定義為:
式中:x′為核函數(shù)中心;‖x-x′‖2為向量x′和向量x′的歐式距離(L2范數(shù)),向量距離單調(diào)遞增,高斯核函數(shù)單調(diào)遞減;σ控制高斯核函數(shù)作用范圍。
單應(yīng)性矩陣是將一個(gè)平面內(nèi)的點(diǎn)映射到另一個(gè)平面內(nèi)的二維投影矩陣,可以實(shí)現(xiàn)經(jīng)透視變換將圖像原始視圖投影到目標(biāo)視圖。單應(yīng)性矩陣在建立尺度空間、找尋圖像縫合線、紋理扭曲和創(chuàng)建全景圖像中起著決定性的作用。單應(yīng)性矩陣定義H如下:
式中,M是內(nèi)參矩陣;
式中:x為尺度因子;gx、gy、γ、u0、v0為5個(gè)相機(jī)內(nèi)參;t為相機(jī)外參。
改進(jìn)RANSAC算法是用來(lái)排除正確模型中的錯(cuò)誤數(shù)據(jù)后進(jìn)行擬合的迭代方法。RANSAC的算法核心思想是隨機(jī)性和假設(shè)性,隨機(jī)性是根據(jù)正確數(shù)據(jù)出現(xiàn)概率去隨機(jī)選取模型數(shù)據(jù),假設(shè)性是假設(shè)選取出的隨機(jī)數(shù)據(jù)都是正確數(shù)據(jù),然后使用正確數(shù)據(jù)演算問(wèn)題建立正確的模型,從而推算得到剩余點(diǎn),最后統(tǒng)計(jì)比較得出最為接近精確的數(shù)據(jù)集。
式中:(x,y)為預(yù)定圖片的落點(diǎn)坐標(biāo);(x′,y′)為中心場(chǎng)景圖片角點(diǎn)坐標(biāo);S為尺度參數(shù)。
RANSAC算法向預(yù)定數(shù)據(jù)集中隨機(jī)選取出4個(gè)數(shù)據(jù)(注意這4個(gè)數(shù)據(jù)之間不得共線),然后計(jì)算生成對(duì)應(yīng)單應(yīng)性矩陣,再重復(fù)如上步驟計(jì)算得出其余單應(yīng)性矩陣直至預(yù)定數(shù)據(jù)集中所有數(shù)據(jù)都被檢索,最后計(jì)算符合該模型的正確數(shù)據(jù)個(gè)數(shù)與對(duì)應(yīng)函數(shù),明確對(duì)應(yīng)函數(shù)的值最小時(shí),該模型為最優(yōu)模型。
RANSAC算法的工作流程如圖1所示。
圖1 RANSAC算法流程圖
在實(shí)際應(yīng)用中,應(yīng)用于單應(yīng)性變換的數(shù)據(jù)十分冗雜(包含大量噪聲數(shù)據(jù)),容易出現(xiàn)特征點(diǎn)匹配錯(cuò)誤的現(xiàn)象。但只使用隨機(jī)4個(gè)點(diǎn)對(duì)來(lái)計(jì)算單應(yīng)矩陣,也會(huì)造成較大誤差。為保證單應(yīng)性矩陣正確率,先挑選出較多符合參數(shù),再應(yīng)用RANSAC算法篩選出具有一致性的部分?jǐn)?shù)據(jù),即可在保證高效的同時(shí)找到單應(yīng)性矩陣最優(yōu)解。
KDG-tree是利用多維空間的非空點(diǎn)通過(guò)二維指針(橫、縱指針)鏈接起來(lái),構(gòu)成一顆動(dòng)態(tài)不平衡的二叉索引樹(shù),KDG-tree算法特點(diǎn)是從k維最簡(jiǎn)樹(shù)開(kāi)始搭建,中心節(jié)點(diǎn)為主要索引節(jié)點(diǎn),葉子為包含噪點(diǎn)數(shù)據(jù)的數(shù)據(jù)節(jié)點(diǎn)。
KDG-tree有效避免大量高維數(shù)據(jù)集“逐條”比對(duì)時(shí)效率低下,采用KDG-tree索引是可能出現(xiàn)的維度災(zāi)難。減少無(wú)效數(shù)據(jù)的比對(duì)占用過(guò)多運(yùn)算資源問(wèn)題,加快了特征點(diǎn)進(jìn)行比對(duì)的速度。因此當(dāng)特征點(diǎn)數(shù)呈現(xiàn)規(guī)模較大和計(jì)算維度很高時(shí),采用KDG-tree作為索引是一個(gè)不錯(cuò)的選擇,保證進(jìn)行全景圖拼接時(shí)運(yùn)行系統(tǒng)能順利進(jìn)行,避免出現(xiàn)“運(yùn)行崩潰”現(xiàn)象。
在圖像拼接時(shí),需要輸入一組待拼接圖像,這些圖像要求是在同一場(chǎng)景下不同角度拍攝的。算法首先對(duì)輸入的圖像進(jìn)行特征提取,然后進(jìn)行圖像特征點(diǎn)的比對(duì),找到對(duì)應(yīng)的特征點(diǎn)對(duì),計(jì)算單應(yīng)性矩陣,最后生成融合全景圖。其算法流程如圖2所示。
圖2 圖像拼接流程圖
在特征比對(duì)和計(jì)算單應(yīng)性矩陣時(shí),我們?cè)谙鄳?yīng)Python類中實(shí)現(xiàn)了fit()和get_error()函數(shù),fit()函數(shù)將提取的4個(gè)對(duì)應(yīng)點(diǎn)對(duì)并建立相應(yīng)的單應(yīng)性矩陣,然后應(yīng)用get_error()函數(shù)對(duì)對(duì)應(yīng)點(diǎn)對(duì)進(jìn)行計(jì)算,再返回對(duì)應(yīng)的平方距離和。我們?cè)趯?shí)際操作中需要在多個(gè)get_error()函數(shù)返回的值中進(jìn)行分析比較篩選,推斷建成的單應(yīng)性矩陣合理性,必要時(shí)調(diào)整閾值。
在拼接完成后,在VR場(chǎng)景下,通常還需要通過(guò)“圖片扭曲”技術(shù)將同一視位的中心與鄰接圖片扭曲成360度的平滑全景圖[12]。
根據(jù)以上算法思想,我們編寫(xiě)了算法測(cè)試程序,編程環(huán)境為windows10+Python2.7。在測(cè)試程序中通過(guò)輸入一組不同角度拍攝的同一場(chǎng)景的圖像,能自動(dòng)完成圖像的特征提取,特征比對(duì),特征點(diǎn)映射和圖像融合等過(guò)程,并可以根據(jù)拼接效果調(diào)整參數(shù)。如圖3(a)、(b)所示是不同角度的圖像和其特征點(diǎn)匹配情況。
從圖3可以看出,相鄰圖像的特征點(diǎn)配對(duì)準(zhǔn)確,只有極少數(shù)的點(diǎn)配對(duì)錯(cuò)誤。從圖4的實(shí)驗(yàn)結(jié)果可以看出,采用以上算法可以使多張圖片拼接融合生成全景圖,得到的拼接圖像拼接準(zhǔn)確,圖像比較清晰,實(shí)現(xiàn)了算法目標(biāo)。盡管有少量的特征點(diǎn)配對(duì)錯(cuò)誤,但對(duì)最終拼接的效果幾乎沒(méi)有影響,因此算法比較穩(wěn)定,受圖像噪聲干擾小。
圖3 拍攝圖片與鄰接圖片特征點(diǎn)連接(左右兩角度)
圖4 拼接后生成的全景圖
本文研究的VR全景圖拼接算法,能較好地解決目標(biāo)圖像特征點(diǎn)的假設(shè)和隨機(jī)提取的問(wèn)題,排除了大部分特征點(diǎn)集中的噪點(diǎn)數(shù)據(jù),通過(guò)增加多維索引樹(shù)KDGtree提高了特征點(diǎn)比對(duì)匹配的效率,算法有較高的穩(wěn)定性,并且可以根據(jù)需要調(diào)整閾值參數(shù),能較好地滿足實(shí)際工程問(wèn)題的需求。