1. 程式人生 > >關於CABAC的幾點認識

關於CABAC的幾點認識

一,自適應二進位制算術編碼
CABAC採用自適應二進位制算術編碼方式,自適應即信源符號的概率根據編碼時符號出現的頻繁程度動態進行修改,在編碼過程中需要對信源符號概率進行更新,該過程稱為建模。
假設有一個隨機變數X,信源列表為{0,1},概率分佈為{p(X=0)=p0,p(X=1)=p1}。設0和1的累積概率為p0和p1,編碼前後碼字C值分別為C_old和C_new,編碼前後的區間長度A分別為A_old和A_new,則有:
C_new = C_old+(A_old*pi) (1)
A_new = A_old*pi (2)
i由輸入碼字決定取0或1;


二,CABAC
HEVC中的CABAC分四步執行:上下文概率模型構建、語法元素二進位制化、更新概率估計、二進位制算術編碼。


1,上下文概率模型
自適應二進位制算術編碼需要對0和1的概率進行更新,使概率能夠實時準確地反映0和1的分佈。考慮到符號之間可能存在的相關性,在自適應算術編碼中通常引入模型的概念,也就是根據當前輸入符號和在它之前出現符號的某個特徵將當前符號歸入不同的類別,不同的類別有不同的統計特性。因此在HEVC中為每個語法元素分配了專用的概率模型。
在編碼中,語法元素所使用的上下文概率模型都被唯一的上下文索引號標誌,該索引號包括兩部分:最大概率符號MPS和概率狀態索引pStateIdx


2,二進位制化
CABAC是二進位制算術編碼,對非二進位制元素,如運動向量、巨集塊型別、參考幀號以及變換量化後的殘差資料,需要預先進行二進位制化。
對於CABAC這種結構,使用二進位制算術編碼較之多進位制算術編碼有很多的優越性:
首先可實現快速自適應;
其次,二進位制算術編碼器不會出現0或1的概率極小的情況,從而導致編碼效率大幅度降低(區間細分嚴重,編碼後碼字過長);
CABAC中每一個二進位制符號都對應著一個上下文模型,可以避免設定較多的上下文模型;


3,更新概率估計
在CABAC中,根據先驗知識為LPS(最小概率符號,與MPS一一對應)設定了64個代表值,即狀態轉移表,pStateIdx與LPS的概率值一一對應,而概率估計即LPS概率的更新,最終表現為pStateIdx的變化,該狀態轉移表即HEVC標準提案JCTVC-L1003_v34中Table 9-41,初始化過程提案中同樣有介紹

概率估計即通過狀態轉移表來實現,其中每個狀態代表一種概率分佈,狀態之間相互轉化的條件就是已編碼位的取值,更新到哪一個狀態,並不是根據前一位取0還是取1,而是根據取的是LPS還是MPS來決定的。具體更新過程參考標準提案