畢業(yè)設(shè)計(jì)論文CABAC_第1頁
畢業(yè)設(shè)計(jì)論文CABAC_第2頁
畢業(yè)設(shè)計(jì)論文CABAC_第3頁
畢業(yè)設(shè)計(jì)論文CABAC_第4頁
畢業(yè)設(shè)計(jì)論文CABAC_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 本科畢業(yè)設(shè)計(jì)(論文) 基于CABAC的可伸縮視頻編碼方法研究 學(xué) 院 電子與信息學(xué)院 專 業(yè) 信息工程 學(xué)生姓名 陳易光 指導(dǎo)教師 吳宗澤 提交日期 2008年 6 月 11日 華 南 理 工 大 學(xué) 畢 業(yè) 設(shè) 計(jì) (論文) 任 務(wù) 書 茲發(fā)給 04級信息工程3 班學(xué)生 陳易光 畢業(yè)設(shè)計(jì)(論文)任務(wù)書,內(nèi)容如下: 1.畢業(yè)設(shè)計(jì)(論文)題目:基于CABAC的可伸縮視頻編碼方法研究 2.應(yīng)完成的項(xiàng)目: (1)以H.264為主,研究各種可伸縮視頻編碼技術(shù)。 (2)研究CABAC編碼協(xié)議以及JM8.6源程序的相關(guān)部分,將源程序的流程與編碼過程對應(yīng)起來。 (3)深入研究并理清CABAC對圖像的各種句

2、法元素的編碼過程。 (4)分析比較國內(nèi)外對CABAC的優(yōu)化技術(shù),了解各種技術(shù)的使用場合及其優(yōu)化程度。 3.參考資料以及說明: (1)畢厚杰,新一代視頻壓縮編碼標(biāo)準(zhǔn)H.264/AVCM (2)朱江,H.264/AVC中擴(kuò)展空域可伸縮編碼的研究 (3)閔玲,CABAC在H.264/AVC中的應(yīng)用 (4)徐蘇姍,算術(shù)熵編碼CABAC (5)黃菠,H.264中的CABAC熵編碼研究 (6)朱瑩,H.264標(biāo)準(zhǔn)的新擴(kuò)展可伸縮性編碼及應(yīng)用 (7)ITU-T,H.264建議書 4.本畢業(yè)設(shè)計(jì)(論文)任務(wù)書于 年 月 日發(fā)出,應(yīng)于 年 月 日前完成,然后提交畢業(yè)考試委員會進(jìn)行答辯。 專業(yè)教研組(系)、研究所負(fù)

3、責(zé)人 審核 年 月 日 指導(dǎo)教師 簽發(fā) 年 月 日畢業(yè)設(shè)計(jì)(論文)評語: 畢業(yè)設(shè)計(jì)(論文)總評成績: 畢業(yè)設(shè)計(jì)(論文)答辯負(fù)責(zé)人簽字: 年 月 日 摘要數(shù)字視頻技術(shù)在通信和廣播領(lǐng)域得到了日益廣泛的應(yīng)用,隨著互聯(lián)網(wǎng)和移動通信的迅猛發(fā)展,視頻信息和多媒體信息在互聯(lián)網(wǎng)和移動網(wǎng)絡(luò)中的處理和傳輸技術(shù)成為國內(nèi)外專家研究的熱點(diǎn)之一。當(dāng)前國際上對于視頻編碼技術(shù)的研究熱點(diǎn)逐漸集中于在H.264/AVC基礎(chǔ)上實(shí)現(xiàn)可伸縮視頻編碼。因此,本文主要對H.264中的基于上下文自適應(yīng)的二進(jìn)制算術(shù)編碼(CABAC)進(jìn)行研究。首先,本文結(jié)合標(biāo)準(zhǔn)詳細(xì)描述了CABAC的三個主要步驟:二值化,上下文建模與基于表格的二進(jìn)制算術(shù)編碼。二

4、值化是把非二進(jìn)制句法元素唯一映射到一個二進(jìn)制碼字。上下文建模是利用已編碼的符號為句法元素選擇合適的上下文模型并自動更新概率模型。最后的基于表格的二進(jìn)制算術(shù)編碼則利用查表的方式進(jìn)行算術(shù)編碼,有效地避免了乘法運(yùn)算。然后,本文詳細(xì)介紹H.264的官方測試源碼JM8.6中涉及到CABAC的部分。其中包括編碼片的slice.c部分函數(shù)的分析,編碼塊的macroblock.c與rdopt.c部分函數(shù)的分析,編碼各句法元素的cabac.c部分函數(shù)的分析以及進(jìn)行二進(jìn)制算術(shù)編碼的biariencode.c部分函數(shù)的分析。最后,本文基于JM8.6對CABAC進(jìn)行了性能測試與分析,并與CAVLC相比較。實(shí)驗(yàn)表明,C

5、ABAC有著更好的編碼效果。關(guān)鍵詞:可伸縮視頻編碼,H.264,CABACAbstractDigital video technology has been widely applied in communications and broadcasting fields. As the Internet and the mobile communications developing rapidly, the domestic and foreign experts focus on the processing and transmission technology of video inf

6、ormation as well as multimedia information on the Internet and in the mobile networks. Currently scalable video coding based on H.264/AVC has fradually become the research focus of international video coding technology. Now, this paper will mainly study on the Context-bsaed Adaptive Binary Arithmeti

7、c Coding (CABAC).Firstly, the three major steps of CABAC were described detaily according to the standard: binarization, context modeling, and context-based binary arithmetic coding. Binarization is used to map the non-binary syntax elements into a binary code. Context codeling chooses the suitable

8、context model for syntax elements using the coded symbols, and updates the possibility models automatically. And the context-based binary arithmetic coding avoid the multiplication effectively when coding with the look-up table.Secondly, the paper will specify the CABAC part in the JM8.6, the offici

