蘇龍生,古天馳,李曉東
(佛山科學技術學院 電子信息工程學院,廣東 佛山 528000)
全景圖是VR中一種實際場景表示方法,通常要獲得高質量的全景圖需要購買昂貴的專用拍攝設備,并且設備需要專業人員精確地校準,因此獲取全景圖成本高。用普通相機圖像拼接生成全景圖是一種比較靈活方便、成本低廉的方法,用戶甚至可以通過調整參數來調整最終效果。
在VR全景拼接技術中,其核心是全景圖像的拼接算法。目前人們比較常用的全景圖拼接算法中通常包括特征提取[1],特征點匹配[2],單應性矩陣計算[3]及重疊圖像融合[4]等算法。目前常用的全景拼接軟件很多,例如Ptgui、Autopano Giga和PanoramicVR等,這些軟件在圖像拼接時偶爾會出現拼接配準不佳,圖片縫合線錯亂等問題,人工對其進行調整參數不方便。另外,由于拼接圖像提取的特征點數量很多,維度高,進行特征點配對時計算量非常大,導致拼接過程比較耗時。針對以上問題,我們研究了一種SIFT+RANSAC,利用特征篩選和多維索引樹KDG-tree[5],實現對圖像的快速拼接。
本算法的核心思路是通過SIFT算法來獲取拼接圖片的特征點[6],利用KDG-tree建立多維索引來快速完成特征比對,RANSAC算法建立帶有錯誤特征點的擬合迭代模型[7],在RANSAC中增加自適應特征點篩選算法[8],準確篩選出含有噪聲數據的點,設置生成圖像的局部特征點閾值,然后利用此閾值比較來檢測相似特征點,計算描繪出特征描述符,之后在廣義緊互對原型的基礎上,相應調整圖像匹配相似時最近距離與次近距離的比值的閾值來控制相互匹配相似成功的點對數,最后將RANSAC算法和最小二乘法結合計算找出兩幅圖像之間的正確映射關系,然后根據關系提取所有類似點形成點集[9]。
在圖像特征提取算法中,可以選用的特征比較多,但在圖像匹配中通常采用具有尺度不變性和旋轉不變性的SIFT、SURF或ORBSIFT等。SIFT算法核心可理解為將原模型切割分離成多個特征點,提取關鍵特征點集,提取的關鍵特征點不受平移、旋轉、放大縮小、光照照射角度和投影變化等影響[10]。SIFT算法的最基礎應用為在不同尺度空間上查找特征點,拼接覆蓋特征點,形成融合且平滑的相似模型。
(1)尺度空間。尺度空間是在二維平面中模擬人眼視角觀察模型的概念與方法,可表示為:

式中:L(x,y,σ)表示原圖像I(x,y)與一個可變尺度的2維高斯函G(xi,yi,σ)的卷積運算;*表示卷積運算;(x,y)代表圖像的角點位置;σ是尺度空間因子。
(2)特征點的準確定位與特征點的方向確定。特征點方向由尺度不變性求取確定,檢索圖片的部分圖像為特征點賦予初始方向,使描述子對圖片旋轉具有穩定性[11]。對于在DOG金字塔中檢測出的關鍵點,采集其所在高斯金字塔圖像3σ鄰域內像素因子的梯度和方向分布特征。梯度的模值和方向如下:

SIFT算法為避免目標圖片保留到包含過多噪點數據的特征,可借助高斯核函數排除過多噪點數據,錯誤特征點會相應減少,最后借助少量正確特征點去模擬出原始圖片中正確特征點集。
(3)高斯核函數定義為:

式中:x′為核函數中心;‖x-x′‖2為向量x′和向量x′的歐式距離(L2范數),向量距離單調遞增,高斯核函數單調遞減;σ控制高斯核函數作用范圍。
單應性矩陣是將一個平面內的點映射到另一個平面內的二維投影矩陣,可以實現經透視變換將圖像原始視圖投影到目標視圖。單應性矩陣在建立尺度空間、找尋圖像縫合線、紋理扭曲和創建全景圖像中起著決定性的作用。單應性矩陣定義H如下:

式中,M是內參矩陣;

