CABAC編碼協議詳細分析(初稿)_第1頁
CABAC編碼協議詳細分析(初稿)_第2頁
CABAC編碼協議詳細分析(初稿)_第3頁
CABAC編碼協議詳細分析(初稿)_第4頁
CABAC編碼協議詳細分析(初稿)_第5頁
已閱讀5頁,還剩16頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、CABAC詳細分析CABAC的三個步驟:1.二進制轉換:把非二進制語法元素唯一映射到一個二進制碼字2.上下文建模:利用已編碼的符號為語法元素選擇合適的上下文模型并自動更新概率模型3基于表格的算術編碼:利用查表的方式進行算術編碼,有效地避免了乘法運算二進制轉換一.一元碼對于一個非二進制數C來說,編碼 個1并在最后加上一個0二.一元截斷碼對于C小于Cmax時,用一元碼的編碼方法,當C=Cmax時,編碼個1而不在最后加0三.UEGK二進制轉換前綴由CmaxUCoff的一元截斷碼組成,后綴用k階哥倫布編碼數字CUcoff,其中k階哥倫布編碼用以下程序編碼(對于要編碼符號S)四.固定長度二進制轉換對于字

2、母表【0,1,2,Cmax】,編碼的二進制長度其中,二進制1對應其中重要性最低的符號,隨著重要性的增加,二進制也會跟著增加五.對于宏塊與子宏塊類型的具體二進制化對應當adaptive_block_size_transform_flag=0時(非ABT變換,以下都針對非ABT變換),參看表格9-20,9-21,9-22:關于表格的說明:對應在SI幀內的宏塊類型二進制轉換按以下方法:前綴構成:當類型為mb_type_Sintra_4*4沒有后綴,否則由表920給出對于在P和SP圖像的幀內預測宏塊 ,mb_type=730的前綴由表9-21給出,后綴用表9-20對于在B圖像中的幀內預測宏塊,mb_t

3、ype=2347的前綴由表9-21給出,后綴用表9-20以上都是對非ABT變換來說的,對于ABT變換,要參考其他二進制方案表格,此處略去。 各種不同的語法元素,都是用到前面的4種二進制方案或者某兩種二進制方案的串接,下面舉例對變換系數的二進制方案進行說明:首先該過程分為3個步驟:1.如果coded_block_flag0,說明沒有重要系數(非0系數),不需要對宏塊的信息進行編碼,否則進行第二步2.在掃描的過程中,對于每個掃描位置i,如果i位置的系數是0,那么significant_coeff_flagi=0,否則significant_coeff_flagi=1,當significant_co

4、eff_flagi=1時,繼續編碼last_ significant_coeff_flagi,如果該系數不是最后一個非0系數, last_ significant_coeff_flagi0,否則1,當等于1時不需要再對宏塊剩余的0系數進行編碼3.對應那些significant_coeff_flagi1的系數,要編碼coeff_absolute_value_minus_1和coeff_sign,對于前者,采用UEG0編碼(UCoff14),對于后者直接采用旁路編碼器(將在后文說到)上下文定義與分配首先,每個語法元素對應一個或者多個上下文指示器context_id,經過二進制轉換后的語法元素可能有

5、不止一位的二進制值,以mb_type_I(I幀圖像內的宏塊類型)為例,對應的context_id為ctx_mb_type_I,該語法元素二進制化后有6位二進制值,分別對應ctx_mb_type_Ik,1<=k<=6即max_idx_ctx_id=6,而每個context_id 對應一定范圍內的上下文變量context label,可參看下表: 具體每個CTX_IDK對應哪幾個LABEL可進一步參考下表:上下文模板具體某一位context_idk可能對應幾個不同的context label,那么究竟具體對應哪個就由上下文模板來決定,上下文模板將在下面進行說明;一. 利用兩個相鄰符號的

6、上下文模板 如圖所示,正要編碼的符號S是在當前宏塊塊C中,A,B是C的相鄰宏塊通過關系式:ctx_var_spat=cond_term(A,B) (91)計算出符號S的上下文增量X,通過用OFFSET+X得出對應的context label的值。其中cond_term()表示的是一種函數關系,對于91式,有以下3種具體情況: 此外,ctx_coded_block依賴的是表928中的6種塊類型,對于上下文變量ctx_abs_mvd_h1和ctx_abs_mvd_v1,按以下式子編碼:二、利用先前bin值的上下文模板關系式: 對應的表格:三.關于變換系數信息的上下文定義 有關變換系數的上下文信息都

7、由context_category決定,參看context_category的定義表:ctx_sig_coeff和ctx_last_coeff對應的是significant_coeff_flag和last_significant_coeff_flag,有以下關系式: 其中scanning_pos指示的位置與zig-zag掃描相關,對于ctx_abs_level包含2個變量ctx_abs_level1和ctx_abs_level2,有以下關系式:其中num_decod_abs_lev_eql指的是已編碼的絕對值等于1的系數,Num_decod_abs_lev_gtl指的是已編碼的絕對值大于1的系