9、al source testing code of H.264, including the analysis of part of the functions in following C files: slice.c, macroblock.c, rdopt.c, cabac.c, and biariencode.c.Finally, compared to the CAVLC, it was proposed that the performance test and analysis of CABAC based on JM8.6. The experiment data showed

10、 that the CABAC had superior performance.Keyword: Scalable video code, H.264, CABAC目 錄摘要IAbstractII第一章 緒論11.1可伸縮視頻技術(shù)概述11.2可伸縮視頻技術(shù)的研究概況與發(fā)展趨勢21.3主要研究工作31.4 本文安排3第二章 H.264標(biāo)準(zhǔn)中的CABAC42.1概述42.2二值化52.2.1 一元碼(Unary)52.2.2 截?cái)嘁辉a(Truncated Unary, TU)52.2.3 k階指數(shù)哥倫布編碼(kth order Exp-Golomb, EGk)62.2.4 定長編碼(Fixed

11、-Length, FL)62.2.5 4位FL與截?cái)嘀禐?的TU聯(lián)合二值化方案62.2.6 TU與EGk的聯(lián)合二值化方案(Unary/kth order Exp-Golomb, UEGk)62.2.7 各種句法元素值的二值化62.2.8 聯(lián)合二值化方案編碼實(shí)例72.3上下文建模72.3.1 上下文的初始化82.3.2 上下文模型的分類82.3.3 上下文模型的分配與確定82.4二進(jìn)制算術(shù)編碼92.4.1 概率估計(jì)92.4.2 算術(shù)編碼器的總體描述10第三章 JM8.6中的CABAC143.1 slice.c部分函數(shù)分析143.1.1 encode_one_slice函數(shù)分析143.1.2 st

12、art_slice函數(shù)分析153.1.3 terminate_slice函數(shù)分析153.2 macroblock.c部分函數(shù)分析163.2.1 start_macroblock函數(shù)分析163.2.2 write_one_macroblock函數(shù)分析163.2.3 writeMBHeader函數(shù)分析173.2.4 writeMotionInfo2NAL函數(shù)分析173.2.5 writeCBPandLumaCoeff函數(shù)分析183.2.6 writeChromaCoeff函數(shù)分析183.3 rdopt.c部分函數(shù)分析183.3.1 encode_one_macroblock函數(shù)分析193.3.2

13、RDCost_for_macroblocks函數(shù)分析193.3.3 RDCost_for_8x8blocks函數(shù)分析193.3.4 RDCost_for_4x4IntraBlocks函數(shù)分析203.4 cabac.c部分函數(shù)分析203.4.1 CheckAvailabilityOfNeighborsCABAC函數(shù)分析213.4.2 writeFieldModeInfo_CABAC函數(shù)分析213.4.3 writeMB_skip_flagInfo_CABAC函數(shù)分析213.4.4 writeMB_typeInfo_CABAC函數(shù)分析223.4.5 writeB8_typeInfo_CABAC函數(shù)

14、分析253.4.6 writeIntraPredMode_CABAC函數(shù)分析263.4.7 writeRefFrame_CABAC函數(shù)分析263.4.8 writeDquant_CABAC函數(shù)分析273.4.9 writeMVD_CABAC函數(shù)分析273.4.10 writeCIPredMode_CABAC函數(shù)分析283.4.11 writeCBP_BIT_CABAC函數(shù)分析293.4.12 writeCBP_CABAC函數(shù)分析303.4.13 write_and_store_CBP_block_bit函數(shù)分析313.4.14 write_significance_map函數(shù)分析323.4.1

15、5 write_significant_coefficients函數(shù)分析323.4.16 writeRunLevel_CABAC函數(shù)分析333.5 biariencode.c部分函數(shù)分析333.5.1 biari_encode_symbol函數(shù)分析333.5.2 biari_encode_symbol_eq_prob函數(shù)分析343.5.3 biari_encode_symbol_final函數(shù)分析353.5.4 biari_init_context函數(shù)分析353.6 JM8.6與標(biāo)準(zhǔn)的結(jié)合分析35第四章 JM8.6程序上的CABAC性能分析374.1實(shí)驗(yàn)前的設(shè)置37實(shí)驗(yàn)環(huán)境374.1.2 JM

16、8.6編譯設(shè)置374.1.3 編碼配置文件設(shè)置384.2實(shí)驗(yàn)數(shù)據(jù)與分析39總結(jié)與展望43參考文獻(xiàn)44附錄45致謝63第一章 緒論1.1可伸縮視頻技術(shù)概述數(shù)字視頻技術(shù)在通信和廣播領(lǐng)域得到了日益廣泛的應(yīng)用,隨著互聯(lián)網(wǎng)和移動通信的迅猛發(fā)展,視頻信息和多媒體信息在互聯(lián)網(wǎng)和移動網(wǎng)絡(luò)中的處理和傳輸技術(shù)成為國內(nèi)外專家研究的熱點(diǎn)之一。視頻信息具有直觀性、確切性、高效性與廣泛性等一系列的有點(diǎn),但其信息量太大,要使視頻得到有效的應(yīng)用,必須首先解決視頻壓縮編碼問題,其次既要解決壓縮后視頻質(zhì)量保證的問題。這兩者是相互矛盾的,是矛盾的兩個方面。我們的任務(wù)是既要有較大的壓縮比,又要保證一定的視頻質(zhì)量。傳統(tǒng)的視頻編碼技術(shù)主

