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