|
|
| <!--插入廣告JS代碼--> |
摘要:運(yùn)動(dòng)估計(jì)是運(yùn)動(dòng)補(bǔ)償技術(shù)的核心部分。本文在比較了VDSP中幾種運(yùn)動(dòng)估計(jì)算法(光流分析法、塊匹配法和象素遞歸法)的基礎(chǔ)上,詳細(xì)介紹了硬件復(fù)雜度較低、易于實(shí)現(xiàn)的塊匹配法的典型電路。結(jié)合這種設(shè)計(jì)思路,設(shè)計(jì)了出具有良好前景的VDSP專用芯片。
關(guān)鍵字:運(yùn)動(dòng)補(bǔ)償;運(yùn)動(dòng)估計(jì);光流分析法;塊匹配法
1概述:
視頻是時(shí)變圖象序列,是時(shí)空信號(hào),與靜態(tài)圖象相比不僅在空間上存在冗余,而且在時(shí)間上存在冗余。視頻的壓縮一方面可以利用圖象本身的空間相關(guān)性,還可以利用時(shí)間上的相關(guān)性。視頻編碼需要將幀內(nèi)編碼和幀間編碼混合起來達(dá)到高的壓縮率。幀內(nèi)編碼即單幅圖象本身的編碼過程,通常采用DCT變換編碼方法。幀間編碼可分為無運(yùn)動(dòng)補(bǔ)償?shù)牟罘置}碼調(diào)制(DPCM)和有運(yùn)動(dòng)補(bǔ)償?shù)牟罘置}碼調(diào)制。幀內(nèi)編碼通常是以宏塊為單位的DCT編碼,幀間編碼是在幀內(nèi)編碼的基礎(chǔ)上進(jìn)行的,在不同幀之間以對(duì)應(yīng)的宏塊為對(duì)象進(jìn)行DPCM編碼。所謂運(yùn)動(dòng)補(bǔ)償是指對(duì)宏塊在下一幀的位置做運(yùn)動(dòng)估計(jì),將該運(yùn)動(dòng)估計(jì)用于確定下一幀對(duì)應(yīng)宏塊的位置,再進(jìn)行DPCM編碼,使編碼考慮了圖象的運(yùn)動(dòng)分量,即對(duì)運(yùn)動(dòng)做了補(bǔ)償,提高編碼效率。
可見,運(yùn)動(dòng)估計(jì)是序列圖象編碼和計(jì)算機(jī)視覺領(lǐng)域中的一項(xiàng)關(guān)鍵技術(shù),是運(yùn)動(dòng)補(bǔ)償技術(shù)的核心部分,在目前已成為國際標(biāo)準(zhǔn)的電視圖象編碼方法中,從H.261、 H.263到MPEG-1、MPEG-2和MPEG-4,都無一例外用到了"簡(jiǎn)單幀間預(yù)測(cè)+運(yùn)動(dòng)補(bǔ)償"的技術(shù)框架。本文針對(duì)VDSP芯片的運(yùn)動(dòng)估計(jì)部分的實(shí)現(xiàn)方法進(jìn)行討論。
2 運(yùn)動(dòng)估計(jì)的幾種方案的工作原理及其比較
2.1幀間補(bǔ)償技術(shù)簡(jiǎn)介
在對(duì)運(yùn)動(dòng)估計(jì)進(jìn)行分析之前,我們先對(duì)補(bǔ)償預(yù)測(cè)技術(shù)給予簡(jiǎn)要的介紹,其通常分為以下幾個(gè)步驟:
⑴首先把圖象分割為靜止的和運(yùn)動(dòng)的兩部分;圖象分割是運(yùn)動(dòng)補(bǔ)償?shù)幕A(chǔ),但實(shí)際上要把圖象分割成不同運(yùn)動(dòng)的物體比較困難,通常采用兩種較簡(jiǎn)單的的方法。一種是把圖象分為矩形子塊,適當(dāng)選擇塊的大小,把子塊分為動(dòng)和不動(dòng)兩種,估計(jì)出運(yùn)動(dòng)子塊的位移,進(jìn)行預(yù)測(cè)傳輸;另一種方法是對(duì)每個(gè)象素的位移進(jìn)行遞歸估計(jì)。相比較而言,通常象素遞歸較塊匹配法精度高,對(duì)多運(yùn)動(dòng)畫面的適應(yīng)能力也強(qiáng),但只能跟蹤較小的位移,且實(shí)現(xiàn)復(fù)雜。塊匹配法(BMA)雖然精度低于象素遞歸法,但由于其位移跟蹤能力強(qiáng)(不低于6-7象素/幀)且硬件實(shí)現(xiàn)比較方便,是目前最常用的運(yùn)動(dòng)估計(jì)算法,活動(dòng)圖象編碼國際建議H.261和MPEG都采用 BMA作運(yùn)動(dòng)估計(jì)。由硬件實(shí)現(xiàn)的運(yùn)動(dòng)估計(jì)多采用BMA來實(shí)現(xiàn),在后面我們對(duì)其硬件實(shí)現(xiàn)給予詳細(xì)說明。
⑵估計(jì)物體的位移值;在一定的范圍內(nèi),以每一象素的亮度分量作為比較量,根據(jù)前后兩幀內(nèi)子塊所有象素的亮度分量的差的絕對(duì)值的和確定一個(gè)二維的運(yùn)動(dòng)矢量。即尋找前后兩幀相差最小的圖象塊。
⑶用位移估值(即運(yùn)動(dòng)矢量)進(jìn)行運(yùn)動(dòng)補(bǔ)償預(yù)測(cè);以位移估計(jì)和象素塊之間的方差等指標(biāo)為基礎(chǔ),為每個(gè)子塊選出一種壓縮模式。這一過程分支判斷較為復(fù)雜,如在 h.261標(biāo)準(zhǔn)中,以位移塊差分這一指標(biāo)為基礎(chǔ),為每個(gè)塊選擇一種壓縮模式,壓縮模式一般有幀內(nèi)模式、帶有零運(yùn)動(dòng)矢量的幀間模式、運(yùn)動(dòng)補(bǔ)償幀間模式和帶有循環(huán)濾波的運(yùn)動(dòng)補(bǔ)償幀間模式幾種,補(bǔ)償后得到預(yù)測(cè)圖象,這一部分的工作量較大,用中小規(guī)模的硬件電路難以完成,一般采用軟件實(shí)現(xiàn)。
⑷預(yù)測(cè)信息編碼;得到預(yù)測(cè)圖象后,將預(yù)測(cè)圖象和實(shí)際圖象進(jìn)行比較,對(duì)預(yù)測(cè)誤差圖象進(jìn)行編碼,這時(shí)由于誤差圖象的能量較小,容易得到比較大的壓縮比。
可以看出,在對(duì)圖象的分割作了必要的簡(jiǎn)化后,對(duì)子塊的估計(jì)或者說運(yùn)動(dòng)估計(jì)(ME)問題就成了必須解決的關(guān)鍵技術(shù),在目前市場(chǎng)上的實(shí)時(shí)圖象處理壓縮芯片中,利用軟硬件結(jié)合解決運(yùn)動(dòng)估計(jì)問題成為芯片的重要組成部分,其中,采用何種算法以及軟硬件的搭配方式都直接影響到芯片的總體性能。
2.2 運(yùn)動(dòng)估計(jì)的幾種方案比較
目前比較流行的運(yùn)動(dòng)估計(jì)方法有光流分析法[1]、塊匹配法[2]、象素遞歸法[3]、貝葉斯法[4],通過關(guān)于運(yùn)動(dòng)估計(jì)的各種算法工作原理的分析討論、性能比較,可以得到如下的結(jié)論:塊匹配法由于其位移跟蹤能力強(qiáng)(不低于6~7象素/幀),且簡(jiǎn)單和易于直接用硬件實(shí)現(xiàn),是目前最常用的運(yùn)動(dòng)估計(jì)算法,活動(dòng)圖象編碼國際建議H.261、H.263和MPEG都采用BMA作運(yùn)動(dòng)估計(jì)。由硬件實(shí)現(xiàn)的運(yùn)動(dòng)估計(jì)也多采用BMA來實(shí)現(xiàn)。
2.3 塊匹配法的具體步驟及算法
將當(dāng)前幀劃分為M x N圖象子塊,在上一幀中開辟大小為(M+2WX) x (N+2WY) 的一塊搜索區(qū),利用M x N子塊在該搜索區(qū)尋求最優(yōu)匹配來得到運(yùn)動(dòng)矢量的估值。衡量匹配好壞的準(zhǔn)則有歸一化相關(guān)函數(shù)(NCCF)、均方誤差(MSE)和幀間絕對(duì)差(MAD)以及最大匹配象素統(tǒng)計(jì)(MPC)等。采用四種準(zhǔn)則所得的估值結(jié)果差別不大,因MAD便于計(jì)算和硬件實(shí)現(xiàn),所以用的較多。
我們?cè)O(shè)計(jì)的VDSP芯片中就采用的是MAD塊匹配法,有八個(gè)運(yùn)動(dòng)估計(jì)協(xié)處理器,它可以利用我們?cè)O(shè)計(jì)的VDSP中的并行矢量運(yùn)算器同時(shí)處理64對(duì)象素的比較,并且通過一個(gè)連續(xù)的的比較過程可以找出最佳的匹配塊。簡(jiǎn)單的講,其實(shí)現(xiàn)過程如下,在一個(gè)CPU的時(shí)鐘周期內(nèi),并行處理器從內(nèi)存中取出15個(gè)8位的操作數(shù)通過交錯(cuò)算法或線型算法同寄存器中的象素的參數(shù)值完成64對(duì)象素的相減,在每行將其絕對(duì)值進(jìn)行累加,多次累加后得到完整圖象塊的絕對(duì)值差,通過每行絕對(duì)值累加和的比較得到最佳匹配塊,從而得到與此塊相對(duì)應(yīng)的運(yùn)動(dòng)矢量。
3 VDSP芯片運(yùn)動(dòng)估計(jì)的實(shí)現(xiàn)
視頻壓縮算法是壓縮視頻幀與幀之間的時(shí)間冗余和幀內(nèi)的空間冗余。其中時(shí)間冗余是指兩幀或多幀之間的相似性。如果圖象的變化不大,即可得到大的壓縮比,幀和幀之間的相關(guān)性的測(cè)量通常是采用象素亮度絕對(duì)值差的和來得到的。運(yùn)動(dòng)估計(jì)包括搜索在目標(biāo)幀中與目標(biāo)塊(通常大小為16x16象素大。┳钕嘟膲K,運(yùn)動(dòng)估計(jì)器就是通過比較絕對(duì)值差的大小來獲得最佳匹配塊。
3.1 VDSP芯片的結(jié)構(gòu)
我們?cè)O(shè)計(jì)的VDSP芯片是一種高速的圖象處理DSP芯片,在100兆時(shí)鐘下完成16X16的運(yùn)動(dòng)估計(jì)平均需要四個(gè)時(shí)鐘周期。它具有高度并行的處理器結(jié)構(gòu)以及巧妙的指令系統(tǒng)。在每個(gè)我們?cè)O(shè)計(jì)的VDSP芯片中,有一個(gè)標(biāo)量處理器和八行四列的矢量處理器,每行的并行處理單元后有一個(gè)運(yùn)動(dòng)協(xié)處理器專用于運(yùn)動(dòng)估計(jì)。在長(zhǎng)度為32位的指令中,包含標(biāo)量操作部分和矢量操作部分,標(biāo)量操作的重要用途之一就是為流水線的下一級(jí)的矢量運(yùn)算提供內(nèi)存操作數(shù)地址。結(jié)構(gòu)簡(jiǎn)圖如圖1所示:
圖1我們?cè)O(shè)計(jì)的VDSP芯片結(jié)構(gòu)簡(jiǎn)圖
3.2 運(yùn)動(dòng)估計(jì)協(xié)處理器結(jié)構(gòu)
在協(xié)處理器中主要分為擴(kuò)展寄存器、絕對(duì)值累加樹和最佳匹配選擇器,下面我們對(duì)其結(jié)構(gòu)和功能分別給予介紹。
3.2.1
(1) PixelDist:在v_PixelDist_xxx指令時(shí),存放圖象塊比較的中間結(jié)果,將每次得到的結(jié)果的絕對(duì)值累加和與上次的結(jié)果疊加后再放入到這個(gè)寄存器中;
(2) PixelBest:在v_PixelBest_xxx指令時(shí),將PixelBest原先的值與PixelDist和當(dāng)前累加樹之和進(jìn)行比較,將結(jié)果小的值放在這個(gè)寄存器中;
(3) MatchCount:每次v_PixelBest_xxx指令時(shí),將此寄存器累加一,作為圖象塊的標(biāo)識(shí);
(4) BestMatchCount:在v_PixelBest_xxx指令時(shí),此累加器保存絕對(duì)值差最小的圖象塊的標(biāo)識(shí)。
3.2.2 絕對(duì)值累加樹
我們?cè)O(shè)計(jì)的VDSP計(jì)算象素塊差的方式有四字節(jié)和八字節(jié)方式兩種。四字節(jié)方式是計(jì)算四個(gè)8位象素的絕對(duì)差,而八字節(jié)方式是計(jì)算八個(gè)八位象素的絕對(duì)差。在一個(gè)周期中,四個(gè)象素或八個(gè)象素的絕對(duì)差可以被計(jì)算出來并且被累加到象素絕對(duì)差的寄存器當(dāng)中。其數(shù)據(jù)流圖如圖2所示。
計(jì)算象素塊差的第一步是計(jì)算象素對(duì)的差,這是通過矢量處理器的ALU完成的。在四字節(jié)方式下,一次計(jì)算四個(gè)8位的象素對(duì)的差并將差寄存在寄存器中。而在八字節(jié)方式下,一次計(jì)算八個(gè)8位的象素對(duì)的差并將其寄存在寄存器中。為了保持精度,寄存器中的存儲(chǔ)方式為9位。
第二步是計(jì)算出差的絕對(duì)值。這是通過第一步所得的差的符號(hào)位來完成的。如圖2所示,S0,S1到S7代表符號(hào)位。如果差為負(fù)值(符號(hào)位為1),則將各個(gè)位取反(通過符號(hào)位與各位取異或得到)之后,再在求和樹中加符號(hào)位(實(shí)際上綜合整個(gè)樹,對(duì)負(fù)數(shù)進(jìn)行相加運(yùn)算的是其補(bǔ)碼)。如果差為正,不需要任何的變換。
第三步是求絕對(duì)值的和,如圖2所示,在這一步中,運(yùn)用了一個(gè)求和樹來完成求和的工作。在四字節(jié)方式下,八個(gè)差中有四個(gè)為零,不對(duì)結(jié)果產(chǎn)生影響。在樹結(jié)構(gòu)中,每一階段操作數(shù)的數(shù)量減半,第一階段,求和的操作數(shù)被減為四個(gè)。第二階段,求和的操作數(shù)被減為兩個(gè)。第三階段,得到了一個(gè)初步結(jié)果。在每一個(gè)階段中,為保持精度,必須將附加的一位加到結(jié)果當(dāng)中?梢钥吹,在第三步的七個(gè)求和節(jié)點(diǎn)上,將第一步得到的符號(hào)位分別加到結(jié)果當(dāng)中,這正是負(fù)數(shù)取補(bǔ)碼的要求,理論上說,符號(hào)位在哪個(gè)節(jié)點(diǎn)無關(guān),但必須注意將所有符號(hào)位全部加上
第四步也就是絕對(duì)值累加和的最后一步,從而計(jì)算出一個(gè)區(qū)域或塊中所有象素的差。在這最后一個(gè)節(jié)點(diǎn)上,同時(shí)也完成了將第三步所剩的最后的一個(gè)符號(hào)位進(jìn)行累加的功能。符號(hào)位全部累加到和中,且每個(gè)符號(hào)位只能累加一次。
圖2 運(yùn)動(dòng)估計(jì)協(xié)處理器結(jié)構(gòu)
3.2.3 最佳匹配選擇器
最佳匹配也就是通過計(jì)算得到的與目標(biāo)象素塊最相似的象素塊。為了加快整個(gè)圖象處理速度,這一尋找最相似象素塊的部分是通過運(yùn)動(dòng)估計(jì)協(xié)處理器的一部分專用硬件來實(shí)現(xiàn)的,從而運(yùn)動(dòng)估計(jì)器在尋找最相似象素塊時(shí)可以得到最快的處理速度。其處理流程圖如圖3所示。
圖3 最佳匹配選擇器處理流程圖
最佳匹配的尋找過程是一系列累加和比較的過程,將塊內(nèi)(這個(gè)塊通常為16x16大。┑乃邢笏攸c(diǎn)的差值全部累加起來,再利用PixelDist和PixelBest寄存器和一個(gè)比較器就能完成最佳匹配的選取。
對(duì)PixelDist和PixelBest寄存器的的初始化是通過對(duì)PixelDistAll和PixelBestAll兩個(gè)虛擬擴(kuò)展寄存器來完成的,一旦有對(duì)其的寫入操作,則將八個(gè)運(yùn)動(dòng)估計(jì)協(xié)處理器中的PixelDist清零,相應(yīng)的將PixelBest寄存器置為最大值。一般來講,在初始化后,就開始一次運(yùn)動(dòng)估計(jì)的過程,應(yīng)該指出的是在這之前應(yīng)將所要比較的兩幅圖象之一調(diào)入到PAU陣列中的寄存器中,另一幅圖象的數(shù)據(jù)則是在比較的過程中通過并行單元與數(shù)據(jù)CACHE的交叉網(wǎng)絡(luò)實(shí)時(shí)調(diào)入的。比較是在PixelDist與本次累加樹之和同PixelBest這兩個(gè)寄存器之間進(jìn)行的。如果PixelBest 中的值為小,則不進(jìn)行任何的操作;如果PixelDist中的值小,則將PixelDist的值寫入PixelBest中,相應(yīng)的將MatchCount 的值寫入BestMatchCount寄存器中。
MatchCount寄存器中的值為進(jìn)一步遞增的值,其目的是為識(shí)別最佳匹配塊而設(shè)置的,其值不能超過4095,否則將產(chǎn)生溢出。
3.3 運(yùn)動(dòng)估計(jì)相應(yīng)軟件過程簡(jiǎn)介
第一步: 圖象數(shù)據(jù)的調(diào)入:利用v_load 指令將要比較的兩幅圖象之一的數(shù)據(jù)寫入到PAU陣列的窗口寄存器中;
第二步: 寄存器初始化:利用對(duì)虛擬標(biāo)量寄存器PixelDistAll和PixelBestAll的寫入完成;
第三步: 圖象塊絕對(duì)值差累加:利用連續(xù)的v_PixelDist_xxx指令完成,注意運(yùn)算過程中從內(nèi)存中實(shí)時(shí)調(diào)入另一幅圖象的數(shù)據(jù);
第四步: 圖象塊累加和比較:利用v_PixelBest_xxx指令完成,得到8個(gè)最小值和其標(biāo)識(shí);
第五步: 將得到的八個(gè)最小值讀入到標(biāo)量寄存器中,再次比較得到真正的最小值及其標(biāo)識(shí), 這個(gè)標(biāo)識(shí)經(jīng)過換算即為要求的運(yùn)動(dòng)矢量;
(至此完成了一個(gè)圖象塊運(yùn)動(dòng)矢量的求解)
第六步: 根據(jù)所有圖象塊的運(yùn)動(dòng)矢量可以得到預(yù)測(cè)圖象;
第七步: 預(yù)測(cè)圖象與實(shí)際圖象得到差值圖象;
第八步: 將差值圖象和運(yùn)動(dòng)矢量進(jìn)行壓縮傳送;
第九步:在接收端利用差值圖象和運(yùn)動(dòng)矢量以及參考圖象將當(dāng)前圖象還原。
4 結(jié)束語
文中介紹了我們?cè)O(shè)計(jì)的VDSP視頻并行處理芯片中專用運(yùn)動(dòng)估計(jì)部分的實(shí)現(xiàn)方案,并對(duì)其硬件實(shí)現(xiàn)給出了具體分析,其實(shí)現(xiàn)方法為專用運(yùn)動(dòng)估計(jì)芯片和通用視頻 DSP芯片的設(shè)計(jì)提供了實(shí)用的電路,我們?cè)O(shè)計(jì)的VDSP中并行處理與運(yùn)動(dòng)估計(jì)相結(jié)合,可以完成靜態(tài)、動(dòng)態(tài)圖象壓縮以及小波變換和圖象編解碼功能,已在電視電話會(huì)議系統(tǒng)中得到廣泛應(yīng)用。就其運(yùn)動(dòng)估計(jì)部分而言,電路比較典型,易于實(shí)現(xiàn),結(jié)合這種設(shè)計(jì)思路設(shè)計(jì)出新的專用芯片具有比較好的前景。