17、要是面向存儲的,目標(biāo)是單純地追求某一固定碼率下的壓縮效率;隨著計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)和Internet的迅猛發(fā)展,面向網(wǎng)絡(luò)應(yīng)用的視頻服務(wù)正飛速增長,如:視頻會議、可視電話、視頻點(diǎn)播、視頻監(jiān)控等。視頻編碼的目標(biāo)由單純的追求高壓縮率轉(zhuǎn)向了使視頻流能夠更好地適應(yīng)各種不同的網(wǎng)絡(luò)環(huán)境和用戶終端,并具有一定的容錯性和可伸縮性。1但是,視頻(尤其是實(shí)時視頻)對帶寬、延遲和丟失率等都有一定要求,而現(xiàn)有的因特網(wǎng)提供的服務(wù)不能為視頻應(yīng)用提供服務(wù)質(zhì)量保證。并且,由于網(wǎng)絡(luò)和接收端的異構(gòu)性,使得很難充分利用現(xiàn)有網(wǎng)絡(luò)帶寬和資源、實(shí)現(xiàn)服務(wù)的靈活性。由于網(wǎng)絡(luò)的異構(gòu)性和缺乏QoS保證,帶寬往往在一個較大范圍內(nèi)變化,在速率起伏很大的IP

18、(Internet Protocol)網(wǎng)絡(luò)及具有不同傳輸特性的異構(gòu)網(wǎng)絡(luò)上進(jìn)行視頻傳輸?shù)囊蠛蛻?yīng)用越來越多。因此對視頻編碼的要求不但是保證高壓縮率,同時還要求編碼后的視頻流能夠適應(yīng)一定的網(wǎng)絡(luò)帶寬的變化,并具有一定的容錯性和多方面的可伸縮性針對網(wǎng)絡(luò)應(yīng)用對視頻編碼技術(shù)提出的特殊要求。在這種背景下,視頻可伸縮編碼的重要性日益突出,其應(yīng)用非常廣泛,且具有很高的理論研究及實(shí)際應(yīng)用價值,因此受到人們的極大關(guān)注。可伸縮性視頻編碼有很好的應(yīng)用前景,如無線局域網(wǎng)或IP網(wǎng)上傳輸視頻流、網(wǎng)上直播、移動電子商務(wù)等。因分層的可伸縮視頻編碼方法通常把每層的視頻流分解成基本層碼流和增強(qiáng)層碼流,這就允許視頻流可在不同的網(wǎng)絡(luò)環(huán)境

19、或流量中傳輸。在IP網(wǎng)絡(luò)中不同質(zhì)量的視頻流能被分配給一個或多個不同的客戶端,因此根據(jù)網(wǎng)絡(luò)流量的計(jì)費(fèi)管理系統(tǒng)就可得到保證,如DVB-H或3GPP的MBMS等網(wǎng)絡(luò),它們有不同能力的終端設(shè)備。應(yīng)用分層編碼方法,如果網(wǎng)絡(luò)支持某種網(wǎng)絡(luò)流僅傳輸?shù)侥骋辉O(shè)備,那么終端不必接受所有的位流。例如在MBMS 或DVB-H網(wǎng)絡(luò)中可能把H.264基本層碼流發(fā)送到低性能的終端設(shè)備,位流的其他層發(fā)送到高性能終端設(shè)備。用H.264可伸縮性碼流代替聯(lián)播,可大大減輕主干線的負(fù)擔(dān)。可伸縮性視頻編碼另一個很有前途的應(yīng)用是在視頻監(jiān)視系統(tǒng)中,一般來說,從許多攝像機(jī)得到的視頻必須在終端設(shè)備上存儲和顯示,這可能有不同的空域或時域分辨率。例如

20、在一個監(jiān)視器或在移動設(shè)備上(如可視電話或PDA),許多場景分屏顯示,從專用攝像機(jī)上觀看場景,對這樣的應(yīng)用,可伸縮性視頻編碼很有吸引力,因?yàn)椴恍枰a或格式轉(zhuǎn)換。監(jiān)視攝像機(jī)發(fā)送出來的大量數(shù)據(jù)必須存儲起來,可伸縮性編碼可在某一特定時間后刪除已存場景的高分辨率層,僅把低分辨率復(fù)制到文檔中,不必重新編碼和復(fù)制,使存儲更加靈活。一般整個分辨率視頻能保持 13天,中間質(zhì)量(減少時域或空域分辨率)的視頻可保持一周,低質(zhì)量(時域、空域分辨率同時減少)的視頻可保持更長的時間。21.2可伸縮視頻技術(shù)的研究概況與發(fā)展趨勢可伸縮視頻編碼(SVC)是目前國際上研究的熱點(diǎn)。聯(lián)合視頻組(JVT)圍繞 SVC 展開了大量的研

21、究工作,提出了作為H.264/AVC擴(kuò)展集的SVC方案,實(shí)現(xiàn)了時域、空域和質(zhì)量(SNR)的可伸縮性。H.264/AVC國際視頻編碼標(biāo)準(zhǔn)的逐漸成熟和推廣,越來越多的視頻應(yīng)用已經(jīng)或即將采用H.264/AVC標(biāo)準(zhǔn)。由于存在不同的網(wǎng)絡(luò)和不同的終端,因此對于視頻編碼的可伸縮性方面的要求也越來越迫切。所謂的可伸縮視頻編碼(scalable video coding:SVC)技術(shù)包括空域可伸縮性(分辨率伸縮),時域可伸縮性(幀率伸縮),質(zhì)量可伸縮性和復(fù)雜度可伸縮性等,要求視頻編解碼器在比特流級別具有以下可伸縮特性:通過簡單的丟包或截?cái)啻a流等操作提取出的子碼流具有較低的空間時間分辨率和/或較低的碼率(對應(yīng)于較

22、低的視頻質(zhì)量),同時任何可能子碼流的編碼效率應(yīng)該與相應(yīng)非可伸縮視頻編解碼器相當(dāng)。當(dāng)前國際上對于視頻編碼技術(shù)的研究熱點(diǎn)逐漸集中于在H.264/AVC基礎(chǔ)上實(shí)現(xiàn)可伸縮視頻編碼。2005年1月,ISO的MPEG和ITUT的VCEG,同意聯(lián)合起來將SVC作為H.264/AVC的擴(kuò)展集并由聯(lián)合視頻組(JVT)提出了草案,收錄為H.264/AVC的Annex G。此后,每次JVT的會議都圍繞著SVC技術(shù)對草案進(jìn)行修訂和完善。在2006年10月的JVT會議上,提出了H.264/AVC可伸縮擴(kuò)展集的第8版草案。3H.264/AVC可伸縮擴(kuò)展集的一大特點(diǎn)是,擴(kuò)展集中所采用的 H.264/AVC 中的大部分技術(shù)都

