本發(fā)明屬于圖像處理技術領域,具體涉及一種基于最鄰近搜索的光流并行加速方法。
背景技術:
光流(opticalflow)的概念是gibson于1950年首先提出的,它是由相機和場景相對運動產生的,表示的是圖像中各像素瞬時相對運動的速度情況。光流場是指圖像灰度模式的表面運動。光流計算是當今計算機視覺的熱點之一,光流算法被廣泛應用于運動目標檢測與跟蹤、機器人導航、三維重建等領域。80年代初期,horn和schunck提出了建立在光流平滑性假設基礎上的稠密光流算法,為光流計算的發(fā)展起了奠基性作用,之后學者們相繼提出了多種計算光流的算法。根據數學方法和相應的理論基礎,計算光流的方法分為基于梯度的方法、基于塊匹配的方法、基于能量的方法和基于相位的方法。
與其他計算光流的方法相比,基于塊匹配的光流法具有運算速度快、易于硬件實現的優(yōu)點。塊匹配是圖像處理中很常見的一種問題,尤其在視頻編碼中的運動估計中應用廣泛,許多年來,學者們已經提出了許多塊匹配的算法,如三步法、四步法、菱形法等。為了進一步提高運算速度,學者們提出了近似塊匹配算法,如局部搜索,降低維度等,雖然這些方法得到的結果只是精確匹配的近似,但由于其大大減少了運算量而被廣泛應用于各種高層圖像處理中。
光流是一種簡單實用的圖像運動的表達方式,定義為動態(tài)圖像的幾何變化和輻射度變化的全面表示。光流的研究是利用圖像序列中的像素強度數據的時域變化和相關性來確定各自像素位置的“運動”,即研究圖像灰度在時間上的變化與景象中物體結構及其運動的關系。
光流法檢測運動物體的基本原理是:給圖像中的每一個像素點賦予一個速度矢量,這就形成了一個圖像運動場,在運動的一個特定時刻,圖像上的點與三維物體上的點一一對應,這種對應關系可由投影關系得到,根據各個像素點的速度矢量特征,可以對圖像進行動態(tài)分析。如果圖像中沒有運動物體,則光流矢量在整個圖像區(qū)域是連續(xù)變化的。當圖像中有運動物體時,目標和圖像背景存在相對運動,運動物體所形成的速度矢量必然和鄰域背景速度矢量不同,從而檢測出運動物體及位置。
目前大多數的光流計算方法相當復雜,計算量巨大,耗時長,實時性和實用性都較差。本發(fā)明對光流的計算實行并行加速辦法,能夠在保證精度的同時提高運算速度。
技術實現要素:
本發(fā)明的技術解決方案:為克服目前光流場計算耗時長的不足,提供一種基于最鄰近搜索的并行加速光流方法,該方法通過利用gpu并行化計算進行加速計算,同時能夠保證一定精確度。
本發(fā)明采用的技術方案為:一種基于最鄰近搜索的光流并行加速方法,包括下列步驟:
步驟1:輸入兩幀圖像,轉化為灰度圖,并進行高斯濾波,以減少圖像噪聲;
步驟2:分別為濾波后的兩幅圖像進行金字塔式分層,按照分辨率從小到大的順序排列,并隨機地初始化分辨率最小層的圖像的光流場為(0,1)之間的均勻分布,并將其光流場圖像作為當前層圖像;
步驟3:計算當前層圖像的梯度值,包括x方向梯度值與y方向梯度值,并對得出的梯度值進行高斯濾波;
步驟4:利用barnes算法,對當前層圖像的光流場,采用改進的傳播修正的方法進行多次改進的傳播修正,每次傳播時,每行或每列的傳播過程是并行的,傳播修正過程中采用梯度值作為匹配準則,采用梯度下降法修正光流,得到修正后的光流場圖像;
步驟5:將得到的光流場放大至圖像金字塔中的相鄰層圖像的尺寸大小,放大過程中使用雙三次插值;
步驟6:將放大后的光流場圖像作為當前層圖像,重復步驟3、4和5,直到光流場圖像尺寸達到原始圖像大小。
在步驟4中,改進的傳播修正的方法為:
為了得到誤差函數最小時的運動矢量,即真正的光流失量,使用最優(yōu)化算法中常用的梯度下降法。假設經傳播后某點光流矢量為(u,v),誤差函數為e(u,v),那么修正光流矢量為:
其中,△u和△v分別為橫縱坐標的微分,取0.001,α為步長,本發(fā)明采用動態(tài)步長的策略,步長α可以設置為金字塔層數的函數:
其中l(wèi)為當前金字塔層數,l為圖像金字塔總層數。
在步驟4中,改進的可以并行計算傳播修正的方法為:
對每一層圖像的光流場,都進行四次不同方向的傳播修正,方向依次為從左到右,從上到下,從右到左,從下到上。在傳播修正時,當前塊的計算僅依賴于相鄰的一個塊,同時將好的結果也只傳播給相鄰的一個塊,從而使得每一行或每一列的傳播變得獨立,容易在gpu上并行實現。
綜上所述,由于采用了上述技術方案,本發(fā)明的有益效果為:本發(fā)明在對光流場進行迭代修正的過程中僅使用傳播的方式,通過設置在不同分辨率下梯度下降法中的不同步長,提高了光流修正的效率。對每一層的光流場傳播,使用四次單一方向,使得該過程可以并行運算,有利于實現利用gpu并行計算的加速過程。
附圖說明
圖1為本發(fā)明方法實現流程圖;
圖2本發(fā)明中傳播過程示意圖。
具體實施方式
為使本發(fā)明的目的與技術方案更加清楚,下面結合實施方式與示意圖,對本發(fā)明作進一步詳細描述。
如圖1所示,本發(fā)明具體實現如下:
步驟1:讀入待處理的兩幀圖像,將其轉換為灰度圖,并進行高斯濾波,以減少噪聲。
步驟2:分別為濾波后的兩幅圖像進行金字塔式分層,每層圖像的尺寸均為上一層的0.9倍,視原圖的尺寸將其劃分為20至30層。
步驟3:隨機初始化最底層圖像的光流場,使其為(0,1)之間的均勻分布。
步驟4:分別計算該層圖像的x方向與y方向的梯度值,并對計算結果進行高斯濾波。
步驟5:對該層圖像的光流場,分別進行四次不同方向的傳播修正,方向分別為從左到右、從上到下、從右到左、從下到上,每次傳播時,各行或各列的傳播是并行進行的。傳播過程中采用梯度值作為匹配準則,采用梯度下降法修正光流。如圖2所示,例如進行從上到下的傳播時,3列圖像塊中的每一列的傳播都是獨立的,與其他列無關,因而可以并行地計算這三列的傳播過程。
步驟6:采用梯度值匹配的準則為:
將圖像中兩個像素點的灰度表示為與時間、空間位置的函數形式,即:
g1(x,y)=f(x,y,t)
g0(x+u,y+v)=f(x+u,y+v,t+△t)
使用泰勒公式將展開,忽略高階無窮小項并認為時間無限趨近于0,得到:
移項后得到:
設圖像塊的大小是m×n,則圖像塊的梯度運動矢量(u,v)定義為:
要求上式的最小值,可以用最小二乘法得到關于(u,v)t的非齊次方程組,然后得到新的匹配準則:
其中m(i,j)代表窗口權重,表示了塊中每個像素點對匹配結果的影響,在實際計算中,一般用以ρ為半徑的高斯函數代替,并計算高斯函數與圖像序列梯度差值之間的卷積。
步驟7:修正光流的梯度下降法為:
對于某個塊來說,其匹配誤差可以看成是其運動矢量的函數,其真實的光流矢量就是使誤差函數最小時的運動矢量。假設經傳播后某點光流矢量為(u,v),誤差函數為e(u,v),那么修正光流矢量為:
其中,△u和△v取0.001,α為步長,本發(fā)明采用動態(tài)步長的策略,在接近圖像金字塔頂層時,誤差一般較大,將步長設置大一些;當接近金字塔底層時,步長設置小一些。步長α設置為金字塔層數的函數:
其中l(wèi)為當前金字塔層數,l為圖像金字塔總層數。
步驟8:將得到的光流場放大至上一層圖像的尺寸,放大過程中使用雙三次插值,函數f在點(x,y)處的值通過矩形網格中最近的16個點的加權平均值得到,其計算公式為:
步驟9:重復步驟4~8,直到光流場達到原始圖像的尺寸,即得到整幅圖像的光流場。光流算法結束。
提供以上實施例僅僅是為了描述本發(fā)明的目的,而并非要限制本發(fā)明的范圍。本發(fā)明的范圍由所附權利要求限定。不脫離本發(fā)明的精神和原理而做出的各種等同替換和修改,均應涵蓋在本發(fā)明的范圍之內。