專利名稱:用于h.264/avc編碼器的運(yùn)動(dòng)估計(jì)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種運(yùn)動(dòng)估計(jì)的方法,特別是涉及一種用于H.264/AVC編碼器的快速運(yùn)動(dòng)估計(jì)方法的硬件實(shí)現(xiàn)。
背景技術(shù):
H.264/AVC標(biāo)準(zhǔn)是由國(guó)際電信聯(lián)盟電信標(biāo)準(zhǔn)化部ITU-T的VCEG(視頻專家組)和國(guó)際標(biāo)準(zhǔn)化組織ISO的MPEG(運(yùn)動(dòng)圖像專家組)聯(lián)合開發(fā)的面向低碼率視頻通信應(yīng)用的視頻壓縮標(biāo)準(zhǔn),但是其優(yōu)異的壓縮性能使得它的作用并不僅僅局限于此,該標(biāo)準(zhǔn)在數(shù)字電視廣播、視頻實(shí)時(shí)通信、網(wǎng)絡(luò)視頻流媒體傳遞以及多媒體短信等方面都將發(fā)揮重要作用,近年來更是得到了廣泛地關(guān)注和研究。H.264/AVC標(biāo)準(zhǔn)對(duì)于運(yùn)動(dòng)圖像的壓縮能力很大程度上歸因于它所采用的運(yùn)動(dòng)估計(jì)算法,即將16*16的象素塊定義為宏塊(MB),在編碼時(shí)每個(gè)宏塊都可以被劃分為16*16、16*8、8*16、8*8、8*4、4*8或者4*4的7種大小、形狀不同的子塊(block),這種子塊的劃分方式稱為預(yù)測(cè)模式。在編碼時(shí)從視頻幀序列中選取部分幀圖作為參考幀,并以宏塊為單位對(duì)這些參考幀的象素?cái)?shù)據(jù)完全編碼;而在編碼其他非參考幀時(shí),也以宏塊為單位進(jìn)行編碼,方法如下。編碼時(shí)首先通過搜索、對(duì)比,確定各預(yù)測(cè)模式下當(dāng)前宏塊中各子塊在參考幀中對(duì)應(yīng)的最相似塊,求出各子塊在當(dāng)前幀的位置與其最相似塊在參考幀的位置之間的位移——稱為運(yùn)動(dòng)向量,以及當(dāng)前子塊與相似塊相同位置象素之間的差值——稱為殘差,最后只需編碼根據(jù)各預(yù)測(cè)模式對(duì)應(yīng)的編碼代價(jià)(編碼后碼流的大小)選擇的最佳預(yù)測(cè)模式及其對(duì)應(yīng)的運(yùn)動(dòng)向量和殘差數(shù)據(jù)。將上述運(yùn)動(dòng)估計(jì)策略配合整數(shù)離散余弦變換及熵編碼就能大大降低運(yùn)動(dòng)圖像的數(shù)據(jù)量。在H.264/AVC運(yùn)動(dòng)估計(jì)過程中,必須考慮所有預(yù)測(cè)模式的編碼代價(jià),即針對(duì)每一宏塊,必須計(jì)算其7種預(yù)測(cè)模式對(duì)應(yīng)的41個(gè)子塊的運(yùn)動(dòng)向量和殘差數(shù)據(jù);而且,運(yùn)動(dòng)向量的精度必須是1/4象素單位。
搜索當(dāng)前宏塊中各子塊在參考幀中最相似塊的過程,稱為運(yùn)動(dòng)估計(jì)。運(yùn)動(dòng)估計(jì)時(shí)需要在參考幀中確定一個(gè)搜索當(dāng)前子塊最相似塊的搜索范圍——稱為搜索區(qū)域。最精確的實(shí)現(xiàn)方式為全局搜索方法在搜索區(qū)域內(nèi)以單位象素為搜索步長(zhǎng)逐點(diǎn)計(jì)算當(dāng)前子塊與搜索區(qū)域子塊的相似度(通常根據(jù)兩個(gè)象素塊之間的象素差的絕對(duì)值之和SAD衡量),確定相似度最大(SAD最小)的塊為最相似子塊——稱為整數(shù)象素運(yùn)動(dòng)估計(jì);以1/2象素單位為步長(zhǎng),搜索當(dāng)前子塊與確定的最相似子塊周圍的1/2象素搜索區(qū)域,確定最佳1/2象素相似塊——稱為半象素運(yùn)動(dòng)估計(jì);以1/4象素單位為步長(zhǎng),搜索當(dāng)前子塊與確定的最佳1/2象素相似塊周圍的1/4象素搜索區(qū)域,確定最佳1/4象素相似塊——稱為1/4象素運(yùn)動(dòng)估計(jì);最終確定預(yù)測(cè)模式及其對(duì)應(yīng)的運(yùn)動(dòng)向量和殘差數(shù)據(jù)。上述過程是順序進(jìn)行的。
全局搜索方法雖然能夠得到最佳的運(yùn)動(dòng)估計(jì)結(jié)果,但是其計(jì)算量是驚人的,而且需要頻繁的訪問存放參考幀的存儲(chǔ)器,需要很長(zhǎng)的計(jì)算時(shí)間。而H.264/AVC標(biāo)準(zhǔn)應(yīng)用于視頻通信、數(shù)字廣播、網(wǎng)絡(luò)電視流媒體傳輸?shù)阮I(lǐng)域,對(duì)實(shí)時(shí)性的要求很高,這樣大的計(jì)算量和計(jì)算時(shí)間無法滿足這一要求。因此,實(shí)用的H.264/AVC編碼器需要采用快速運(yùn)動(dòng)估計(jì)方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種硬件實(shí)現(xiàn)的部分并行化的運(yùn)動(dòng)估計(jì)方法,該方法能滿足視頻通信類應(yīng)用的實(shí)時(shí)性要求,減少對(duì)存儲(chǔ)器的訪問次數(shù),提高H.264/AVC編碼器的工作頻率。
本發(fā)明所述的方法的思路在于,采用分層搜索的策略實(shí)現(xiàn)H.264運(yùn)動(dòng)估計(jì)器中的整數(shù)象素運(yùn)動(dòng)估計(jì),從而使得整數(shù)象素運(yùn)動(dòng)估計(jì)和分?jǐn)?shù)運(yùn)動(dòng)估計(jì)可以部分并行的執(zhí)行,提高了運(yùn)動(dòng)估計(jì)的處理速度。本發(fā)明所述的整數(shù)運(yùn)動(dòng)估計(jì)和分?jǐn)?shù)運(yùn)動(dòng)估計(jì)的部分并行指的是,將整數(shù)運(yùn)動(dòng)估計(jì)分為粗糙層整數(shù)象素運(yùn)動(dòng)估計(jì)和精細(xì)層整數(shù)象素運(yùn)動(dòng)估計(jì)兩層,兩層順序執(zhí)行;將分?jǐn)?shù)運(yùn)動(dòng)估計(jì)分為半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)兩層,兩層順序執(zhí)行;H.264/AVC運(yùn)動(dòng)估計(jì)器首先執(zhí)行粗糙層整數(shù)象素運(yùn)動(dòng)估計(jì),然后并行執(zhí)行精細(xì)層整數(shù)象素運(yùn)動(dòng)估計(jì)和半象素運(yùn)動(dòng)估計(jì)中的半象素插枝計(jì)算操作,最后執(zhí)行1/4象素運(yùn)動(dòng)估計(jì)。
本發(fā)明所述的系統(tǒng)的思路在于,根據(jù)本發(fā)明所述運(yùn)動(dòng)估計(jì)方法所處理數(shù)據(jù)的大小和類型的不同,采用了不同的存儲(chǔ)器策略,減少了對(duì)外部存儲(chǔ)器的訪問量,實(shí)現(xiàn)了一個(gè)基于硬件的并行化完成H.264/AVC運(yùn)動(dòng)估計(jì)的系統(tǒng)。本發(fā)明所述的存儲(chǔ)器策略,將在下文的實(shí)施例中給出詳細(xì)說明。
2.本發(fā)明的特征在于該方法是在一塊數(shù)字集成電路芯片內(nèi)依以下步驟實(shí)現(xiàn)的步驟(1),把運(yùn)動(dòng)圖像以幀為單位輸入當(dāng)前幀存儲(chǔ)器,該當(dāng)前幀存儲(chǔ)器以宏塊為單位把當(dāng)前宏塊輸入當(dāng)前宏塊存儲(chǔ)器;把符合H.264/AVC視頻編碼標(biāo)準(zhǔn)的視頻圖像以幀為單位輸入?yún)⒖紟鎯?chǔ)器;步驟(2),粗糙層數(shù)據(jù)預(yù)處理器按以下步驟進(jìn)行粗糙層數(shù)據(jù)預(yù)處理步驟(2.1),第1數(shù)據(jù)輸入緩存器從當(dāng)前宏塊存儲(chǔ)器中讀取32位當(dāng)前宏塊數(shù)據(jù);第2數(shù)據(jù)輸入緩存器從參考幀存儲(chǔ)器中讀取32位搜索區(qū)域數(shù)據(jù);步驟(2.2),步驟(2.1)中所述的兩個(gè)數(shù)據(jù)輸入緩沖器各自把4個(gè)連續(xù)輸入的32位數(shù)據(jù)合并成一個(gè)128位數(shù)據(jù)分別送到第1均值濾波器陣列和第2均值濾波器陣列;
步驟(2.3),步驟(2.2)中所述的兩個(gè)均值濾波器陣列依次同時(shí)獲取粗糙層當(dāng)前宏塊數(shù)據(jù)和粗糙層整數(shù)運(yùn)動(dòng)估計(jì)搜索區(qū)域數(shù)據(jù),輸出均為64位;其中,粗糙層整數(shù)運(yùn)動(dòng)估計(jì)搜索區(qū)域中的每個(gè)象素用以下公式求得Pelc=(Pel00+Pel01+Pel10+Pel11)/4,Pelc表示粗糙層的一個(gè)象素;Pel00、Pel01分別表示原始參考幀搜索區(qū)域第2*n行第2*m、第2*m+1個(gè)象素,Pel10、Pel11分別表示原始參考幀搜索區(qū)域第2*n+1行第2*m、第2*m+1個(gè)象素,n、m在
之間,從而得到一個(gè)48*48位的粗糙層運(yùn)動(dòng)估計(jì)的搜索區(qū)域,該宏塊的搜索區(qū)域中心位于當(dāng)前該宏塊左上角象素;步驟(2.4),第1、第2兩個(gè)均值濾波器陣列分別依次向當(dāng)前宏塊均值濾波后數(shù)據(jù)存儲(chǔ)器陣列和搜索區(qū)域移位寄存器陣列輸出64位的數(shù)據(jù),所述每個(gè)存儲(chǔ)器存放一個(gè)8位象素?cái)?shù)據(jù);步驟(3),粗糙層運(yùn)動(dòng)估計(jì)器按以下步驟進(jìn)行粗糙層運(yùn)動(dòng)估計(jì),并輸出預(yù)測(cè)模式以及相應(yīng)運(yùn)動(dòng)向量步驟(3.1),粗糙層數(shù)據(jù)預(yù)處理器向粗糙層運(yùn)動(dòng)估計(jì)器中的8位2*2塊的殘差計(jì)算器輸入當(dāng)前宏塊數(shù)據(jù)及粗糙層運(yùn)動(dòng)估計(jì)搜索區(qū)域數(shù)據(jù),殘差用SAD表示;步驟(3.2),所述8位2*2塊殘差計(jì)算器采用加法樹結(jié)構(gòu)在一個(gè)時(shí)鐘周期內(nèi)計(jì)算出4*4、4*8、8*4、8*8、8*16、16*8和16*16共7種預(yù)測(cè)模式對(duì)應(yīng)的所有2*2、2*4、4*2、4*4、4*8、8*4和8*8子塊對(duì)應(yīng)的殘差;步驟(3.3),最相似塊搜索器在每個(gè)時(shí)鐘來臨時(shí)比較從所述8位2*2塊殘差計(jì)算器得到的各種預(yù)測(cè)模式下當(dāng)前所有子塊的殘差與當(dāng)前時(shí)鐘前得到的最小殘差的大小,保存更小的殘差數(shù)據(jù),若當(dāng)前時(shí)鐘得到的殘差更小,則根據(jù)當(dāng)前相似塊的位置更新最小殘差對(duì)應(yīng)的運(yùn)動(dòng)向量;循環(huán)執(zhí)行步驟(3.1)~(3.3),直到粗糙層搜索區(qū)域搜索完畢,得到最小殘差及其相應(yīng)的運(yùn)動(dòng)向量;步驟(3.4),在步驟(3.3)執(zhí)行結(jié)束后,先把上述各種預(yù)測(cè)模式下各自對(duì)應(yīng)的各子塊的最小殘差相加,分別得到每種預(yù)測(cè)模式下的殘差和;其次,比較7個(gè)殘差和,選擇其中殘差和最小的預(yù)測(cè)模式作為最佳模式;步驟(3.5),運(yùn)動(dòng)向量均值器根據(jù)步驟(3.4)得到的最佳預(yù)測(cè)模式,把該模式對(duì)應(yīng)的各子塊的運(yùn)動(dòng)向量相加,取其均值,得到粗糙層運(yùn)動(dòng)估計(jì)的運(yùn)動(dòng)向量;步驟(4),用并行處理器按以下步驟并行執(zhí)行精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值
步驟(4.1),粗糙層運(yùn)動(dòng)估計(jì)器和參考幀存儲(chǔ)器依次分別把粗糙層運(yùn)動(dòng)估計(jì)的運(yùn)動(dòng)向量和參考幀數(shù)據(jù)送入增速象素輸入緩存器;步驟(4.2),所述整數(shù)象素輸入緩存器把24*24的精細(xì)層搜索區(qū)域數(shù)據(jù)輸入到精細(xì)層搜索區(qū)域移位寄存器陣列,而所述移位寄存器再把該精細(xì)層搜索區(qū)域數(shù)據(jù)送入精細(xì)層運(yùn)動(dòng)估計(jì)器,依次按以下步驟計(jì)算出精細(xì)層最小殘差及相應(yīng)的運(yùn)動(dòng)向量步驟(4.2.1),把所述精細(xì)層搜索區(qū)域數(shù)據(jù)、相應(yīng)的當(dāng)前宏塊數(shù)據(jù)送入一個(gè)精細(xì)層殘差計(jì)算器,計(jì)算出4*4、4*8、8*4、8*8、8*16、16*8以及4*4塊的殘差所述殘差計(jì)算器由4個(gè)各自的元素為8*8位殘差數(shù)據(jù)構(gòu)成的子殘差數(shù)據(jù)構(gòu)成的子殘差計(jì)算器構(gòu)成;在該子殘差計(jì)算器中,同一行4個(gè)殘差數(shù)據(jù)通過加法樹相加得到一個(gè)4*1子塊的殘差,4個(gè)4*1子塊的殘差相加得到一個(gè)4*4子塊的殘差,在一個(gè)時(shí)鐘周期內(nèi)計(jì)算出所有4*4塊的殘差,再通過加法樹結(jié)構(gòu),計(jì)算出當(dāng)前宏塊所有子塊對(duì)應(yīng)的殘差,循環(huán)執(zhí)行,一直到精細(xì)層搜索區(qū)域全部處理完畢;步驟(4.2.2),最相似搜索器在每個(gè)時(shí)鐘來臨時(shí)比較步驟(4.2.1)所述的當(dāng)前時(shí)鐘得到的殘差與當(dāng)前時(shí)鐘前得到的最小殘差的大小,若當(dāng)前時(shí)鐘得到的殘差更小,則根據(jù)當(dāng)前相似塊的位置更新最小的殘差對(duì)應(yīng)的運(yùn)動(dòng)向量;循環(huán)執(zhí)行,直到精細(xì)層搜索區(qū)域搜索完畢,得到最小殘差及其相應(yīng)的運(yùn)動(dòng)向量;步驟(4.3),所述整數(shù)象素輸入緩存器同時(shí)把30*30的半象素搜索區(qū)域數(shù)據(jù)送入半象素插值濾波器陣列,所述濾波器采用H.264/AVC標(biāo)準(zhǔn)指定的6抽頭FIR濾波器,所述陣列使用4個(gè)水平濾波器和8個(gè)垂直濾波器,該4個(gè)水平濾波器使用一行整數(shù)象素中的6個(gè)象素插值,該8個(gè)垂直濾波器使用一列整數(shù)象素或一列半象素中的六個(gè)象素插值,插值公式為Pelh=round((Pel0-5Pel1+20Pel2+20Pel3-5Pel4+Pel5)/32),其中,round()表示取整,下標(biāo)h表示半象素,下標(biāo)0~5表示產(chǎn)生半象素的6個(gè)整數(shù)象素和半象素所述半象素插值濾波器陣列通過半象素插值存儲(chǔ)器I輸出整數(shù)象素,同時(shí)通過A、B、C三個(gè)半象素存儲(chǔ)器分別輸出水平、垂直半象素以及夾于水平和垂直兩個(gè)插值之間的半象素之值;步驟(4.4),用并行計(jì)算結(jié)束判決器判決精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值濾波計(jì)算是否結(jié)束,如已結(jié)束,發(fā)出結(jié)束信號(hào);
步驟(5),用半象素運(yùn)動(dòng)估計(jì)器以及1/4象素運(yùn)動(dòng)估計(jì)器按以下步驟依次進(jìn)行半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)步驟(5.1),用半象素運(yùn)動(dòng)估計(jì)器進(jìn)行半象素運(yùn)動(dòng)估計(jì),并輸出半象素最小殘差和相應(yīng)的半象素運(yùn)動(dòng)向量,其步驟依次如下步驟(5.1.1),所述精細(xì)層運(yùn)動(dòng)估計(jì)器向半象素運(yùn)動(dòng)估計(jì)器中的片上存儲(chǔ)器接口輸入最小殘差及相應(yīng)的運(yùn)動(dòng)向量;所述三個(gè)半象素存儲(chǔ)器A、B、C向所述片上存儲(chǔ)器接口輸入半象素A、半象素B及半象素C;步驟(5.1.2),所述片上存儲(chǔ)器接口通過3個(gè)半象素輸入緩存器把A、B、C三類半象素分別送往三個(gè)半象素搜索區(qū)域存儲(chǔ)器后,在分別用3個(gè)半象素運(yùn)動(dòng)估計(jì)器按以下步驟對(duì)A、B、C三類半象素進(jìn)行運(yùn)動(dòng)估計(jì)首先,每個(gè)半象素運(yùn)動(dòng)估計(jì)器用一個(gè)4*4子塊的殘差計(jì)算器計(jì)算當(dāng)前宏塊的4*4子塊與半象素搜索區(qū)域4*4子塊的殘差;然后,用一個(gè)最相似塊選擇器對(duì)照不同類型搜索區(qū)域得到的最相似子塊的殘差,選擇其中最小的殘差與精細(xì)層搜索得到的最小殘差對(duì)比,得出更小的殘差對(duì)應(yīng)的相似塊為半象素運(yùn)動(dòng)估計(jì)的最相似塊,得出其半象素殘差及相應(yīng)的運(yùn)動(dòng)向量;步驟(5.2),用1/4象素運(yùn)動(dòng)估計(jì)器進(jìn)行1/4象素運(yùn)動(dòng)估計(jì),按以下步驟得到1/4象素的最小殘差及相應(yīng)的1/4運(yùn)動(dòng)向量步驟(5.2.1),把從半象素運(yùn)動(dòng)估計(jì)器輸出的半象素最小殘差以及相應(yīng)的運(yùn)動(dòng)向量、半象素插值存儲(chǔ)器I得到的整數(shù)象素I、半象素插值存儲(chǔ)器A、B、C得到的半象素A、B、C以及當(dāng)前宏塊存儲(chǔ)器的當(dāng)前宏塊都輸入1/4象素插值存儲(chǔ)器接口;步驟(5.2.2),1/4象素插值計(jì)算器陣列從所述1/4象素插值存儲(chǔ)器接口輸入的要計(jì)算的一個(gè)1/4象素所相鄰的兩個(gè)半象素或者一個(gè)半象素和一個(gè)整數(shù)象素求均值得到該1/4象素,可得到12種1/4象素,但只計(jì)算所述半象素運(yùn)動(dòng)估計(jì)器得到的半象素最相似塊的象素周圍的8種1/4象素;步驟(5.2.3),所述1/4象素插值計(jì)算器陣列把所得的所有1/4象素分別存入8個(gè)1/4象素搜索區(qū)域存儲(chǔ)器;步驟(5.2.4),8個(gè)1/4象素運(yùn)動(dòng)估計(jì)器分別用一個(gè)4*4塊的殘差計(jì)算器分別從所述8個(gè)1/4象素搜索區(qū)域存儲(chǔ)器得到1/4象素塊和預(yù)先內(nèi)存的當(dāng)前宏塊的4*4子塊之間的殘差;
步驟(5.2.5),一個(gè)最相似塊選擇器選擇步驟(5.2.4)種所述8種搜索區(qū)域中殘差最小的作為最佳1/4象素相似塊,并計(jì)算相應(yīng)的運(yùn)動(dòng)向量,再把該殘差與半象素搜索得到的最小殘差相比,選擇最小的殘差對(duì)應(yīng)的相似塊作為H.264/AVC運(yùn)動(dòng)估計(jì)器生成的最終選擇的最佳相似塊;步驟(6),用一個(gè)最終運(yùn)動(dòng)向量計(jì)算器計(jì)算H.264/AVC運(yùn)動(dòng)估計(jì)器生成的最終運(yùn)動(dòng)向量MVf,并存入運(yùn)動(dòng)估計(jì)結(jié)果存儲(chǔ)器;MVf=8MVc+4MVp+2MVh+MVq,其中,c、p、h、q對(duì)應(yīng)的運(yùn)動(dòng)向量分別表示粗糙層、精細(xì)層、半象素和1/4象素運(yùn)動(dòng)估計(jì)器得到的運(yùn)動(dòng)向量。
本發(fā)明提出的H.264/AVC運(yùn)動(dòng)估計(jì)方法可以極大的提高運(yùn)動(dòng)估計(jì)的計(jì)算速度。與全局搜索方法相比,采用相同的搜索區(qū)域時(shí),本發(fā)明提出的H.264/AVC運(yùn)動(dòng)估計(jì)方法可以節(jié)省64.5%的計(jì)算時(shí)間。本發(fā)明提出的H.264/AVC運(yùn)動(dòng)估計(jì)系統(tǒng)各計(jì)算單元的計(jì)算時(shí)間與全局搜索方法的比較如下表所示。
表中的整數(shù)數(shù)據(jù)表示兩種方法完成相同計(jì)算所用的時(shí)鐘數(shù),百分比表示本發(fā)明提出的運(yùn)動(dòng)估計(jì)方法完成相同計(jì)算所用時(shí)鐘數(shù)占全局搜索方法的百分比。
本說明書中的附圖僅為圖示的目的而提供,并不對(duì)本發(fā)明的內(nèi)容產(chǎn)生任何限制,其中圖1示出了經(jīng)典的全局搜索運(yùn)動(dòng)估計(jì)器的流程圖;圖2a示出了本發(fā)明所述方法的運(yùn)動(dòng)估計(jì)器的工作原理圖;圖2b示出了本發(fā)明提出的運(yùn)動(dòng)估計(jì)方法的工作流程圖;圖2c示出了實(shí)現(xiàn)本發(fā)明所述運(yùn)動(dòng)估計(jì)器系統(tǒng)工作的狀態(tài)轉(zhuǎn)移圖;圖3示出了本發(fā)明提出的H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)的結(jié)構(gòu)框圖;圖4a示出了本發(fā)明采用的運(yùn)動(dòng)向量預(yù)測(cè)方法;
圖4b示出了本發(fā)明中粗糙層數(shù)據(jù)預(yù)處理器的簡(jiǎn)單框圖;圖4c示出了本發(fā)明中獲取粗糙層整數(shù)象素運(yùn)動(dòng)估計(jì)搜索區(qū)域的方法;圖5a示出了本發(fā)明中粗糙層整數(shù)象素運(yùn)動(dòng)估計(jì)器的簡(jiǎn)單框圖;圖5b示出了本發(fā)明中粗糙層運(yùn)動(dòng)估計(jì)器的SAD計(jì)算器的硬件結(jié)構(gòu);圖5c示出了本發(fā)明中粗糙層運(yùn)動(dòng)估計(jì)器的SAD計(jì)算器中計(jì)算一個(gè)2*2子塊SAD的硬件結(jié)構(gòu);圖6a示出了本發(fā)明中精細(xì)層整數(shù)象素運(yùn)動(dòng)估計(jì)搜索區(qū)域與半象素插值所需整數(shù)象素的關(guān)系;圖6b示出了本發(fā)明中半象素插值和精細(xì)層整數(shù)象素運(yùn)動(dòng)估計(jì)并行處理的流程;圖6c示出了本發(fā)明中并行處理器的簡(jiǎn)單框圖;圖6d示出了本發(fā)明采用的插值濾波器陣列結(jié)構(gòu);圖6e示出了本發(fā)明中精細(xì)層搜索區(qū)域數(shù)據(jù)的存儲(chǔ)策略;圖6f示出了本發(fā)明中精細(xì)層整數(shù)象素運(yùn)動(dòng)估計(jì)器簡(jiǎn)單框圖;圖6g示出了SAD計(jì)算器中計(jì)算8*8、8*4、4*8和4*4塊的SAD的硬件結(jié)構(gòu);圖6h示出了本發(fā)明中并行計(jì)算過程的時(shí)序示意圖;圖7a示出了整數(shù)象素與半象素、1/4象素的位置關(guān)系;圖7b示出了本發(fā)明中半象素運(yùn)動(dòng)估計(jì)器的簡(jiǎn)單框圖;圖7c示出了本發(fā)明中1/4象素運(yùn)動(dòng)估計(jì)器的簡(jiǎn)單框圖;圖7d示出了符合本發(fā)明實(shí)施實(shí)例的H.264/AVC運(yùn)動(dòng)估計(jì)器簡(jiǎn)單框圖。
具體實(shí)施例方式
本發(fā)明的顯著特點(diǎn)在于,根據(jù)H.264/AVC運(yùn)動(dòng)估計(jì)的工作原理、運(yùn)動(dòng)估計(jì)過程中整數(shù)運(yùn)動(dòng)估計(jì)和分?jǐn)?shù)運(yùn)動(dòng)估計(jì)的數(shù)據(jù)相關(guān)性以及視頻通信類應(yīng)用對(duì)壓縮圖像質(zhì)量的要求,提出了部分并行的運(yùn)動(dòng)估計(jì)方法。本發(fā)明提出的運(yùn)動(dòng)估計(jì)方法使得整數(shù)運(yùn)動(dòng)估計(jì)和分?jǐn)?shù)運(yùn)動(dòng)估計(jì)可以部分地并行執(zhí)行,從而達(dá)到提高運(yùn)動(dòng)估計(jì)速度的目的。
本發(fā)明的另一特點(diǎn)在于,采用了一種運(yùn)動(dòng)向量預(yù)測(cè)值生成方法和合理的搜索范圍,使得本發(fā)明所述的運(yùn)動(dòng)估計(jì)器系統(tǒng)在整數(shù)運(yùn)動(dòng)估計(jì)時(shí)相鄰宏塊可以共享參考幀的搜索區(qū)域數(shù)據(jù),在半象素運(yùn)動(dòng)估計(jì)時(shí)當(dāng)前宏塊的各子塊可以共享參考幀的搜索區(qū)域數(shù)據(jù),從而達(dá)到降低存儲(chǔ)器訪問次數(shù)的目的。
本發(fā)明的第三個(gè)特點(diǎn)在于,采用了一種可重用的硬件結(jié)構(gòu),該結(jié)構(gòu)在半象素和1/4象素運(yùn)動(dòng)估計(jì)時(shí)被用來計(jì)算SAD,從而降低了半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)的硬件資源開銷。
本發(fā)明的第四個(gè)特點(diǎn)在于提出了一種數(shù)字電路系統(tǒng),該系統(tǒng)實(shí)現(xiàn)了本發(fā)明所提出的并行化運(yùn)動(dòng)估計(jì)方法。該系統(tǒng)可以從當(dāng)前幀和參考幀存儲(chǔ)器中讀取數(shù)據(jù),快速的完成運(yùn)動(dòng)估計(jì)。
下面將根據(jù)附圖對(duì)本發(fā)明的具體實(shí)施方式
進(jìn)行詳細(xì)說明。
圖1示出了經(jīng)典的全局搜索運(yùn)動(dòng)估計(jì)器的流程圖。H.264/AVC標(biāo)準(zhǔn)中運(yùn)動(dòng)估計(jì)可以分為兩個(gè)階段整數(shù)象素運(yùn)動(dòng)估計(jì)和分?jǐn)?shù)象素運(yùn)動(dòng)估計(jì)。其中分?jǐn)?shù)象素運(yùn)動(dòng)估計(jì)又包括半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)。不同精度級(jí)別的運(yùn)動(dòng)估計(jì)又包括數(shù)據(jù)預(yù)處理和最相似塊搜索兩個(gè)環(huán)節(jié)。數(shù)據(jù)預(yù)處理環(huán)節(jié)的功能在于根據(jù)當(dāng)前處理的宏塊或者子塊的位置以及運(yùn)動(dòng)估計(jì)的搜索精度,產(chǎn)生相應(yīng)的搜索區(qū)域圖像數(shù)據(jù),這些數(shù)據(jù)可能是需要從存放參考幀的外部存儲(chǔ)器中讀取,也可能需要從參考幀存儲(chǔ)器中讀取數(shù)據(jù)后通過插值計(jì)算得到,但都必須在最相似塊搜索環(huán)節(jié)之前得到。最相似塊搜索環(huán)節(jié)的功能在于在數(shù)據(jù)預(yù)處理環(huán)節(jié)產(chǎn)生的搜索區(qū)域中搜索當(dāng)前宏塊或者子塊的最相似塊。計(jì)算當(dāng)前精度運(yùn)動(dòng)估計(jì)的搜索區(qū)域需要用到更粗糙精度的運(yùn)動(dòng)估計(jì)的結(jié)果,由于整數(shù)象素運(yùn)動(dòng)估計(jì)的搜索范圍比較大,最后得到的當(dāng)前宏塊各子塊的運(yùn)動(dòng)向量也比較分散,因此不能提前估計(jì)當(dāng)前宏塊分?jǐn)?shù)象素運(yùn)動(dòng)估計(jì)搜索區(qū)域的位置。在這種數(shù)據(jù)相關(guān)性的限制下,全局搜索運(yùn)動(dòng)估計(jì)必須順序進(jìn)行。因此全局搜索運(yùn)動(dòng)估計(jì)方法的流程圖(圖1)也是該方法執(zhí)行的狀態(tài)轉(zhuǎn)移圖。
熟悉H.264視頻壓縮編碼標(biāo)準(zhǔn)的人都清楚,如果整數(shù)運(yùn)動(dòng)估計(jì)的搜索區(qū)域比較小,那么在其基礎(chǔ)上進(jìn)行的分?jǐn)?shù)運(yùn)動(dòng)估計(jì)也會(huì)限定在有限的范圍內(nèi),這樣就可以提前計(jì)算該范圍內(nèi)的半象素?cái)?shù)據(jù)以產(chǎn)生半象素搜索區(qū)域,從而在付出增加少許計(jì)算量和存儲(chǔ)空間的代價(jià)后,提高整個(gè)運(yùn)動(dòng)估計(jì)的并行性和計(jì)算速度。而在視頻通信等應(yīng)用中,處理的視頻圖像的運(yùn)動(dòng)速度并不快,變化范圍也不大,甚至大部分圖像(背景)都是完全不變的,所以運(yùn)動(dòng)估計(jì)的搜索范圍并不需要很大。本發(fā)明正是基于上述考慮,提出了一種部分并行的H.264/AVC運(yùn)動(dòng)估計(jì)方法。圖2a示出了本發(fā)明提出的運(yùn)動(dòng)估計(jì)方法的工作原理圖。本發(fā)明提出的方法在整數(shù)象素運(yùn)動(dòng)估計(jì)時(shí)采用了分層搜索的策略分為粗糙層運(yùn)動(dòng)估計(jì)和精細(xì)層運(yùn)動(dòng)估計(jì)兩層。這樣,在粗糙層運(yùn)動(dòng)估計(jì)結(jié)束后,精細(xì)層運(yùn)動(dòng)估計(jì)的搜索區(qū)域會(huì)小很多;此時(shí),直接計(jì)算精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域及其周圍的半象素,相比于在精細(xì)層運(yùn)動(dòng)估計(jì)完成后再根據(jù)各個(gè)子塊的運(yùn)動(dòng)向量分別計(jì)算各子塊的半象素搜索區(qū)域,要節(jié)約大量時(shí)間,因此更易于滿足實(shí)時(shí)性。另外,精細(xì)層搜索和半象素插值計(jì)算都需要讀入?yún)⒖紟脑紙D像數(shù)據(jù),而且兩者需要的大部分圖像數(shù)據(jù)是相同的?;谏鲜隹紤],本發(fā)明提出的方法在粗糙層搜索之后,同時(shí)進(jìn)行精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值計(jì)算。即粗糙層整數(shù)運(yùn)動(dòng)估計(jì)結(jié)束后,精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值計(jì)算并行執(zhí)行(即圖2a中所示的并行結(jié)構(gòu)),兩者均完成后才開始半象素運(yùn)動(dòng)估計(jì)。半象素運(yùn)動(dòng)估計(jì)結(jié)束后,依次進(jìn)行1/4象素插值計(jì)算和運(yùn)動(dòng)估計(jì)。最后,根據(jù)各個(gè)精度的運(yùn)動(dòng)估計(jì)得到的運(yùn)動(dòng)向量計(jì)算最終的運(yùn)動(dòng)向量和相應(yīng)的殘差數(shù)據(jù)。
圖2b示出了本發(fā)明提出的運(yùn)動(dòng)估計(jì)方法實(shí)現(xiàn)的流程圖,分如下步驟依次執(zhí)行1.根據(jù)處理的圖像特征初始化運(yùn)動(dòng)估計(jì)系統(tǒng)的參數(shù),包括初始化幀圖寬高、初始化運(yùn)動(dòng)估計(jì)系統(tǒng)各模塊狀態(tài)等;2.輸入當(dāng)前宏塊數(shù)據(jù)及其對(duì)應(yīng)的粗糙層運(yùn)動(dòng)估計(jì)搜索區(qū)域數(shù)據(jù),并通過均值濾波計(jì)算粗糙層數(shù)據(jù),即粗糙層圖像數(shù)據(jù)預(yù)處理;3.粗糙層運(yùn)動(dòng)估計(jì),得到當(dāng)前宏塊的預(yù)測(cè)模式和4象素精度的運(yùn)動(dòng)向量,該向量是當(dāng)前宏塊中各子塊運(yùn)動(dòng)向量的均值;4.并行執(zhí)行精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值計(jì)算,得到整數(shù)象素精度的運(yùn)動(dòng)向量和半象素搜索區(qū)域數(shù)據(jù);5.半象素運(yùn)動(dòng)估計(jì),得到半象素精度的運(yùn)動(dòng)向量;6.1/4象素插值計(jì)算和運(yùn)動(dòng)估計(jì),得到1/4象素精度的運(yùn)動(dòng)向量;7.根據(jù)上述各個(gè)精度的運(yùn)動(dòng)估計(jì)結(jié)果計(jì)算最重的1/4象素精度的運(yùn)動(dòng)向量和相應(yīng)的殘差數(shù)據(jù);8.將7中得到的結(jié)果存入存儲(chǔ)器。
其中,并行執(zhí)行模塊實(shí)現(xiàn)方式如下所述A.輸入?yún)⒖紟麛?shù)象素?cái)?shù)據(jù)時(shí),進(jìn)行半象素插值計(jì)算。
B.同時(shí)判斷整數(shù)象素是否為精細(xì)層運(yùn)動(dòng)估計(jì)的搜索區(qū)域數(shù)據(jù),如果不是,則不進(jìn)行操作;如果是,則將數(shù)據(jù)存入移位寄存器,當(dāng)所有搜索區(qū)域數(shù)據(jù)都輸入后,開始精細(xì)層運(yùn)動(dòng)估計(jì)。
C.當(dāng)精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值計(jì)算都結(jié)束后,整個(gè)并行結(jié)構(gòu)操作完成。
如圖2a所示,H.264/AVC編碼器系統(tǒng)從整體上看是順序執(zhí)行的,但是“精細(xì)層整數(shù)象素運(yùn)動(dòng)估計(jì)”單元和“半象素插值”單元是在“整數(shù)象素輸入”單元的基礎(chǔ)上并行的,所以,把這三個(gè)模塊合并到一個(gè)狀態(tài),即可得到本發(fā)明提出的運(yùn)動(dòng)估計(jì)器系統(tǒng)硬件實(shí)現(xiàn)的狀態(tài)轉(zhuǎn)移圖,如圖2c所示。圖中,ME_reset為高時(shí)整個(gè)運(yùn)動(dòng)估計(jì)器清零,不工作;ME_reset為低時(shí),如果Int_Pred_en為高,表示編碼器選擇了幀間預(yù)測(cè)模式。當(dāng)CMB_start為高時(shí),表明可以處理當(dāng)前宏塊,運(yùn)動(dòng)估計(jì)器從空閑狀態(tài)轉(zhuǎn)入工作狀態(tài)。Data_Pretreat_fin為高表示粗糙層運(yùn)動(dòng)估計(jì)需要的數(shù)據(jù)已經(jīng)準(zhǔn)備好,可以開始搜索粗糙層最相似塊。Int_4_Pred_fin為高時(shí),表示粗糙層運(yùn)動(dòng)估計(jì)已經(jīng)結(jié)束,開始進(jìn)行并行計(jì)算;在完成了整數(shù)象素輸入、半象素插值計(jì)算和精細(xì)層運(yùn)動(dòng)估計(jì)之后,Mixed_Operation_fin為高,運(yùn)動(dòng)估計(jì)器開始進(jìn)行分?jǐn)?shù)象素運(yùn)動(dòng)估計(jì)。HME_fin為高時(shí)表示半象素運(yùn)動(dòng)估計(jì)的完成;Quat_ME_fin為高時(shí)表示1/4象素運(yùn)動(dòng)估計(jì)和最終運(yùn)動(dòng)向量計(jì)算的完成。當(dāng)1/4象素運(yùn)動(dòng)估計(jì)完成時(shí),如果Int_Pred_en和CMB_start為高,則繼續(xù)對(duì)下一宏塊進(jìn)行運(yùn)動(dòng)估計(jì);否則,整個(gè)運(yùn)動(dòng)估計(jì)器轉(zhuǎn)入空閑狀態(tài)。
圖3示出了本發(fā)明提出的H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)的結(jié)構(gòu)框圖。其中,粗糙層數(shù)據(jù)預(yù)處理器、粗糙層運(yùn)動(dòng)估計(jì)器、并行結(jié)構(gòu)整數(shù)象素?cái)?shù)據(jù)輸入結(jié)構(gòu)、精細(xì)層運(yùn)動(dòng)估計(jì)器、半象素插值計(jì)算陣列、半象素運(yùn)動(dòng)估計(jì)器、1/4象素運(yùn)動(dòng)估計(jì)器和最終運(yùn)動(dòng)向量計(jì)算器為H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)的數(shù)據(jù)處理單元;當(dāng)前幀/參考幀存儲(chǔ)器、當(dāng)前宏塊存儲(chǔ)器、粗糙層預(yù)處理結(jié)果存儲(chǔ)器、精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域存儲(chǔ)器、半象素插值存儲(chǔ)器、半象素運(yùn)動(dòng)估計(jì)搜索區(qū)域存儲(chǔ)器和運(yùn)動(dòng)估計(jì)結(jié)果存儲(chǔ)器是H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)的數(shù)據(jù)存儲(chǔ)單元。上述數(shù)據(jù)處理和存儲(chǔ)單元的具體硬件實(shí)現(xiàn)將詳述如下1.粗糙層數(shù)據(jù)預(yù)處理器在視頻壓縮技術(shù)中,通常通過當(dāng)前宏塊的相鄰塊的運(yùn)動(dòng)向量預(yù)測(cè)當(dāng)前宏塊的運(yùn)動(dòng)向量,然后以此運(yùn)動(dòng)向量預(yù)測(cè)值為搜索區(qū)域中心,輸入?yún)⒖紟兴阉鲄^(qū)域的圖像數(shù)據(jù),進(jìn)行最佳相似塊的搜索。這種方法針對(duì)當(dāng)前幀所有宏塊進(jìn)行運(yùn)動(dòng)向量預(yù)測(cè),增加了計(jì)算量;同時(shí),由于當(dāng)前幀所有宏塊的搜索區(qū)域中心都不相同而且分布沒有規(guī)律,無法預(yù)測(cè),所以必須分別輸入每一宏塊的搜索區(qū)域數(shù)據(jù),增加了對(duì)存儲(chǔ)器的訪問量。本發(fā)明在粗糙層整數(shù)運(yùn)動(dòng)估計(jì)時(shí)采用(0,0)作為當(dāng)前宏塊各子塊的運(yùn)動(dòng)向量預(yù)測(cè)值,即以當(dāng)前宏塊的坐標(biāo)(當(dāng)前宏塊左上角象素在當(dāng)前幀中的位置)作為該宏塊的搜索區(qū)域中心,克服了上述傳統(tǒng)運(yùn)動(dòng)向量預(yù)測(cè)方法的不足。本發(fā)明采用的方法使得同一宏塊中各個(gè)子塊的搜索區(qū)域數(shù)據(jù)可以一起讀入,交疊部分不需重復(fù)輸入;而且相鄰宏塊的大部分搜索區(qū)域數(shù)據(jù)可以共享,減少了對(duì)存儲(chǔ)器的訪問。圖4a示出了本發(fā)明采用的運(yùn)動(dòng)向量預(yù)測(cè)方法。以搜索區(qū)域?yàn)?8*48為例。如圖4a所示,處理宏塊1(MB1)時(shí)有9個(gè)MB構(gòu)成參考幀的搜索區(qū)域,其中6個(gè)在經(jīng)過簡(jiǎn)單移位后可以在處理MB2時(shí)使用,這將節(jié)省2/3的存儲(chǔ)器訪問量。
圖4b示出了粗糙層數(shù)據(jù)預(yù)處理器的簡(jiǎn)單框圖。該預(yù)處理器包括兩個(gè)數(shù)據(jù)輸入緩存器,兩個(gè)均值濾波器陣列,2個(gè)搜索區(qū)域移位寄存器陣列A、B,一個(gè)當(dāng)前宏塊均值濾波后數(shù)據(jù)存儲(chǔ)器。其中,32bit當(dāng)前宏塊數(shù)據(jù)和32bit搜索區(qū)域數(shù)據(jù)分別從當(dāng)前幀存儲(chǔ)器和參考幀存儲(chǔ)器中讀取,兩個(gè)數(shù)據(jù)輸入緩存器將4個(gè)連續(xù)輸入的32bit數(shù)據(jù)合并為1個(gè)128bit數(shù)據(jù)輸出到均值濾波器陣列;均值濾波器陣列用于獲取粗糙層整數(shù)運(yùn)動(dòng)估計(jì)搜索區(qū)域數(shù)據(jù)和粗糙層當(dāng)前宏塊數(shù)據(jù),輸出為64bit;壓縮后的當(dāng)前宏塊存放在當(dāng)前宏塊均值濾波后的數(shù)據(jù)存儲(chǔ)器中,粗糙層搜索區(qū)域數(shù)據(jù)被分為2塊存放在搜索區(qū)域移位寄存器陣列A和B中。搜索區(qū)域移位寄存器陣列A和B分別是16行24列和8行24列的移位寄存器陣列,每個(gè)寄存器可以存放一個(gè)8bit象素?cái)?shù)據(jù),當(dāng)前宏塊均值濾波后的數(shù)據(jù)存儲(chǔ)器是一個(gè)8*8的寄存器陣列,每個(gè)寄存器可以存放一個(gè)8bit象素?cái)?shù)據(jù),并且可以被直接讀寫,上述存儲(chǔ)器構(gòu)成了圖3中所示的粗糙層預(yù)處理結(jié)果存儲(chǔ)器。
圖4c中示出了本發(fā)明中獲取粗糙層整數(shù)運(yùn)動(dòng)估計(jì)搜索區(qū)域的方法,參考幀中每個(gè)2*2塊的4個(gè)原始象素均值濾波得到一個(gè)粗糙層搜索區(qū)域象素。在本發(fā)明中,粗糙層運(yùn)動(dòng)估計(jì)的搜索區(qū)域?yàn)?8*48的塊均值濾波器的計(jì)算公式為Pelc=(Pel00+Pel01+Pel10+Pel11)/4其中下標(biāo)c表示生成粗糙層象素的下標(biāo),00和01表示原始參考幀搜索區(qū)域第2*n行第2*m、第2*m+1個(gè)象素的下標(biāo),10和11表示原始參考幀搜索區(qū)域第2*n+1行第2*m、第2*m+1個(gè)象素的下標(biāo)(n、m在
之間)。
2.粗糙層運(yùn)動(dòng)估計(jì)器如上文所述,H.264視頻壓縮標(biāo)準(zhǔn)的運(yùn)動(dòng)估計(jì)中,存在7種預(yù)測(cè)模式,其中編碼代價(jià)最低的被稱之為最佳預(yù)測(cè)模式。通常,在運(yùn)動(dòng)估計(jì)結(jié)束時(shí),通過編碼代價(jià)確定最佳預(yù)測(cè)模式,編碼代價(jià)函數(shù)為Jmode(Mode/λmode)=SAD(Mode)+λmode*R(Mode)其中SAD(Mode)和R(Mode)分別為圖像殘差數(shù)據(jù)和其他信息(包括運(yùn)動(dòng)向量)的編碼代價(jià),λmode是拉格朗日乘子。熟悉視頻壓縮技術(shù)的人都知道,殘差數(shù)據(jù)的編碼代價(jià)在整個(gè)編碼代價(jià)中起主導(dǎo)作用,因此通常忽略其他信息的編碼代價(jià)。但是如果等到1/4象素運(yùn)動(dòng)估計(jì)結(jié)束再根據(jù)SAD(Mode)選擇最佳預(yù)測(cè)模式,計(jì)算量很大,因此在本發(fā)明中,粗糙層整數(shù)運(yùn)動(dòng)估計(jì)結(jié)束后將確定運(yùn)動(dòng)估計(jì)的最佳預(yù)測(cè)模式,這將極大的降低H.264/AVC運(yùn)動(dòng)估計(jì)的計(jì)算量。同時(shí),粗糙層運(yùn)動(dòng)估計(jì)還得到當(dāng)前宏塊中各子塊的運(yùn)動(dòng)向量。在精細(xì)層運(yùn)動(dòng)估計(jì)時(shí),如果以這些運(yùn)動(dòng)向量為搜索區(qū)域中心,則每個(gè)子塊的搜索區(qū)域數(shù)據(jù)都得分別輸入,實(shí)際上輸入的各子塊搜索區(qū)域數(shù)據(jù)很多都是重復(fù)的,這增加了對(duì)參考幀存儲(chǔ)器的訪問量。因此,在本發(fā)明中將當(dāng)前宏塊各子塊的運(yùn)動(dòng)向量求均值作為整個(gè)宏塊精細(xì)層整數(shù)運(yùn)動(dòng)估計(jì)的搜索區(qū)域中心,這使得精細(xì)層運(yùn)動(dòng)估計(jì)時(shí)各個(gè)子塊的搜索區(qū)域可以一起讀入,從而節(jié)省了訪問參考幀存儲(chǔ)器的時(shí)間。
圖5a示出了本發(fā)明中粗糙層運(yùn)動(dòng)估計(jì)器的簡(jiǎn)單框圖。該運(yùn)動(dòng)估計(jì)器輸入經(jīng)過預(yù)處理后的當(dāng)前宏塊和搜索區(qū)域數(shù)據(jù),輸出為當(dāng)前宏塊各子塊運(yùn)動(dòng)向量的均值和預(yù)測(cè)模式。該運(yùn)動(dòng)估計(jì)器包括一個(gè)SAD計(jì)算器,最相似塊搜索器,一個(gè)預(yù)測(cè)模式選擇器和一個(gè)計(jì)算當(dāng)前宏塊各子塊運(yùn)動(dòng)向量均值的運(yùn)動(dòng)向量均值器。
圖5b示出了本發(fā)明中粗糙層運(yùn)動(dòng)估計(jì)SAD計(jì)算器的硬件結(jié)構(gòu)。圖中SAD_n_m_l表示計(jì)算得到的SAD,其中n和m分別表示SAD對(duì)應(yīng)的象素塊的列數(shù)和行數(shù),l表示同樣行數(shù)列數(shù)下SAD的序號(hào)。粗糙層運(yùn)動(dòng)估計(jì)之前,圖中每個(gè)圓圈(稱為PE)均存放了一個(gè)粗糙層當(dāng)前宏塊象素;當(dāng)粗糙層運(yùn)動(dòng)估計(jì)開始后,每個(gè)時(shí)鐘周期都有一行8個(gè)須處理的搜索區(qū)域象素輸入并被傳遞到相應(yīng)列的8個(gè)PE,計(jì)算當(dāng)前宏塊象素與搜索區(qū)域象素的絕對(duì)值之差;包圍同一行2個(gè)PE的虛線矩形框?yàn)榧臃?,得?*1塊的SAD;計(jì)算結(jié)果傳送到右邊的小矩形中,該矩形用來將本行2*1SAD與其上一行的2*1SAD相加并保存計(jì)算結(jié)果,同時(shí)還可起到延時(shí)、同步的作用;每2個(gè)2*1SAD相加得到一個(gè)2*2塊的SAD。圖5c示出了本發(fā)明中粗糙層運(yùn)動(dòng)估計(jì)器的SAD計(jì)算器中計(jì)算一個(gè)2*2子塊SAD的硬件結(jié)構(gòu),其中Pelc和Pelr分別表示當(dāng)前宏塊和搜索區(qū)域的象素,它們?cè)谝粋€(gè)PE里相減并求絕對(duì)值;兩個(gè)PE的計(jì)算結(jié)果相加得到了一個(gè)2*1的SAD,并存儲(chǔ)在右側(cè)的存儲(chǔ)器中;兩個(gè)存儲(chǔ)器中的2*1SAD在加法器中相加得到一個(gè)2*2的SAD。通過這種結(jié)構(gòu),在一個(gè)周期內(nèi)可計(jì)算出所有2*2子塊的SAD;再加上PE陣列下方的加法樹,可計(jì)算出粗糙層當(dāng)前宏塊的所有2*2、2*4、4*2、4*4、4*8、8*4和8*8子塊對(duì)應(yīng)的SAD;下一個(gè)時(shí)鐘到來時(shí),輸入新的一行搜索區(qū)域數(shù)據(jù),繼續(xù)重復(fù)上述過程……??梢?,該硬件結(jié)構(gòu)可以在一個(gè)時(shí)鐘中計(jì)算出4*4、4*8、8*4、8*8、8*16、16*8和16*16等7種預(yù)測(cè)模式對(duì)應(yīng)的所有2*2、2*4、4*2、4*4、4*8、8*4和8*8子塊對(duì)應(yīng)的SAD。
最相似塊搜索器完成以下功能在每個(gè)時(shí)鐘來臨時(shí)比較當(dāng)前時(shí)鐘得到的所有子塊的SAD與當(dāng)前時(shí)鐘前最小SAD的大小,保存更小的SAD數(shù)據(jù)到存放最小SAD的寄存器中;如果當(dāng)前時(shí)鐘的得到的SAD更小,則根據(jù)當(dāng)前相似塊的位置更新最小SAD對(duì)應(yīng)的運(yùn)動(dòng)向量。上述操作循環(huán)執(zhí)行直到粗糙層搜索區(qū)域搜索完畢,此時(shí)得到最小SAD及其對(duì)應(yīng)的運(yùn)動(dòng)向量。
預(yù)測(cè)模式選擇器在最相似塊搜索器停止工作后開始執(zhí)行,它首先把4*4、4*8、8*4、8*8、8*16、16*8和16*16等7種模式對(duì)應(yīng)的各子塊的最小SAD分別相加,分別得到7種模式下的SAD之和,然后比較7個(gè)SAD之和,選擇SAD之和最小的預(yù)測(cè)模式作為最佳預(yù)測(cè)模式。運(yùn)動(dòng)向量均值器根據(jù)預(yù)測(cè)模式選擇器選擇的最佳預(yù)測(cè)模式,將該模式對(duì)應(yīng)的各子塊的運(yùn)動(dòng)向量相加,然后取均值,得到粗糙層運(yùn)動(dòng)估計(jì)的運(yùn)動(dòng)向量。
3.精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值的并行處理器圖6a示出了精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域與半象素插值所需整數(shù)象素的關(guān)系。黑點(diǎn)表示當(dāng)前宏塊對(duì)應(yīng)的精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域中心的16*16的塊,和灰點(diǎn)一起構(gòu)成24*24的精細(xì)層搜索區(qū)域,當(dāng)前宏塊各子塊的最相似塊必然在該搜索區(qū)域內(nèi)。由于半象素運(yùn)動(dòng)估計(jì)的搜索區(qū)域由精細(xì)層整數(shù)運(yùn)動(dòng)估計(jì)得到的運(yùn)動(dòng)向量決定,而計(jì)算半象素的6抽頭有限響應(yīng)數(shù)字濾波器(FIR濾波器)需要半象素兩側(cè)各3個(gè)整數(shù)象素,所以計(jì)算半象素搜索區(qū)域圖像數(shù)據(jù)所需的整數(shù)象素為以精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域?yàn)橹行牡拇笮?0*30的象素塊(由黑、灰、白三種象素點(diǎn)構(gòu)成)。精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域與半象素插值所需整數(shù)象素有相當(dāng)大一部分是重合的,這是本發(fā)明提出并行結(jié)構(gòu)運(yùn)動(dòng)估計(jì)方法的重要前提。
圖6b示出了本發(fā)明中半象素插值和精細(xì)層運(yùn)動(dòng)估計(jì)的并行處理流程。粗糙層運(yùn)動(dòng)估計(jì)結(jié)束后,根據(jù)得到的運(yùn)動(dòng)向量輸入30*30的參考幀原始數(shù)據(jù)進(jìn)行半象素插值,同時(shí)精細(xì)層運(yùn)動(dòng)估計(jì)的搜索區(qū)域數(shù)據(jù)保存。輸入精細(xì)層運(yùn)動(dòng)估計(jì)的搜索區(qū)域數(shù)據(jù)和半象素插值計(jì)算并行進(jìn)行;精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域數(shù)據(jù)全部輸入后,精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值計(jì)算并行進(jìn)行;判決模塊確定兩者都結(jié)束后,開始進(jìn)行半象素運(yùn)動(dòng)估計(jì)。而根據(jù)H.264視頻壓縮標(biāo)準(zhǔn),半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)將用到26*26的半象素塊和整數(shù)象素塊,因此,將半象素插值計(jì)算產(chǎn)生的26*26半象素和相應(yīng)的整數(shù)象素存放在半象素插值存儲(chǔ)器中,以便于在半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)中使用這些數(shù)據(jù)。
圖6c示出了本發(fā)明中并行處理器的簡(jiǎn)單框圖。該并行處理器包括一個(gè)整數(shù)象素輸入緩存器,一個(gè)半象素插值濾波器陣列,半象素?cái)?shù)據(jù)存儲(chǔ)器I、A、B、C,一個(gè)精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域存儲(chǔ)器、一個(gè)精細(xì)層運(yùn)動(dòng)估計(jì)器和一個(gè)并行計(jì)算結(jié)束判決器。其中,整數(shù)象素輸入緩存器將輸入的32bit象素?cái)?shù)據(jù)轉(zhuǎn)換為240bit象素?cái)?shù)據(jù)輸出到半象素插值濾波器陣列和精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域存儲(chǔ)器。
圖6d示出了本發(fā)明采用的插值濾波器陣列結(jié)構(gòu)。該結(jié)構(gòu)使用了4個(gè)水平濾波器和8個(gè)垂直濾波器,水平濾波器使用一行整數(shù)象素中的6個(gè)象素插值,垂直濾波器使用一列整數(shù)象素中的6個(gè)象素插值。圖中所畫的圓形、三角形、五星為三類不同的半象素,分別存入C、B、A三個(gè)半象素?cái)?shù)據(jù)存儲(chǔ)器;而正方形代表的整數(shù)象素則存入半象素?cái)?shù)據(jù)存儲(chǔ)器I,即圖中虛線框包圍的象素均存入半象素?cái)?shù)據(jù)存儲(chǔ)器。本發(fā)明采用了H.264/AVC標(biāo)準(zhǔn)規(guī)定的6抽FIR濾波器,插值公式為Pelh=round((Pel0-5Pel1+20Pel2+20Pel3-5Pel4+Pel5)/32)其中,函數(shù)round()表示取整操作,下標(biāo)h表示半象素,下標(biāo)0~5表示產(chǎn)生半象素的6個(gè)整數(shù)象素或者半象素。
圖6e示出了本發(fā)明中精細(xì)層搜索區(qū)域數(shù)據(jù)的存儲(chǔ)策略。精細(xì)層運(yùn)動(dòng)估計(jì)的搜索區(qū)域?yàn)?4*24的塊,數(shù)據(jù)被分為3塊相等的塊(8*24)Top、Middle和Bottom,存放在4個(gè)移位寄存器陣列T、M1、M2和B中,其中Middle塊被同時(shí)存放在M1和M2中,T、M1、M2和B則構(gòu)成了圖3和圖6c中所示的精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域存儲(chǔ)器。
圖6f示出了本發(fā)明中精細(xì)層運(yùn)動(dòng)估計(jì)器的簡(jiǎn)單框圖,本發(fā)明中精細(xì)層運(yùn)動(dòng)估計(jì)器包括一個(gè)SAD計(jì)算器和一個(gè)最相似塊搜索器。圖6g示出了SAD計(jì)算器中計(jì)算8*8、8*4、4*8和4*4塊的SAD的硬件結(jié)構(gòu),圖中SAD_n_m_l表示計(jì)算得到的SAD,其中n和m分別表示SAD對(duì)應(yīng)的象素塊的列數(shù)和行數(shù),l表示同樣行數(shù)列數(shù)下SAD的序號(hào)。精細(xì)層運(yùn)動(dòng)估計(jì)之前,圖中每個(gè)圓圈(稱為PE)均存放了一個(gè)當(dāng)前宏塊象素;當(dāng)精細(xì)層運(yùn)動(dòng)估計(jì)開始后,每個(gè)時(shí)鐘周期都有一行8個(gè)搜索區(qū)域象素輸入并被傳遞到同一列的8個(gè)PE,計(jì)算當(dāng)前宏塊象素與搜索區(qū)域象素的絕對(duì)值之差;包圍同一行4個(gè)PE的虛線矩形框?yàn)榧臃?,得?*1塊的SAD;計(jì)算結(jié)果傳送到右邊的小矩形中,該矩形用來將本行4*1SAD與其上一行的4*1SAD相加并保存計(jì)算結(jié)果,同時(shí)還可起到延時(shí)、同步的作用;每4個(gè)4*1SAD相加得到一個(gè)4*4塊的SAD。通過這種結(jié)構(gòu),在一個(gè)周期內(nèi)可計(jì)算出所有4*4子塊的SAD;加上合適的加法樹,可計(jì)算出當(dāng)前宏塊所有子塊對(duì)應(yīng)的SAD;下一個(gè)時(shí)鐘到來時(shí),輸入新的一行搜索區(qū)域數(shù)據(jù),繼續(xù)重復(fù)上述過程……??梢?,該硬件結(jié)構(gòu)結(jié)合本發(fā)明采用的上述移位寄存器陣列策略,可以在一個(gè)時(shí)鐘內(nèi)產(chǎn)生最佳預(yù)測(cè)模式對(duì)應(yīng)的各子塊的SAD。而整個(gè)SAD計(jì)算器由4個(gè)圖6g所示的結(jié)構(gòu)以及更多的加法樹構(gòu)成。
最相似塊搜索器完成以下功能在每個(gè)時(shí)鐘來臨時(shí)比較當(dāng)前時(shí)鐘得到的SAD與當(dāng)前時(shí)鐘前最小SAD的大小,保存更小的SAD數(shù)據(jù)到存放最小SAD的寄存器中;如果當(dāng)前時(shí)鐘的得到的SAD更小,則根據(jù)當(dāng)前相似塊的位置更新最小SAD對(duì)應(yīng)的運(yùn)動(dòng)向量。上述操作循環(huán)執(zhí)行直到粗糙層搜索區(qū)域搜索完畢,此時(shí)得到最小SAD及其對(duì)應(yīng)的運(yùn)動(dòng)向量。
圖6h示出了本發(fā)明中并行處理器工作的時(shí)序示意圖。Mixed_en、HDP_en、SA_data_in_en和IME_en分別表示并行操作、半象素插值、精細(xì)層運(yùn)動(dòng)估計(jì)搜索區(qū)域輸入和精細(xì)層整數(shù)象素運(yùn)動(dòng)估計(jì)4個(gè)模塊的使能信號(hào),在這些信號(hào)上還同時(shí)標(biāo)識(shí)了使能有效的時(shí)間,即圖中所示的CLK0、CLK216、CLK270和CLK345。Data_in_row_cnt是輸入整數(shù)象素行數(shù)的計(jì)數(shù)器輸出,并行處理器輸入的整數(shù)象素為30*30的塊,所以共有30行,計(jì)數(shù)器輸出為0~29。SA_top_store_en、SA_middle_store_en和SA_bottom_store_en為存儲(chǔ)精細(xì)層整數(shù)運(yùn)動(dòng)估計(jì)的搜索區(qū)域數(shù)據(jù)的4個(gè)移位寄存器陣列組的寫使能信號(hào)。由于4個(gè)移位寄存器陣列中有兩個(gè)M1和M2存放同樣的數(shù)據(jù),所以用同一個(gè)控制信號(hào)SA_middle_store_en控制。
4.半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)圖7a示出了整數(shù)象素(黑色點(diǎn))與半象素(ABC)、1/4象素(1~12)的位置關(guān)系。在本發(fā)明中,不同位置的半象素和1/4象素分別構(gòu)成不同的搜索區(qū)域,半象素運(yùn)動(dòng)估計(jì)器和1/4象素運(yùn)動(dòng)估計(jì)器分別搜索這些搜索區(qū)域中,尋找最相似塊,然后通過比較不同搜索區(qū)域的最相似塊的SAD確定最佳相似塊及對(duì)應(yīng)的運(yùn)動(dòng)向量。另外,由于半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)的計(jì)算時(shí)間主要花費(fèi)在半象素和1/4象素搜索區(qū)域的數(shù)據(jù)輸入上,而尋找最相似塊則相對(duì)簡(jiǎn)單,所以本發(fā)明采用了一種節(jié)省資源的可重用硬件結(jié)構(gòu)實(shí)現(xiàn)半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)。在本發(fā)明提出的H.264/AVC運(yùn)動(dòng)估計(jì)器中,不論粗糙層運(yùn)動(dòng)估計(jì)后選擇的預(yù)測(cè)模式是哪一種,在半象素和1/4象素運(yùn)動(dòng)估計(jì)時(shí),都以4*4子塊為單位,計(jì)算當(dāng)前子塊與半象素或1/4象素搜索區(qū)域中各子塊的相似度。循環(huán)16次完成當(dāng)前宏塊的所有4*4子塊的最相似塊搜索。最后再根據(jù)選用的預(yù)測(cè)模式,計(jì)算相應(yīng)的子塊的最相似塊及其對(duì)應(yīng)的運(yùn)動(dòng)向量。如圖7a所示,需要搜索的半象素有A、B、C三種,而需要搜索的1/4象索有1~12中的8種,即圖7a中半象素或整數(shù)象素周圍的8個(gè)1/4象素。采用本發(fā)明的硬件結(jié)構(gòu),比同時(shí)并行計(jì)算當(dāng)前宏塊的所有子塊與搜索區(qū)域的相似塊的方法可以節(jié)省近90%的硬件資源,而計(jì)算時(shí)間則沒有增加。
圖7b示出了本發(fā)明中半象素運(yùn)動(dòng)估計(jì)器的簡(jiǎn)單框圖。該運(yùn)動(dòng)估計(jì)器輸入為A、B、C三類半象素搜索區(qū)域數(shù)據(jù)、整數(shù)象素運(yùn)動(dòng)向量和SAD,輸出為半象素運(yùn)動(dòng)向量和SAD。本發(fā)明采用的這一電路包括一個(gè)半象素插值存儲(chǔ)器接口,三個(gè)用來存放A、B、C三類半象素搜索區(qū)域的存儲(chǔ)器,三個(gè)用來進(jìn)行半象素運(yùn)動(dòng)估計(jì)器和一個(gè)最相似塊選擇器。其中,半象素插值存儲(chǔ)器接口用來產(chǎn)生半象素插值存儲(chǔ)器A、B、C的地址信號(hào)和讀數(shù)據(jù)使能信號(hào),同時(shí)包括三個(gè)半象素輸入緩存器用來暫存A、B、C三類半象素。一個(gè)半象素運(yùn)動(dòng)估計(jì)器包括一個(gè)4*4塊SAD計(jì)算器,用來計(jì)算當(dāng)前4*4子塊與搜索區(qū)域4*4塊的SAD。最相似塊選擇器完成以下功能對(duì)比不同類型搜索區(qū)域得到的最相似子塊的SAD;選擇最小的SAD與精細(xì)層搜索得到的最小SAD對(duì)比,更小的SAD對(duì)應(yīng)的相似塊為半象素運(yùn)動(dòng)估計(jì)的最相似塊。
圖7c示出了本發(fā)明中1/4象素運(yùn)動(dòng)估計(jì)器的簡(jiǎn)單框圖。該運(yùn)動(dòng)估計(jì)器輸入為半象素運(yùn)動(dòng)估計(jì)的SAD和運(yùn)動(dòng)向量,以及A、B、C三類半象素和整數(shù)象素I,輸出為1/4象素運(yùn)動(dòng)向量和SAD。本發(fā)明采用的這一電路包括一個(gè)半象素插值存儲(chǔ)器接口,一個(gè)1/4象素插值計(jì)算陣列,8個(gè)1/4象素搜索區(qū)域數(shù)據(jù)存儲(chǔ)器,8個(gè)分別包括一個(gè)4*4塊SAD計(jì)算器的1/4象素運(yùn)動(dòng)估計(jì)器和一個(gè)最相似塊選擇器。其中,1/4象素由相鄰的兩個(gè)半象素或者整數(shù)象素求均值得到,圖7d示出了1/4象素插值濾波器陣列的結(jié)構(gòu)。圖7a所示的12種1/4象素中,選擇半象素運(yùn)動(dòng)估計(jì)器得到的半象素最相似塊的象素周圍的8種1/4象素分別存入8個(gè)搜索區(qū)域存儲(chǔ)器,并送入8個(gè)1/4象素運(yùn)動(dòng)估計(jì)器,由這8個(gè)1/4象素運(yùn)動(dòng)估計(jì)器中的4*4塊SAD計(jì)算器分別計(jì)算這8種1/4象素塊和當(dāng)前4*4子塊的SAD。最相似塊選擇器完成以下功能選擇8種搜索區(qū)域中SAD最小的作為最佳1/4象素相似塊,并計(jì)算相應(yīng)的運(yùn)動(dòng)向量;將該SAD與半象素搜索區(qū)域的SAD對(duì)比,選擇最小的SAD對(duì)應(yīng)的相似塊作為H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)最終選擇的最佳相似塊。
5.最終運(yùn)動(dòng)向量計(jì)算器H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)計(jì)算最終運(yùn)動(dòng)向量的公式如下MVf=8MVc+4MVp+2MVh+MVq,其中,下標(biāo)f、c、p、h、q對(duì)應(yīng)的運(yùn)動(dòng)向量分別表示整個(gè)運(yùn)動(dòng)估計(jì)器的最終運(yùn)動(dòng)向量和粗糙層、精細(xì)層、半象素和1/4象素運(yùn)動(dòng)估計(jì)器得到的運(yùn)動(dòng)向量。
6.H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)的存儲(chǔ)器當(dāng)前幀/參考幀存儲(chǔ)器由SRAM實(shí)現(xiàn),必須可以存放CIF格式圖像(352*288象素),通過系統(tǒng)產(chǎn)生的地址信號(hào)和讀信號(hào)從中讀取當(dāng)前幀或參考幀的圖像數(shù)據(jù)。當(dāng)前宏塊存儲(chǔ)器為16*16的寄存器陣列,每個(gè)寄存器單元可以存放8bit象素?cái)?shù)據(jù),并且可以被單獨(dú)讀寫。運(yùn)動(dòng)估計(jì)結(jié)果存儲(chǔ)器用來存放H.264/AVC運(yùn)動(dòng)估計(jì)器系統(tǒng)產(chǎn)生的最佳預(yù)測(cè)模式及其對(duì)應(yīng)的最終運(yùn)動(dòng)向量和殘差數(shù)據(jù)。
盡管本發(fā)明是參照某些優(yōu)選實(shí)施實(shí)例進(jìn)行說明的,但應(yīng)該謹(jǐn)記本發(fā)明的范圍并不僅限于這些具體的實(shí)施方式。對(duì)于本發(fā)明所作的修改以及本發(fā)明的變型形式都落在本發(fā)明的設(shè)計(jì)思想與范圍之內(nèi),本發(fā)明的涵蓋范圍在以下的權(quán)利要求中定義。
權(quán)利要求
1.用于H.264/AVC編碼器的運(yùn)動(dòng)估計(jì)方法,其特征在于,該方法是在一塊數(shù)字集成電路芯片內(nèi)依以下步驟實(shí)現(xiàn)的步驟(1),把運(yùn)動(dòng)圖像以幀為單位輸入當(dāng)前幀存儲(chǔ)器,該當(dāng)前幀存儲(chǔ)器以宏塊為單位把當(dāng)前宏塊輸入當(dāng)前宏塊存儲(chǔ)器;把符合H.264/AVC視頻編碼標(biāo)準(zhǔn)的視頻圖像以幀為單位輸入?yún)⒖紟鎯?chǔ)器;步驟(2),粗糙層數(shù)據(jù)預(yù)處理器按以下步驟進(jìn)行粗糙層數(shù)據(jù)預(yù)處理步驟(2.1),第1數(shù)據(jù)輸入緩存器從當(dāng)前宏塊存儲(chǔ)器中讀取32位當(dāng)前宏塊數(shù)據(jù);第2數(shù)據(jù)輸入緩存器從參考幀存儲(chǔ)器中讀取32位搜索區(qū)域數(shù)據(jù);步驟(2.2),步驟(2.1)中所述的兩個(gè)數(shù)據(jù)輸入緩沖器各自把4個(gè)連續(xù)輸入的32位數(shù)據(jù)合并成一個(gè)128位數(shù)據(jù)分別送到第1均值濾波器陣列和第2均值濾波器陣列;步驟(2.3),步驟(2.2)中所述的兩個(gè)均值濾波器陣列依次同時(shí)獲取粗糙層當(dāng)前宏塊數(shù)據(jù)和粗糙層整數(shù)運(yùn)動(dòng)估計(jì)搜索區(qū)域數(shù)據(jù),輸出均為64位;其中,粗糙層整數(shù)運(yùn)動(dòng)估計(jì)搜索區(qū)域中的每個(gè)象素用以下公式求得Pelc=(Pel00+Pel01+Pel10+Pel11)/4,Pelc表示粗糙層的一個(gè)象素;Pel00、Pel01分別表示原始參考幀搜索區(qū)域第2*n行第2*m、第2*m+1個(gè)象素,Pel10、Pel11分別表示原始參考幀搜索區(qū)域第2*n+1行第2*m、第2*m+1個(gè)象素,n、m在
之間,從而得到一個(gè)48*48位的粗糙層運(yùn)動(dòng)估計(jì)的搜索區(qū)域,該宏塊的搜索區(qū)域中心位于當(dāng)前該宏塊左上角象素;步驟(2.4),第1、第2兩個(gè)均值濾波器陣列分別依次向當(dāng)前宏塊均值濾波后數(shù)據(jù)存儲(chǔ)器陣列和搜索區(qū)域移位寄存器陣列輸出64位的數(shù)據(jù),所述每個(gè)存儲(chǔ)器存放一個(gè)8位象素?cái)?shù)據(jù);步驟(3),粗糙層運(yùn)動(dòng)估計(jì)器按以下步驟進(jìn)行粗糙層運(yùn)動(dòng)估計(jì),并輸出預(yù)測(cè)模式以及相應(yīng)運(yùn)動(dòng)向量步驟(3.1),粗糙層數(shù)據(jù)預(yù)處理器向粗糙層運(yùn)動(dòng)估計(jì)器中的8位2*2塊的殘差計(jì)算器輸入當(dāng)前宏塊數(shù)據(jù)及粗糙層運(yùn)動(dòng)估計(jì)搜索區(qū)域數(shù)據(jù),殘差用SAD表示;步驟(3.2),所述8位2*2塊殘差計(jì)算器采用加法樹結(jié)構(gòu)在一個(gè)時(shí)鐘周期內(nèi)計(jì)算出4*4、4*8、8*4、8*8、8*16、16*8和16*16共7種預(yù)測(cè)模式對(duì)應(yīng)的所有2*2、2*4、4*2、4*4、4*8、8*4和8*8子塊對(duì)應(yīng)的殘差;步驟(3.3),最相似塊搜索器在每個(gè)時(shí)鐘來臨時(shí)比較從所述8位2*2塊殘差計(jì)算器得到的各種預(yù)測(cè)模式下當(dāng)前所有子塊的殘差與當(dāng)前時(shí)鐘前得到的最小殘差的大小,保存更小的殘差數(shù)據(jù),若當(dāng)前時(shí)鐘得到的殘差更小,則根據(jù)當(dāng)前相似塊的位置更新最小殘差對(duì)應(yīng)的運(yùn)動(dòng)向量;循環(huán)執(zhí)行步驟(3.1)~(3.3),直到粗糙層搜索區(qū)域搜索完畢,得到最小殘差及其相應(yīng)的運(yùn)動(dòng)向量;步驟(3.4),在步驟(3.3)執(zhí)行結(jié)束后,先把上述各種預(yù)測(cè)模式下各自對(duì)應(yīng)的各子塊的最小殘差相加,分別得到每種預(yù)測(cè)模式下的殘差和;其次,比較7個(gè)殘差和,選擇其中殘差和最小的預(yù)測(cè)模式作為最佳模式;步驟(3.5),運(yùn)動(dòng)向量均值器根據(jù)步驟(3.4)得到的最佳預(yù)測(cè)模式,把該模式對(duì)應(yīng)的各子塊的運(yùn)動(dòng)向量相加,取其均值,得到粗糙層運(yùn)動(dòng)估計(jì)的運(yùn)動(dòng)向量;步驟(4),用并行處理器按以下步驟并行執(zhí)行精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值步驟(4.1),粗糙層運(yùn)動(dòng)估計(jì)器和參考幀存儲(chǔ)器依次分別把粗糙層運(yùn)動(dòng)估計(jì)的運(yùn)動(dòng)向量和參考幀數(shù)據(jù)送入增速象素輸入緩存器;步驟(4.2),所述整數(shù)象素輸入緩存器把24*24的精細(xì)層搜索區(qū)域數(shù)據(jù)輸入到精細(xì)層搜索區(qū)域移位寄存器陣列,而所述移位寄存器再把該精細(xì)層搜索區(qū)域數(shù)據(jù)送入精細(xì)層運(yùn)動(dòng)估計(jì)器,依次按以下步驟計(jì)算出精細(xì)層最小殘差及相應(yīng)的運(yùn)動(dòng)向量步驟(4.2.1),把所述精細(xì)層搜索區(qū)域數(shù)據(jù)、相應(yīng)的當(dāng)前宏塊數(shù)據(jù)送入一個(gè)精細(xì)層殘差計(jì)算器,計(jì)算出4*4、4*8、8*4、8*8、8*16、16*8以及4*4塊的殘差所述殘差計(jì)算器由4個(gè)各自的元素為8*8個(gè)殘差數(shù)據(jù)構(gòu)成的子殘差計(jì)算器構(gòu)成;在該子殘差計(jì)算器中,同一行每4個(gè)殘差數(shù)據(jù)通過加法樹相加得到一個(gè)4*1子塊的殘差,4個(gè)4*1子塊的殘差相加得到一個(gè)4*4子塊的殘差,在一個(gè)時(shí)鐘周期內(nèi)計(jì)算出所有4*4塊的殘差,再通過加法樹結(jié)構(gòu),計(jì)算出當(dāng)前宏塊所有子塊對(duì)應(yīng)的殘差,循環(huán)執(zhí)行,一直到精細(xì)層搜索區(qū)域全部處理完畢;步驟(4.2.2),最相似搜索器在每個(gè)時(shí)鐘來臨時(shí)比較步驟(4.2.1)所述的當(dāng)前時(shí)鐘得到的殘差與當(dāng)前時(shí)鐘前得到的最小殘差的大小,若當(dāng)前時(shí)鐘得到的殘差更小,則根據(jù)當(dāng)前相似塊的位置更新最小的殘差對(duì)應(yīng)的運(yùn)動(dòng)向量;循環(huán)執(zhí)行,直到精細(xì)層搜索區(qū)域搜索完畢,得到最小殘差及其相應(yīng)的運(yùn)動(dòng)向量;步驟(4.3),所述整數(shù)象素輸入緩存器同時(shí)把30*30的半象素搜索區(qū)域數(shù)據(jù)送入半象素插值濾波器陣列,所述濾波器采用H.264/AVC標(biāo)準(zhǔn)指定的6抽頭FIR濾波器,所述陣列使用4個(gè)水平濾波器和8個(gè)垂直濾波器,該4個(gè)水平濾波器使用一行整數(shù)象素中的6個(gè)象素插值,該8個(gè)垂直濾波器使用一列整數(shù)象素或一列半象素中的六個(gè)象素插值,插值公式為Pelh=round((Pel0-5Pel1+20Pel2+20Pel3-5Pel4+Pel5)/32),其中,round()表示取整,下標(biāo)h表示半象素,下標(biāo)0~5表示產(chǎn)生半象素的6個(gè)整數(shù)象素和半象素所述半象素插值濾波器陣列通過半象素插值存儲(chǔ)器I輸出整數(shù)象素,同時(shí)通過A、B、C三個(gè)半象素存儲(chǔ)器分別輸出水平、垂直半象素以及夾于水平和垂直兩個(gè)插值之間的半象素之值;步驟(4.4),用并行計(jì)算結(jié)束判決器判決精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值濾波計(jì)算是否結(jié)束,如已結(jié)束,發(fā)出結(jié)束信號(hào);步驟(5),用半象素運(yùn)動(dòng)估計(jì)器以及1/4象素運(yùn)動(dòng)估計(jì)器按以下步驟依次進(jìn)行半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)步驟(5.1),用半象素運(yùn)動(dòng)估計(jì)器進(jìn)行半象素運(yùn)動(dòng)估計(jì),并輸出半象素最小殘差和相應(yīng)的半象素運(yùn)動(dòng)向量,其步驟依次如下步驟(5.1.1),所述精細(xì)層運(yùn)動(dòng)估計(jì)器向半象素運(yùn)動(dòng)估計(jì)器中的片上存儲(chǔ)器接口輸入最小殘差及相應(yīng)的運(yùn)動(dòng)向量;所述三個(gè)半象素存儲(chǔ)器A、B、C向所述片上存儲(chǔ)器接口輸入半象素A、半象素B及半象素C;步驟(5.1.2),所述片上存儲(chǔ)器接口通過3個(gè)半象素輸入緩存器把A、B、C三類半象素分別送往三個(gè)半象素搜索區(qū)域存儲(chǔ)器后,在分別用3個(gè)半象素運(yùn)動(dòng)估計(jì)器按以下步驟對(duì)A、B、C三類半象素進(jìn)行運(yùn)動(dòng)估計(jì)首先,每個(gè)半象素運(yùn)動(dòng)估計(jì)器用一個(gè)4*4子塊的殘差計(jì)算器計(jì)算當(dāng)前宏塊的4*4子塊與半象素搜索區(qū)域4*4子塊的殘差;然后,用一個(gè)最相似塊選擇器對(duì)照不同類型搜索區(qū)域得到的最相似子塊的殘差,選擇其中最小的殘差與精細(xì)層搜索得到的最小殘差對(duì)比,得出更小的殘差對(duì)應(yīng)的相似塊為半象素運(yùn)動(dòng)估計(jì)的最相似塊,得出其半象素殘差及相應(yīng)的運(yùn)動(dòng)向量;步驟(5.2),用1/4象素運(yùn)動(dòng)估計(jì)器進(jìn)行1/4象素運(yùn)動(dòng)估計(jì),按以下步驟得到1/4象素的最小殘差及相應(yīng)的1/4運(yùn)動(dòng)向量步驟(5.2.1),把從半象素運(yùn)動(dòng)估計(jì)器輸出的半象素最小殘差以及相應(yīng)的運(yùn)動(dòng)向量、半象素插值存儲(chǔ)器I得到的整數(shù)象素I、半象素插值存儲(chǔ)器A、B、C得到的半象素A、B、C以及當(dāng)前宏塊存儲(chǔ)器的當(dāng)前宏塊都輸入1/4象素插值存儲(chǔ)器接口;步驟(5.2.2),1/4象素插值計(jì)算器陣列從所述1/4象素插值存儲(chǔ)器接口輸入的要計(jì)算的一個(gè)1/4象素所相鄰的兩個(gè)半象素或者一個(gè)半象素和一個(gè)整數(shù)象素求均值得到該1/4象素,可得到12種1/4象素,但只計(jì)算所述半象素運(yùn)動(dòng)估計(jì)器得到的半象素最相似塊的象素周圍的8種1/4象素;步驟(5.2.3),所述1/4象素插值計(jì)算器陣列把所得的所有1/4象素分別存入8個(gè)1/4象素搜索區(qū)域存儲(chǔ)器,并分別送入8個(gè)1/4象素運(yùn)動(dòng)估計(jì)器;步驟(5.2.4),8個(gè)1/4象素運(yùn)動(dòng)估計(jì)器分別用一個(gè)4*4塊的殘差計(jì)算器分別從所述8個(gè)1/4象素搜索區(qū)域存儲(chǔ)器得到1/4象素塊和預(yù)先內(nèi)存的當(dāng)前宏塊的4*4子塊之間的殘差;步驟(5.2.5),一個(gè)最相似塊選擇器選擇步驟(5.2.4)種所述8種搜索區(qū)域中殘差最小的作為最佳1/4象素相似塊,并計(jì)算相應(yīng)的運(yùn)動(dòng)向量,再把該殘差與半象素搜索得到的最小殘差相比,選擇最小的殘差對(duì)應(yīng)的相似塊作為H.264/AVC運(yùn)動(dòng)估計(jì)器生成的最終選擇的最佳相似塊;步驟(6),用一個(gè)最終運(yùn)動(dòng)向量計(jì)算器計(jì)算H.264/AVC運(yùn)動(dòng)估計(jì)器生成的最終運(yùn)動(dòng)向量MVf,并存入運(yùn)動(dòng)估計(jì)結(jié)果存儲(chǔ)器MVf=8MVc+4MVp+2MVh+MVq,其中,c、p、h、q對(duì)應(yīng)的運(yùn)動(dòng)向量分別表示粗糙層、精細(xì)層、半象素和1/4象素運(yùn)動(dòng)估計(jì)器得到的運(yùn)動(dòng)向量。
2.根據(jù)權(quán)利要求1所述的用于H.264/AVC編碼器的運(yùn)動(dòng)估計(jì)方法,其特征在于,所述的半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì)中采用了4*4塊殘差計(jì)算器。
全文摘要
本發(fā)明屬于用于H.264/ AVC編碼器的運(yùn)動(dòng)估計(jì)方法,其特征在于,把整數(shù)運(yùn)動(dòng)估計(jì)分為粗糙層和精細(xì)層,依次分別估計(jì);然后通過一個(gè)輸入分別為參考幀數(shù)據(jù)和粗糙層運(yùn)動(dòng)向量的整數(shù)象素?cái)?shù)據(jù)輸入結(jié)構(gòu)并行的進(jìn)行精細(xì)層運(yùn)動(dòng)估計(jì)和半象素插值,接著,依次進(jìn)行半象素運(yùn)動(dòng)估計(jì)和1/4象素運(yùn)動(dòng)估計(jì),從而通過粗糙層運(yùn)動(dòng)估計(jì)得到的最佳預(yù)測(cè)模式下其最小殘差對(duì)應(yīng)的運(yùn)動(dòng)向量來計(jì)算最終的最小殘差和其對(duì)應(yīng)的最終運(yùn)動(dòng)向量。實(shí)踐證明,本發(fā)明提出的方法可以節(jié)省64.5%的計(jì)算時(shí)間。
文檔編號(hào)H04N7/26GK1933600SQ200610113030
公開日2007年3月21日 申請(qǐng)日期2006年9月8日 優(yōu)先權(quán)日2006年9月8日
發(fā)明者羅嶸, 楊春雷, 楊華中 申請(qǐng)人:清華大學(xué)