23、與AVC標(biāo)準(zhǔn)中的定義一致(例如,運(yùn)動補(bǔ)償預(yù)測,intra預(yù)測,變換編碼,熵編碼,去塊濾波器等),只加入或修改了很少一部分內(nèi)容。H.264/AVC的可伸縮擴(kuò)展的技術(shù)要點(diǎn)為:(1)時域分級預(yù)測結(jié)構(gòu);(2)用于空域可伸縮性的層間預(yù)測機(jī)制;(3)基本層與H.264/AVC兼容;(4)用漸進(jìn)細(xì)化片(progressive refinement slices)實(shí)現(xiàn)精細(xì)顆粒的質(zhì)量可伸縮性;(5)NAL 單元概念的使用和擴(kuò)展。H.264在主要檔次中采用了基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼(Context-based Adaptive Binary Arithmetic Coding,CABAC)。CABAC是一

24、種高效的熵編碼方法,它在計(jì)算的復(fù)雜度和編碼效率之間作了折衷,建立了基于查表的概率模型,對乘法運(yùn)算也作了優(yōu)化,從而獲得很高的編碼效率。國內(nèi)外有許多的專家學(xué)者都對CABAC做了大量的研究,包括:如何進(jìn)行CABAC的軟硬件實(shí)現(xiàn)的算法設(shè)計(jì)以達(dá)到效率的進(jìn)一步提高;針對編碼時間較長的重要圖的CABAC編碼算法進(jìn)行優(yōu)化,降低其計(jì)算復(fù)雜度,減少其內(nèi)存訪問次數(shù);優(yōu)化上下文模型的表征,降低CABAC編碼器與內(nèi)存之間的頻繁訪問和上下文模型表格初始化時的CPU計(jì)算量;通過犧牲少量的編碼準(zhǔn)確度來降低CABAC的計(jì)算復(fù)雜度,提高編碼速率;在CABAC過程中引入子表法與流重用發(fā),來提高編碼精確度,等等。H.264被認(rèn)為是傳

25、統(tǒng)視頻編碼技術(shù)的領(lǐng)導(dǎo)者,通過多種新技術(shù)的應(yīng)用使編碼效率得到很大的提高,在1.5 Mbit/s左右速率下就可以達(dá)到接近DVD的畫質(zhì)效果,但是由于其實(shí)現(xiàn)復(fù)雜度非常高,大規(guī)模工業(yè)化使用還尚待時日。目前市場上已有的一些H.264編碼產(chǎn)品,多數(shù)只實(shí)現(xiàn)H.264標(biāo)準(zhǔn)的部分算法,未能完全發(fā)揮H.264的編碼效率,預(yù)計(jì)形成成熟的產(chǎn)業(yè)鏈還需一段時間。在標(biāo)準(zhǔn)化方面,H.264無疑是最為全面的,它能夠支持從低碼率的手機(jī)、電視到高碼率的高清晰電視等多種應(yīng)用方式。而H.264中可伸縮性編碼將來的發(fā)展方向應(yīng)注重編碼效率的提高及算法復(fù)雜度減小。1.3主要研究工作我主要的研究工作包括以下幾個方面:1、以H.264為主,研究各

26、種可伸縮視頻編碼技術(shù);2、研究CABAC編碼協(xié)議以及JM8.6源程序的相關(guān)部分,將源程序的流程與編碼過程對應(yīng)起來;3、深入研究并理清CABAC對圖像的各種句法元素的編碼過程;4、分析比較CABAC的性能。1.4 本文安排本文余下內(nèi)容將如下安排。第二章將詳細(xì)介紹H.264標(biāo)準(zhǔn)(下文凡提到“標(biāo)準(zhǔn)”,均指文獻(xiàn)4)中的基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼CABAC,包括對它的二進(jìn)化,上下文建模與二進(jìn)制算術(shù)編碼這三種基本組成部分的深入描述。第三章將解釋H.264的官方測試源碼JM8.6中涉及到CABAC的部分程序,并與標(biāo)準(zhǔn)相對應(yīng)。第三章將通過JM8.6分析CABAC的性能,并與CAVLC相比較。具體的章節(jié)安

27、排見目錄。第二章 H.264標(biāo)準(zhǔn)中的CABAC2.1概述H.264又名“MPEG-4 AVC(Advanced Video Coding)”,是國際電信聯(lián)盟電信標(biāo)準(zhǔn)化部門(International Telecommunications UnionTelecommunication Standardization Sector,ITU-T)與國際標(biāo)準(zhǔn)化組織(International Organization for Standardization,ISO)聯(lián)合開發(fā)組共同開發(fā)的最新國際視頻編碼標(biāo)準(zhǔn),于2003年5月發(fā)布了第一個版本。在該標(biāo)準(zhǔn)中采用了一系列先進(jìn)的編碼技術(shù),在編碼效率、網(wǎng)絡(luò)適應(yīng)性等