式中:x為尺度因子;gx、gy、γ、u0、v0為5個相機內參;t為相機外參。
改進RANSAC算法是用來排除正確模型中的錯誤數據后進行擬合的迭代方法。RANSAC的算法核心思想是隨機性和假設性,隨機性是根據正確數據出現概率去隨機選取模型數據,假設性是假設選取出的隨機數據都是正確數據,然后使用正確數據演算問題建立正確的模型,從而推算得到剩余點,最后統計比較得出最為接近精確的數據集。

式中:(x,y)為預定圖片的落點坐標;(x′,y′)為中心場景圖片角點坐標;S為尺度參數。
RANSAC算法向預定數據集中隨機選取出4個數據(注意這4個數據之間不得共線),然后計算生成對應單應性矩陣,再重復如上步驟計算得出其余單應性矩陣直至預定數據集中所有數據都被檢索,最后計算符合該模型的正確數據個數與對應函數,明確對應函數的值最小時,該模型為最優模型。

RANSAC算法的工作流程如圖1所示。

圖1 RANSAC算法流程圖
在實際應用中,應用于單應性變換的數據十分冗雜(包含大量噪聲數據),容易出現特征點匹配錯誤的現象。但只使用隨機4個點對來計算單應矩陣,也會造成較大誤差。為保證單應性矩陣正確率,先挑選出較多符合參數,再應用RANSAC算法篩選出具有一致性的部分數據,即可在保證高效的同時找到單應性矩陣最優解。
KDG-tree是利用多維空間的非空點通過二維指針(橫、縱指針)鏈接起來,構成一顆動態不平衡的二叉索引樹,KDG-tree算法特點是從k維最簡樹開始搭建,中心節點為主要索引節點,葉子為包含噪點數據的數據節點。
KDG-tree有效避免大量高維數據集“逐條”比對時效率低下,采用KDG-tree索引是可能出現的維度災難。減少無效數據的比對占用過多運算資源問題,加快了特征點進行比對的速度。因此當特征點數呈現規模較大和計算維度很高時,采用KDG-tree作為索引是一個不錯的選擇,保證進行全景圖拼接時運行系統能順利進行,避免出現“運行崩潰”現象。
在圖像拼接時,需要輸入一組待拼接圖像,這些圖像要求是在同一場景下不同角度拍攝的。算法首先對輸入的圖像進行特征提取,然后進行圖像特征點的比對,找到對應的特征點對,計算單應性矩陣,最后生成融合全景圖。其算法流程如圖2所示。

圖2 圖像拼接流程圖
在特征比對和計算單應性矩陣時,我們在相應Python類中實現了fit()和get_error()函數,fit()函數將提取的4個對應點對并建立相應的單應性矩陣,然后應用get_error()函數對對應點對進行計算,再返回對應的平方距離和。我們在實際操作中需要在多個get_error()函數返回的值中進行分析比較篩選,推斷建成的單應性矩陣合理性,必要時調整閾值。
在拼接完成后,在VR場景下,通常還需要通過“圖片扭曲”技術將同一視位的中心與鄰接圖片扭曲成360度的平滑全景圖[12]。
根據以上算法思想,我們編寫了算法測試程序,編程環境為windows10+Python2.7。在測試程序中通過輸入一組不同角度拍攝的同一場景的圖像,能自動完成圖像的特征提取,特征比對,特征點映射和圖像融合等過程,并可以根據拼接效果調整參數。如圖3(a)、(b)所示是不同角度的圖像和其特征點匹配情況。
從圖3可以看出,相鄰圖像的特征點配對準確,只有極少數的點配對錯誤。從圖4的實驗結果可以看出,采用以上算法可以使多張圖片拼接融合生成全景圖,得到的拼接圖像拼接準確,圖像比較清晰,實現了算法目標。盡管有少量的特征點配對錯誤,但對最終拼接的效果幾乎沒有影響,因此算法比較穩定,受圖像噪聲干擾小。

圖3 拍攝圖片與鄰接圖片特征點連接(左右兩角度)

圖4 拼接后生成的全景圖
本文研究的VR全景圖拼接算法,能較好地解決目標圖像特征點的假設和隨機提取的問題,排除了大部分特征點集中的噪點數據,通過增加多維索引樹KDGtree提高了特征點比對匹配的效率,算法有較高的穩定性,并且可以根據需要調整閾值參數,能較好地滿足實際工程問題的需求。