本發明涉及一種快速的魯棒的三維重建方法,尤其涉及一種基于GPU加速的層次化自適應快速三維重建方法,屬于計算機視覺領域。
背景技術:
光學影像三維重建技術是計算機視覺領域中的一研究熱點和方向,其應用涉及到計算機輔助幾何設計、計算機圖形學(CG)、遙感及工業測量等多個方面。尤其是隨著計算機硬件設備、成像設備的廉價化,以及來自工業、科研、娛樂等方面的大量需求,使得該項技術受到了越來越多國內外研究人員的關注。該項技術是利用二維光學投影恢復物體三維信息(表面形狀等)的數學反演過程,包括二維光學影像獲取、預處理、視差求解及三維反演等步驟。
隨著三維重建領域對仿生視覺技術的研究,利用視差原理由雙目仿生視圖反演物體表面三維幾何信息方法獲得了快速的發展。隨著雙目視覺在多領域的應用,如:航空測量,三維生物識別及視覺融合等領域,基于傅里葉變換平移不變性理論的相位相關技術以其卓越的超窄基線高精度三維反演性能受到越來越多的關注。然而,由于受到固定窗口及龐大計算量的限制,導致相位相關算法不能快速魯棒地處理一些包含地形落差較大,弱紋理及河流區域的影像。即使一些方法已經試圖通過基于GPU加速的方法解決此問題,但是常常表現出魯棒性不足的問題,尤其不能有效消除弱紋理及河流區域的影響。
技術實現要素:
本發明主要解決的技術問題是提供一種基于GPU加速的層次化自適應快速三維重建方法,采用GPU加速輔助的層次化自適應地視差圖計算方法解決傳統視差圖計算兩個問題:1、由于龐大的計算量而無法簡化計算復雜度問題;2、由于視差范圍過大,無紋理區及動態紋理區域導致誤匹配計算問題。
本發明的解決方案是:首先,針對計算瓶頸,根據PC匹配算法各計算存在獨立計算的可能,考慮CUDA環境的(Single Instruction Multiple Data,SIMD)SIMD特性,提出GPU加速算法,同時計算所有像素點的視差以達到加速效果;其次,針對視差范圍過大,無紋理區及動態紋理區域導致誤匹配計算問題,提出基于GPU加速的層次化自適應的并行架構,從粗到細地求解視差圖;再次,針對大窗口中值濾波器時耗問題,在每一層視差圖,使用下采樣,小窗口中值濾波器及雙邊濾波技術對每一層的視差圖進行快速濾波;最后,通過視差圖和攝像機標定參數,利用雙目視覺三維反演模型快速計算出三維模型。
本發明實現上述方案的步驟如下所示:
1.通過雙視幾何極線約束和視差計算算法,初步矯正輸入圖像:第一,對輸入圖像對利用尺度不變特征變換算法檢測圖像對的匹配點;第二,利用雙視幾何極線約束關系求出對極點e和基礎矩陣F,并通過將之投影到無窮遠點,得到射影變換矩陣H’;第三,將極點旋轉到軸線上,并將其投影到無窮遠處;最后使用最小二乘法優化算法確定另一H,使得達到最小,然后對兩張圖像分別使用H和H’進行重采樣,得到極線對齊的矯正圖像;
2.對圖像進行層次化架構處理,確定各層次計算窗口和采樣步長以達到自適應性效果。首先,設置自適應分層函數,對輸入像對進行層次化劃分:。其中,為第i層步長,c為總分層次數,i為層次。然后,根據層次化結構,設置窗口自適應函數,以解決圖像中不同部分視差差別過大問題,其具體公式如下:。表示第i層的窗口,為初始窗口值,c為總分層數。i表示層次。
3.使用層次化自適應的GPU加速技術求解視差圖:
1)在GPU并行架構下,使用并行算法同時對每個像素點進行PC運算,快速計算出每層的視差信息。PC算法具體公式如下:,其中,、分別為左右圖,為像素坐標,(d是待求解視差)。首先對、兩幅圖像進行傅里葉變換,根據傅里葉變換平移特性,將此問題放在頻率下進行相位求解:,其中,F1、F2分別是、在頻率域下的表示,C(U)為互功率譜函數(,其中,W*W表示圖像大小)。在本方法的GPU并行架構中,整個傅立葉變換過程都是通過GPU加速模塊(Compute Unified Device Architecture Fast Fourier Transformation,CUFFT)CUFFT計算完成。
2)δ函數峰值點位置及其峰值計算:根據PC算法流程,對互功率譜函數C(U)進行傅里葉逆變換,得到δ函數。然后,使用一維高斯函數擬合δ函數,從而計算視差d,其具體求解方法如下: ,其中,為亞像素偏移量,為δ函數峰值點位置,亞像素偏移量(,)的具體計算公式為:,。在本方法中,基于密集匹配中每一個PC函數具備獨立計算的能力;再根據GPU的單指令多數據流特性,在具備硬件基礎的情況下,采用GPU實現對圖像對視差圖求解的加速過程。同時,在擬合過程中保存每一像素點的δ函數峰值,形成峰值矩陣,為可信度閾值設定提供數值依據。
3)根據峰值矩陣(峰值圖),確定可信度閾值,用來消除下一層中求解的不可信視差在視差圖細化時對上一層視差的影響。可信度閾值公式定義如下:,其中,m為常數,Thresh為可信度閾值,為逆傅里葉變換,C為互功率譜函數。在計算每個像素點的視差時,如果當前計算窗口的δ函數峰值小于Thresh,則此像素點標記為不可信點,并在后面所有層次的視差圖細化過程中不予更新該點視差。在本方法中,由于所有的更新計算在GPU上執行,在獲取可信度閾值后,我們并行地判斷每個像素點的可信度。
4)在每一層消除噪聲點視差圖的影響,在之前的PC算法中,中值濾波器以其優良的保邊性常常被用于脈沖噪聲的平滑,但是該算法對窗口非常敏感,大窗口算法相當耗時,小窗口算法不能完全消除噪聲的影響,因此為了減少時間消耗,本方法對視差圖進行下采樣,然后使用小窗口中值濾波,然后使用雙線性插值算法上采樣視差圖,再使用雙邊濾波器進行進一步濾波。
5)迭代地更新各個像素點的視差值:為最終我們想要得到的視差,c為迭代次數,為每一層計算出的視差(即步驟2中的當前層(第K層)視差)。該迭代過程除了更新每個像點的視差以外,還利用累積到上一層的視差結果引導PC窗口為下一層的并行計算準備計算數據(主要是根據上一層的視差值引導PC窗口從紋理內存中復制所選擇的計算數據到個體內存)。值得注意的是,這里在對每個像素點進行更新時,都需要對每個像點的可信度進行判斷,若滿足可信條件,繼續對當前點進行計算,否則停止計算,并在以后的迭代過程中停止更新。最終快速地得到高可信的細化的視差圖。
4.利用最終得到細化視差圖,同時根據獲得的攝像機參數模型,依據雙目視覺三維重建模型,重建出目標三維結構。對于雙目視覺三維重建模型:,其中,d為視差,Z為深度,f為焦距,為基線。得到攝像機參數和基線信息后,將計算出來的最終細化視差圖代入此公式中,求得深度圖,然后通過反投影得到三維模型。