28、諸多方面都超越了以往的視頻編碼標(biāo)準(zhǔn)。其中,為了改進(jìn)以往標(biāo)準(zhǔn)中熵編碼(Entropy Coding)存在的編碼效率低、重建效果差以及存在一些不可避免的幀間符號冗余等不足,H.264中規(guī)定了兩種熵編碼的模式,即基于上下文的自適應(yīng)二進(jìn)制算術(shù)編碼 (Context-bsaed Adaptive Binary Arithmetic Coding,CABAC)和基于上下文自適應(yīng)可變長編碼 (Context-bsaed Adaptive Variable-Length Coding,CAVLC )。熵編碼直接對變換編碼后的系數(shù)進(jìn)行編碼。視頻信號間有很強(qiáng)的非靜態(tài)統(tǒng)計(jì)依賴性,這些統(tǒng)計(jì)特性很大程度上依賴于視頻內(nèi)容

29、和圖像獲取方式。傳統(tǒng)的編碼思想是將視頻信號的比特流映射成一個個不同碼字長的語法元素,這種變長編碼僅僅利用了這些非靜態(tài)統(tǒng)計(jì)特性中的一部分進(jìn)行壓縮,而在以往的視頻編碼方案中,存在于語法元素?cái)?shù)值之間的高階統(tǒng)計(jì)依賴性則基本被忽略了。CABAC是H.264/AVC標(biāo)準(zhǔn)中兩種熵編碼方法中的一種,是將自適應(yīng)的二進(jìn)制算術(shù)編碼與一個設(shè)計(jì)精良的上下文模型結(jié)合起來得到的方法。它很好地利用了語法元素?cái)?shù)值之間的高階信息,使得熵編碼的效率得到了進(jìn)一步提高。它的主要特點(diǎn)有:利用每個語法元素的上下文關(guān)系,根據(jù)已編碼元素為待編碼元素選擇概率模型,即上下文建模;根據(jù)當(dāng)前的統(tǒng)計(jì)特性自適應(yīng)地進(jìn)行概率估計(jì);使用算術(shù)編碼。5圖2.1展示

30、了在CABAC中編碼一個單獨(dú)的句法元素的通用方框圖。這個編碼過程主要由三個基本步驟組成:1、二值化;2、上下文建模;3、基于表格的二進(jìn)制算術(shù)編碼。在第一步,一個給出的非二進(jìn)制值的句法元素唯一地對應(yīng)到一個二進(jìn)制序列,叫二進(jìn)制串。當(dāng)給出一個二進(jìn)制值的句法元素時,這一初始步驟將被跳過,如圖1所示。對于每個元素的二進(jìn)制串或每個二進(jìn)制值的句法元素,后面會根據(jù)編碼模式有一兩個子步驟。接下來就是對二元數(shù)據(jù)進(jìn)行編碼,標(biāo)準(zhǔn)中有兩種編碼模式可供選擇。在常規(guī)編碼模式(regular coding mode)中,一個句法元素的每一個二進(jìn)值(bin)按其判決產(chǎn)生的順序進(jìn)入上下文模型器,在這里,模型器根據(jù)已經(jīng)編碼過的句法

31、元素或二進(jìn)值為每一個輸入的二進(jìn)值分配一個概率模型,這就是上下文模型化。然后該二進(jìn)值和分配給它的概率模型一起被送進(jìn)常規(guī)算術(shù)編碼器進(jìn)行編碼,此外編碼器還要根據(jù)該二元位的值反饋一個信息給上下文模型器,用以更新上下文模型,這就是編碼中的自適應(yīng);另一種模式是旁路編碼模式(bypass coding mode),在該模式中,沒有模型器為每個二進(jìn)值分配一個特定的概率模型,輸入的二元數(shù)據(jù)是直接用一個簡單的旁路編碼器進(jìn)行編碼的,這樣做是為了加快整個編碼(以及另一端解碼)的速度,當(dāng)然,該模式只用于某些特殊的二進(jìn)值。后面將更加詳細(xì)地討論二值化,上下文建模與基于表格的二進(jìn)制算術(shù)編碼這三個主要步驟以及它們之間的相互聯(lián)系

32、。圖2.1 CABAC編碼器方框圖2.2二值化CABAC的二值化方案有四種基本類型:一元碼,截?cái)嘁辉a,k階指數(shù)哥倫布編碼,與定長編碼。此外,還有基于這些基本類型的聯(lián)合的二值化方案與基于查表的二值化方案。 一元碼(Unary)對于一個非二進(jìn)制的無符號整數(shù)值符號x0,在CABAC中的一元碼碼字由x個“1”位外加一個結(jié)尾的“0”位組成。例如,輸入的句法元素值為4,其二值化結(jié)果為11110。 截?cái)嘁辉a(Truncated Unary, TU)已知截?cái)嘀礢。對于一個非二進(jìn)制的無符號整數(shù)值符號0x<S,使用一元碼進(jìn)行二值化。對于等于一個非二進(jìn)制的無符號整數(shù)值符號x=S,其二值化結(jié)果全部由1組成,