8、數(兩者都在當前宏塊中計算)上下文模型的初始化前文解決了如何給語法元素的每一位分配context label的問題,現在來解決一下究竟每一個context label對應什么樣的狀態。首先是狀態的初始化問題,狀態包含一個代表狀態的數字和MPS(最大概率符號),實質上上下文模型狀態的初始化是由該幀圖像的量化參數QP決定的,對于每一個context label都分配一對數組m,n,狀態的初始化按以下的三步進行:1. 計算 pre_state=(m*(QP-12)>>4)+n;2. 對于P和B幀圖像限制pre_state在0,101內,對于I幀圖像,限制pre_state在27,74內,

9、即pre_state= min(101,max(0, pre_state) (對P 和B幀), pre_state=min (74,max(27, pre_state) (對I幀)3. 將pre_state按以下規則映射到數組state,MPS,規則:如果pre_state<=50, state=50- pre_state,MPS=0,否則 state= pre_state-51,MPS=1對于不同context label的m,n分配,參看以下表格:基于表格的算術編碼算術編碼是基于區間細分的,CABAC的算術編碼有以下3個明顯性質:1 概率的估計是對小概率符號LPS的概率而言的,是通過

10、基于表格中64個不同狀態之間的轉換而實現的。2 區間長度R通過一組預先量化的值Q1,Q2,Q3,Q4進行量化以計算新的間隔區間。通過儲存一個64*4的表格(Qi*Pk)來避免R*Pk的乘法運算。3 一個獨立的編碼路徑(旁路編碼)用于對近似均勻分布(Plps=0.5)的語法元素一. 概率估計概率估計在H.264/AVC中的免除乘法的二進制編碼基本思想依賴于一個假設:每一個上下文模型估計的概率可以用一個有效的有限的特征值集合來表征。對于CABAC,對LPS有64個特征概率值。伸縮因子,N64一方面想要獲得快速的自適應N要小;另一方面,如果想獲得更加穩定更加精確的估計,則需要更大的N。注意在MQ編碼

11、中,在CABAC方法中,不需要對LPS的概率值進行表格化。在算術編碼中,每一個概率僅僅用其相關的索引作為地址。這樣設計的結果導致,CABAC中的每一個上下文模型可以有兩個參數完全決定:LPS概率當前估計值()和MPS的值(0或者1)。這樣,在CABAC的概率估計中有128個不同的狀態,每一個狀態用一個7位整型數來表達。實際上,有一個狀態的索引()與一個自治的非自適應的狀態相關,它帶有一個固定值的MPS,它僅僅在算術碼字終止前用于編碼二進制決定位(binary decisions).因此只有126個有效概率狀態。1) 概率狀態的更新對于一個給定概率狀態,概率的更新取決于狀態索引和已經編碼的符號值

12、(MPS or LPS)。更新過程導致一個新的概率狀態,潛在的LPS概率修正,如果有必要需要修改MPS的值。表格9-35顯示的是編碼MPS或LPS后的狀態轉移規則。對于I幀圖像來說把狀態控制在前24個內是有利的,因此,表9-35包含了獨立的一列用作I幀圖像。在編碼一個MPS或者LPS后,概率估計自動從一個狀態轉移到另外一個狀態進行自動更新,對于I幀圖像來說,有: If (decision=MPS) State<-Next_State_MPS_INTRA(State) Else State<-Next_State_LPS (State)對于其他幀的圖像來說,有: If (decisi

13、on=MPS) State<-Next_State_MPS (State) Else State<-Next_State_LPS (State)此外,當狀態在0的時候(就是Plps=0.5), 如果編碼得到的是一個LPS,那么LPS的概率就超過了原來MPS的概率,因此,LPS與MPS的值要進行交換。 二.算術編碼器的總體描述算術編碼器的情形是由一個指向編碼子區間的V值和一個表示該區間長度的R值描述的。圖9-3顯示了編碼的流程:對于編碼器的初始化(InitDecoder),將在后文中談到,其中V和R將被初始化。對于每一個編碼決定的S(具體說編1或者0),有兩個步驟。一是讀取上下文模型,上文已經解決了該問題;二是根據上下文決定S的值,這將在后面給出。 A. 算術編碼器的初始化初始化如圖9-4所示,V是通過GetByte函數獲得2個壓縮數據的字節,R的初始化設置為0x8000。 關于GetByte函數:圖9-7顯示了壓縮數據是如何輸入的;首先,一個新的壓縮數據的字節從比特串C中讀取,然后指向當前比特串位置的CL增加1,比特計算器BG被設置成7 B. 編碼決定圖9-5顯示的是一個編碼決定,即決定具體編碼的符號是MPS

溫馨提示

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

評論

0/150

提交評論