本發(fā)明屬于光場圖像處理的技術(shù)領(lǐng)域,具體涉及一種以全局運(yùn)動矢量為基礎(chǔ)的光場圖像壓縮方法。
背景技術(shù):
“光場”是用來記錄光線分布情況的一個模型,可以全方位地描述光線在空間與時間中的各種信息。對于傳統(tǒng)相機(jī)成像來說,一張照片上的一個像素點(diǎn)只是不同方向的光線疊加之后的結(jié)果;對于光場相機(jī)來說,其采集到的圖像上還包含著光輻射在傳播過程中的四維位置和方向的信息,相比只記錄二維的傳統(tǒng)成像方式多出2個自由度,可以對光路進(jìn)行軌跡追蹤,因而在圖像重建過程中,能夠獲得更加豐富的圖像信息。光場圖像在計算物體景深、醫(yī)學(xué)影像以及虛擬現(xiàn)實(shí)等領(lǐng)域有著廣泛的應(yīng)用。
目前有兩種常見的光場圖像進(jìn)行采集方式:微透鏡相機(jī)以及相機(jī)陣列。兩種方式都是將四維光場信息記錄在二維的圖片上,光場圖像包含的信息量十分巨大,相應(yīng)地,其文件大小也高于傳統(tǒng)的圖片文件,如何高效儲存與傳輸光場圖像已經(jīng)是當(dāng)前十分迫切的需求。
使用相機(jī)陣列拍攝出的光場子圖像間存在極高的相關(guān)性,由于每幅子圖像之間只有相機(jī)位置的變化,而沒有圖像中物體的相對移動,因此相鄰圖像間幾乎只有相對平移的關(guān)系,利用這一相關(guān)性,對兩幅圖像進(jìn)行基于全局運(yùn)動估計的幀間預(yù)測編碼,能大大提高光場圖像的編碼效率。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于,提供一種能提升光場圖像壓縮效率的圖像壓縮方法,即基于全局運(yùn)動估計的光場子圖像編碼方法。
本發(fā)明采用的技術(shù)方案為:一種光場圖像的壓縮方法,包括下列步驟:
步驟1:輸入待壓縮的光場圖像子陣列;
步驟2:對光場子圖像進(jìn)行圖像組劃分,將同一行或同一列的所有圖像作為一個圖像組;
步驟3:分別對各組圖像進(jìn)行編碼壓縮:將每一行最左或每一列最上的圖像作為參考幀,基于參考幀計算其相鄰幀的全局運(yùn)動矢量以及預(yù)測圖像,對全局運(yùn)動矢量以及相鄰幀與預(yù)測圖像的差值進(jìn)行編碼;
步驟4:對于每一組待編碼的子圖像,將該組最近完成編碼的圖像作為參考幀,基于參考幀計算其相鄰幀的全局運(yùn)動矢量以及預(yù)測圖像,對全局運(yùn)動矢量以及相鄰幀與預(yù)測圖像的差值進(jìn)行編碼;
步驟5:重復(fù)步驟4,直到所有子圖像組的每一幅子圖像都完成了全局運(yùn)動矢量以及圖像差值的編碼,整個光場圖像壓縮過程結(jié)束。
在步驟3和4中,全局運(yùn)動矢量的具體計算方法為:設(shè)每個光場子圖像的大小是l*w個像素,對當(dāng)前幀的中心區(qū)域中的n*n個大小為k*k像素的圖像塊進(jìn)行運(yùn)動估計,得到這n*n個圖像塊的運(yùn)動矢量,以其眾數(shù)作為當(dāng)前幀的全局運(yùn)動矢量;
所述參數(shù)k的計算方法為k=max[16,ωlog2s],其中ω為預(yù)設(shè)尺度因子,s=min[l,w];
所述參數(shù)n的計算方法為n=max[4,log2(s/k)],其中s=min[l,w];
所述中心區(qū)域是指,當(dāng)前圖像的中心像素點(diǎn)最鄰近的n*n個子圖像區(qū)域。
在步驟3和4中,圖像塊的運(yùn)動矢量的具體計算方法為:
首先判斷分組方式:
若是按行分組,將當(dāng)前待測圖像塊與參考幀對應(yīng)位置的圖像塊在從左到右的水平搜索范圍內(nèi)進(jìn)行最小絕對差值和計算,找出最小絕對差值和最小的圖像塊,兩圖像塊間的水平相對位移即為水平運(yùn)動矢量dx;之后再將當(dāng)前待測圖像塊與參考幀對應(yīng)位置的圖像塊在從上到下的垂直搜索范圍內(nèi)進(jìn)行進(jìn)行最小絕對差值和計算,找出最小絕對差值和最小的圖像塊,兩圖像塊間的垂直相對位移即為垂直運(yùn)動矢量dy,則[dx,dy]即為當(dāng)前圖像塊的運(yùn)動矢量;
若是按列分組,將當(dāng)前待測圖像塊與參考幀對應(yīng)位置的圖像塊在從上到下的垂直搜索范圍內(nèi)進(jìn)行最小絕對差值和計算,找出最小絕對差值和最小的圖像塊,兩圖像塊間的垂直相對位移即為垂直運(yùn)動矢量dy;之后再將當(dāng)前待測圖像塊與參考幀對應(yīng)位置的圖像塊在從左到右的水平搜索范圍內(nèi)進(jìn)行進(jìn)行最小絕對差值和計算,找出最小絕對差值和最小的圖像塊,兩圖像塊間的水平相對位移即為水平運(yùn)動矢量dx,則[dx,dy]即為當(dāng)前圖像塊的運(yùn)動矢量。
綜上所述,由于采用了上述技術(shù)方案,本發(fā)明的有益效果為:本發(fā)明首先根據(jù)光場圖像的行列數(shù)目,決定更加有效的分組方式;使用參考幀圖像對當(dāng)前待編碼圖像進(jìn)行全局運(yùn)動估計,相對于分塊運(yùn)動估計的做法,大大減少了計算量,提高了計算速度;在進(jìn)行全局運(yùn)動估計的過程中,通過分析圖像的大小和復(fù)雜度,自動選取合理的分塊方式與塊數(shù)量,在保證準(zhǔn)確性的前提下減小了運(yùn)算量。最后通過全局運(yùn)動補(bǔ)償提高參考幀圖像與當(dāng)前待編碼幀圖像的相關(guān)性,實(shí)現(xiàn)高效的光場子圖像壓縮過程。
附圖說明
圖1為子圖像按行分組示意圖;
圖2為n=4為例的中心區(qū)域的含義;
圖3為對圖像塊進(jìn)行運(yùn)動估計的過程。
具體實(shí)施方式:
為使本發(fā)明的目的與技術(shù)方案更加清楚,下面結(jié)合實(shí)施方式與示意圖,對本發(fā)明作進(jìn)一步詳細(xì)描述。
基于本發(fā)明的方法,對輸入的光場子圖像陣列進(jìn)行如下處理:
步驟1、確定光場子圖像分組方式。設(shè)光場子圖像陣列的數(shù)目為m*n,即m行n列,若m<n,則將每一行子圖像作為一個圖像組;若n<m,則將每一列子圖像作為一個圖像組。
步驟2、確定要檢測的圖像塊大小k*k。其中k=max[16,ωlog2s],其中ω為預(yù)設(shè)尺度因子,設(shè)每個光場子圖像的大小是l*w個像素,s=min[l,w];
步驟3、確定需要進(jìn)行運(yùn)動估計的圖像塊數(shù)量num=n*n,其中n=max[4,log2(s/k)],其中s=min[l,w];
步驟4、將每一行最左(若將每一行子圖像作為一個圖像組)或每一列最上(若將每一行列圖像作為一個圖像組)的圖像作為參考幀,對其相鄰幀(下一幀)進(jìn)行全局運(yùn)動估計。
步驟5、全局運(yùn)動估計的方法是:對于當(dāng)前編碼幀的中心區(qū)域中的n*n個大小為k*k像素的圖像塊進(jìn)行運(yùn)動估計,得到n*n個圖像塊運(yùn)動矢量[dx(i),dy(i)];所述中心區(qū)域是指,當(dāng)前圖像的中心像素點(diǎn)最鄰近的n*n個子圖像區(qū)域。取數(shù)組dx(i)中元素的眾數(shù)為dx,取數(shù)組dy(i)中元素的眾數(shù)為dy,則矢量[dx,dy]為整幅子圖像的全局運(yùn)動矢量。
步驟6、對圖像塊進(jìn)行運(yùn)動估計的方法是:首先判斷分組方式,若是按行分組,對于當(dāng)前編碼幀的每一個圖像塊curblock(i),在參考幀的對應(yīng)位置圖像塊的向左k像素到向右k像素進(jìn)行全搜索算法的圖像塊匹配,為減小計算量,使用最小絕對差值和(sad)算法,公式為:
sad(mv)=∑|f2(x,mv)-f1(x)|
步驟7、找到參考幀在水平方向搜索范圍內(nèi)與圖像塊curblock(i)的sad最小的對應(yīng)圖像塊horblock(i),記錄圖像塊curblock(i)與horblock(i)間的水平位移矢量dx(i);之后在參考幀的horblock(i)圖像塊向上k像素到向下k像素進(jìn)行全搜索算法的圖像塊匹配,找到參考幀在垂直方向搜索范圍內(nèi)與圖像塊curblock(i)的sad最小的對應(yīng)圖像塊verblock(i),記錄圖像塊horblock(i)與verblock(i)間的垂直位移矢量dy(i);則[dx(i),dy(i)]即為當(dāng)前圖像塊curblock(i)的運(yùn)動矢量。
步驟8、若是按列分組,對于當(dāng)前編碼幀的每一個圖像塊curblock(i),在參考幀的對應(yīng)位置圖像塊的向上k像素到向下k像素進(jìn)行全搜索算法的圖像塊匹配,使用最小絕對差值和(sad)算法,找到參考幀在垂直方向搜索范圍內(nèi)與圖像塊curblock(i)的sad最小的對應(yīng)圖像塊verblock(i),記錄圖像塊curblock(i)與verblock(i)間的水平位移矢量dy(i);之后在參考幀的verblock(i)圖像塊向左k像素到向右k像素進(jìn)行全搜索算法的圖像塊匹配,找到參考幀在水平方向搜索范圍內(nèi)與圖像塊curblock(i)的sad最小的對應(yīng)圖像塊horblock(i),記錄圖像塊verblock(i)與horblock(i)間的水平位移矢量dx(i);則[dx(i),dy(i)]即為當(dāng)前圖像塊curblock(i)的運(yùn)動矢量。
步驟9、求得當(dāng)前幀的全局運(yùn)動矢量[dx,dy]后,將參考幀平移[dx,dy]后作為預(yù)測圖像,將當(dāng)前幀與預(yù)測圖像做差,將得到的差值d與全局運(yùn)動矢量[dx,dy]進(jìn)行編碼。
步驟10、將最近完成編碼的圖像作為參考幀,將其下一幀圖像作為待編碼的當(dāng)前幀,重復(fù)步驟5~9,對當(dāng)前幀進(jìn)行壓縮編碼。
步驟11、當(dāng)每一組子圖像中的每一幅子圖像都進(jìn)行過編碼之后,整個光場圖像陣列的壓縮編碼結(jié)束。