33、長度為S。例如,當(dāng)截?cái)嘀礢=4時,句法元素值為3的二值化結(jié)果為1110,而句法元素值為4的二值化結(jié)果為1111。 k階指數(shù)哥倫布編碼(kth order Exp-Golomb, EGk)指數(shù)哥倫布編碼是由一個前綴和一個后綴的碼字連接組成的。EGk碼字的前綴部分由l(x)=log2x(x/2k+1)的值所對應(yīng)的一元碼組成。EGk碼字的后綴部分可以通過使用長度為k+l(x)位的x+2k(1-2l(x)的二進(jìn)值來計(jì)算。另外,EGk碼字也可以通過下面的偽C代碼推得。while(1) if (x>=(1<<k) put(1); x=x-(1<<k); k+;/EGk的一元碼

34、前綴 else put(0);/前綴的截止位“0” while(k-) put(x>>k)&0x01); /EGk的后綴 break; 定長編碼(Fixed-Length, FL)對用到定長編碼二進(jìn)化的句法元素值假設(shè)了一個有限的字母表 0,1,2,Cmax,編碼的二進(jìn)制長度為 。其中,二進(jìn)制1對應(yīng)其中重要性最低的符號,隨著重要性的增加,二進(jìn)制數(shù)也會跟著增加。 4位FL與截?cái)嘀禐?的TU聯(lián)合二值化方案前綴使用長度為4位(Cmax=15)的定長編碼,后綴使用截?cái)嘀礢=2的一元截?cái)啻a。 TU與EGk的聯(lián)合二值化方案(Unary/kth order Exp-Golomb, UEGk

35、)前綴使用一元截?cái)啻a,后綴使用k階哥倫布編碼。對于不同的句法元素值,有不同的截?cái)嘀蹬c階數(shù)。 各種句法元素值的二值化宏塊跳過標(biāo)記mb_skip_flag、4*4亮度塊的幀內(nèi)預(yù)測模式標(biāo)記prev_intra4x4_pred_mode_ flag、8*8亮度塊的幀內(nèi)預(yù)測模式標(biāo)記prev_intra8x8_pred_mode_ flag、當(dāng)前宏塊的幀/場模式標(biāo)記mb_field_decoding_flag、已編碼塊標(biāo)記coded_block_flag、重要系數(shù)標(biāo)記significant_ coeff_flag、最后一個重要系數(shù)標(biāo)記last_significant_coeff_flag、系數(shù)符號位標(biāo)記c

36、oeff_sign_ flag、片結(jié)束標(biāo)記end_of_slice_flag、8*8轉(zhuǎn)換系數(shù)塊標(biāo)記transform_size_8x8_flag均使用1位的定長編碼。運(yùn)動矢量差的絕對值使用截?cái)嘀禐?的UEG3二值化。色度幀內(nèi)預(yù)測模式intra_chroma_pred_mode使用截?cái)嘀禐?的TU二值化。轉(zhuǎn)換系數(shù)的絕對值減一coeff_abs_level_minus1使用截?cái)嘀禐?4的UEG0二值化。塊編碼模式coded_block_pattern使用4位FL與截?cái)嘀禐?的TU聯(lián)合二值化方案。該句法元素指定了6個塊,其中4個用于亮度,2個用于色度,表示其中是否含有非零系數(shù)。coded_block

37、_pattern=coded_block_patternY+16*nc,首先,亮度部分的coded_block_patternY使用的是4位FL轉(zhuǎn)換,而色度部分nc用的是截止值為2的TU二進(jìn)制變換。宏塊類型mb_type與子宏塊類型sub_mb_type的二值化通過查表獲得,詳情參見標(biāo)準(zhǔn)。各句法元素的二值化方案可以參見標(biāo)準(zhǔn)中的表9-25。 聯(lián)合二值化方案編碼實(shí)例輸入的句法元素值為幅度的絕對值abs_level=20。則coeff_abs_level_minus1=19,對此使用截?cái)嘀礢=14,階數(shù)k=0的UEG0二值化方案。先編碼前綴部分,按照編碼規(guī)則易得二進(jìn)制序列為11 1111 1111

38、1111(14個1)。再編碼后綴部分,下面分別按照偽C代碼與編碼規(guī)則進(jìn)行編碼:1、按照偽C代碼進(jìn)行編碼x = 19 S = 5。進(jìn)行第一次循環(huán):5>1(即1<<0),因此put(1), x=5-1=4, k+1=1;進(jìn)行第二次循環(huán):4>2(即1<<1),因此put(1), x=4-2=2, k+1=2;進(jìn)行第三次循環(huán):2<4(即1<<2),因此put(0);至此得到EG0的前綴一元碼與截?cái)辔?。進(jìn)行第一次循環(huán):k-1=1,因?yàn)?x>>k)&0x01=(2>>1)&0x01=1,所以put(1);進(jìn)行第

