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