39、二次循環(huán):k-1=0,因?yàn)?x>>k)&0x01=(2>>0)&0x01=0,所以put(0);至此得到EG0的后綴序列10。2、按照編碼規(guī)則進(jìn)行編碼由x=5得l(x)=log2x(x/2k+1)=2,對應(yīng)的一元碼110即為EG0前綴。又因?yàn)閤+2k(1-2l(x)=5-3=2=(10)2,其中后綴碼字長度為k+l(x)=2,則EG0后綴為10。可見,兩種方法得到的聯(lián)合二值化后綴碼字相同,均為11010,則最終輸出的二進(jìn)制序列為11 1111 1111 1111 11010。2.3上下文建模CABAC將片(Slice)作為算術(shù)編碼的生命期。但對具體句法元

40、素的編碼卻是發(fā)生在宏塊級。實(shí)際上,在同一個宏塊中,不同的句法元素是獨(dú)立編碼。但在不同的宏塊中,相鄰宏塊的句法元素的上下文信息(包括概率狀態(tài)state與最大概率符號MPS的值)可用于編碼當(dāng)前宏塊的同一句法元素。 上下文的初始化在開始編碼一個新的片時,都會對每個上下文模型指定相應(yīng)的一對變量(m, n),并根據(jù)m, n的值計(jì)算出每個上下文模型對應(yīng)的初始概率狀態(tài)state與最大概率符號MPS的值。該初始化的過程有以下三個步驟:1、計(jì)算 pre_state=(m*(QP-12)>>4)+n;2、對于P和B幀圖像限制pre_state在0,101內(nèi),對于I幀圖像,限制pre_state在27,

41、74內(nèi),即pre_state= min(101, max(0, pre_state)(對P 和B幀),pre_state=min (74,max(27, pre_state)(對I幀);3、將pre_state按以下規(guī)則映射到數(shù)組state, MPS:如果pre_state<=50,state=50- pre_state, MPS=0,否則state= pre_state-51, MPS=1對于不同上下文模型的(m, n)分配參看標(biāo)準(zhǔn)。 上下文模型的分類上下文模型大概可以分成4種。第一種上下文模型包含當(dāng)前要編碼的句法元素的兩個相鄰塊的已編碼句法元素的信息,其中相鄰塊的具體位置就要看句法元

42、素了,一般是根據(jù)左邊與上邊的相鄰塊。第二種上下文模型只對mb_type與sub_mb_type的句法元素有定義。對于這種上下文模型,之前已編碼的二進(jìn)串的值(b0, b1, b2, bi-1)是用來為一個索引為i的二進(jìn)制句法元素值選擇模型的。第三與第四種上下文模型都是只應(yīng)用在殘差數(shù)據(jù)上。與其它上下文模型不同,這兩種類型都是依賴于不同塊種類的上下文范圍,如下文所示。其中,第三種類型并不依賴于已編碼數(shù)據(jù),而是待編碼數(shù)據(jù)在掃描路徑上的位置。對于第四種類型,首先在前面已編碼(已解碼)的變換系數(shù)幅度中,統(tǒng)計(jì)出具有某個特定值的變換系數(shù)幅度出現(xiàn)的總次數(shù),然后根據(jù)這個數(shù)值來為當(dāng)前變換系數(shù)中的二進(jìn)值確定上下文模型

43、。除了這些基于條件概率的上下文模型,還有固定的概率模型映射到為那些已在常規(guī)模式被編碼的所有二進(jìn)串的,以及先前沒有指定范圍的的上下文模型可以用到的二進(jìn)值索引。 上下文模型的分配與確定通常,每個句法元素的上下文模型根據(jù)上下文索引偏移量與上下文增量來確定。其中,上下文索引偏移量對于特定類型片中的特定句法元素是唯一確定的,可以在標(biāo)準(zhǔn)中通過查表獲得。而上下文增量,則是根據(jù)相鄰塊的編碼情況(也就是上下文信息)得出。對于不同的句法元素,所需相鄰塊的信息不同,但一般包括可用性(如當(dāng)前塊在片的邊緣上,則相鄰快可能由于不是在同一片中而不可用)與同一句法元素的編碼值。通常用于計(jì)算上下文增量的上下文建模函數(shù)為ctx_

44、var_spat=cond_term(A,B),A和B表示當(dāng)前塊的相鄰塊。其中cond_term()表示的是一種函數(shù)關(guān)系,有以下3種具體情況:ctx_var_spat1=cond_term(A) + cond_term(B);ctx_var_spat2=cond_term(A) + 2*cond_term(B);ctx_var_spat3=cond_term(A)另外,對于利用先前bin值(已編碼值)的上下文建模函數(shù)為ctx_var_bink = cond_term (b1, , bk-1)各句法元素的上下文增量的具體推導(dǎo)過程參見標(biāo)準(zhǔn)。2.4二進(jìn)制算術(shù)編碼算術(shù)編碼是基于區(qū)間劃分的,CABAC的

45、算術(shù)編碼有以下3個明顯性質(zhì):1、概率估計(jì)是對小概率符號LPS(Plps<0.5)的概率而言的,是通過基于表格中64個不同概率狀態(tài)Pk|0k<64之間的相互轉(zhuǎn)換而實(shí)現(xiàn)的。2、區(qū)間長度R通過一組預(yù)先量化的值Q1,Q2,Q3,Q4進(jìn)行量化以計(jì)算新的間隔區(qū)間。通過儲存一個二維表格TabRangeLPS來決定LPS的新的子間隔范圍Rlps,表格包含所有64*4預(yù)計(jì)算值Qi * Pk,通過快速查表這樣就可以免除算術(shù)編碼中的乘法運(yùn)算了。3、對近似均勻分布(Plps=0.5)的句法元素,在編碼和譯碼時選擇旁路方式,可以免除上下文建模,提高編碼速度。 概率估計(jì)在H.264/AVC中的免除乘法的二進(jìn)制

46、編碼基本思想依賴于一個假設(shè):每一個上下文模型估計(jì)的概率可以用一個有效的有限的特征值集合來表征。對于CABAC,對LPS有64個特征概率值。 伸縮因子,N64一方面想要獲得快速的自適應(yīng)N要小;另一方面,如果想獲得更加穩(wěn)定更加精確的估計(jì),則需要更大的N。注意在MQ編碼中,在CABAC方法中,不需要對LPS的概率值進(jìn)行表格化。在算術(shù)編碼中,每一個概率僅僅用其相關(guān)的索引 作為地址。這樣設(shè)計(jì)的結(jié)果導(dǎo)致,CABAC中的每一個上下文模型可以有兩個參數(shù)完全決定:LPS概率當(dāng)前估計(jì)值()和MPS的值(0或者1)。這樣,在CABAC的概率估計(jì)中有128個不同的狀態(tài),每一個狀態(tài)用一個7位整型數(shù)來表達(dá)。實(shí)際上,有一個

47、狀態(tài)的索引()對應(yīng)著LPS的最小概率值,但它并沒有被納入CABAC的概率估計(jì)和更新的范圍,這個值被用作特殊的場合,傳達(dá)特殊的信息。比如,當(dāng)解碼器檢測到當(dāng)前區(qū)間的劃分依據(jù)是這個概率值時,認(rèn)為這表示當(dāng)前流的結(jié)束。因此只有126個有效概率狀態(tài)。另外,有一個狀態(tài)的索引()對應(yīng)LPS的最小概率值,它對應(yīng)的更新值是它自身,當(dāng)MPS連續(xù)出現(xiàn),LPS的概率持續(xù)減小,直到,保持不變。7概率估計(jì)指的是上下文的更新,因此只發(fā)生在編碼不同塊中同一句法元素或者其它上下文發(fā)生改變的時候,它是通過在LPS的64個概率狀態(tài)之間互相轉(zhuǎn)移而實(shí)現(xiàn)的。對于一個給定概率狀態(tài),概率的更新取決于狀態(tài)索引和已經(jīng)編碼的符號值(MPS or L

48、PS)。更新過程導(dǎo)致一個新的概率狀態(tài),潛在的LPS概率修正,如果有必要需要修改MPS的值。如果當(dāng)state0時,也就是LPS的概率已經(jīng)達(dá)到了最大值0.5,輸入的是一個小概率符號LPS,那么MPS和LPS就要互換,因?yàn)閟tate0時,Plps0.5。在I片中,有: if(decision=MPS) state<-next_state_MPS_intra(state) else state<-next_state_LPS(state)在其他片中,有: if(decision=MPS) state<-next_state_MPS (state) else state<-nex

49、t_state_LPS(state) 算術(shù)編碼器的總體描述CABAC編碼器由兩個子編碼器組成,一個用于常規(guī)編碼模式,另一個稱為旁路編碼器用于符號的快速編碼。下面對常規(guī)編碼器具體的編碼過程進(jìn)行描述,編碼過程必須與后面介紹的譯碼過程相匹配(H.264標(biāo)準(zhǔn)文件中給出了譯碼流程,沒給出具體的編碼流程,下面給出的是可參考的編碼流程,必須與譯碼流程匹配)1、首先是編碼器的初始化該過程是發(fā)生在編碼片的第一個宏塊之前,在編碼I_PCM宏塊的數(shù)據(jù)元素pcm_alignment_zero_bit和所有pcm_byte數(shù)據(jù)之后的。此過程中,輸出的是算術(shù)編碼器中的相關(guān)參數(shù),區(qū)間下限codILow設(shè)置為0,區(qū)間長度co

50、dIRange設(shè)置為0x01FE,另外的firstBitFlag設(shè)置為1,計(jì)數(shù)器(用于防止相關(guān)寄存器溢出)bitsOutstangding和symCnt都被設(shè)置為0。2、編碼決定此過程輸入的是Binval(語法元素經(jīng)過二進(jìn)制化后的值),context_id(上下文模型)和編碼器的環(huán)境codirange,codilow和symCnt,輸出的值是codirange,codilow和symCnt。如圖2.2所示。該過程可以分為4個步驟(1)通過當(dāng)前編碼器區(qū)間范圍codiRange計(jì)算Qi的索引值i,然后利用狀態(tài)索引(由上下文模型得到)和i進(jìn)行查表得出Rlps的概率。(2)根據(jù)要編碼的符號是否MPS來

51、更新算術(shù)編碼中的概率區(qū)間下限和概率區(qū)間范圍。(3)上下文模型概率狀態(tài)的更新(參考前文)(4)重整化處理,具體操作在后文給出。圖2.2 基于查表的算術(shù)編碼器流程3、重整化處理在區(qū)間劃分結(jié)束后,如果新的區(qū)間范圍R不在合法范圍28, 29之內(nèi),那么就需要進(jìn)行重整化操作,輸出1位或多位。如圖2.3所示。其中用到的PutBit程序,其流程圖如圖2.4所示。圖2.3 重整化操作流程圖圖2.4 重整化中的PutBit程序4、旁路編碼模式為了加快符號編碼,假設(shè) ,則常規(guī)算術(shù)編碼過程得到了簡化。首先,概率估計(jì)和更新過程的旁路被建立;其次間隔細(xì)分被執(zhí)行。如圖2.5所示。圖2.5 旁路編碼流程最后,編碼完片內(nèi)所有宏

52、塊的句法元素后,寫入end_of_slice_flag的標(biāo)志,然后進(jìn)行字節(jié)壓縮,在編碼完一幅圖像的所有元素后,所有輸出的二進(jìn)制位都會進(jìn)行封裝,成為適合NAL層的傳輸單位。第三章 JM8.6中的CABAC本章主要介紹H.264的官方測試源碼JM8.6中涉及到CABAC的部分。在JM8.6中,main函數(shù)是在lencod.c文件中。其中對每個圖像進(jìn)行熵編碼的部分通過調(diào)用image.c文件中的encode_one_frame函數(shù)來實(shí)現(xiàn)。在encode_one_frame函數(shù)中,根據(jù)當(dāng)前圖像使用的是幀模式還是場模式,進(jìn)一步選擇field_picture函數(shù)與frame_picture函數(shù)。這兩個函數(shù)中

53、都使用到code_a_picture函數(shù)來對編碼一個圖像。算術(shù)編碼是對整個流分配碼字,但考慮到如果有某個比特丟失,編碼和解碼將會發(fā)生錯位。為了將差錯控制在一定的范圍內(nèi),CABAC將片(Slice)作為算術(shù)編碼的生命期。7因此,在code_a_picture函數(shù)中,對每個片進(jìn)行熵編碼的部分通過調(diào)用slice.c文件中的encode_one_slice函數(shù)來實(shí)現(xiàn)。上述函數(shù)均為基于片以上的操作,其架構(gòu)如圖3.1所示。圖3.1 JM8.6中基于片以上的函數(shù)架構(gòu)而基于片上的操作,相關(guān)各函數(shù)的架構(gòu)則如圖3.2所示。圖3.2 JM8.6中編碼一個片所用到的各函數(shù)架構(gòu)下面將對JM8.6的encode_one_slice函數(shù)及其調(diào)用函數(shù)中涉及到CABAC的部分(symbol_mode = CABAC)進(jìn)行分析,其中:3.1給出了slice.c部分函數(shù)的分析。3.2給出了macroblock.c部分函數(shù)的分析。3.3給出了rdopt.c部分函數(shù)的分析。3.4給出了cabac.c部分函數(shù)的分析。3.5給出了biariencode.c部分函數(shù)的分析。另外,當(dāng)中涉及到的主要函數(shù),包括main函數(shù)、encode_one_frame函數(shù)、frame_picture函數(shù)、cod

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論