視頻壓縮
本文引用地址:http://www.ex-cimer.com/article/166500.htm
2. 算術(shù)編碼
霍夫曼編碼的每個代碼都要使用一個整數(shù)位, 如果一個符號只需要用2.5位就能表示, 但在霍夫曼編碼中卻必須用3個符號來表示, 因此它的效率較低。 與其相比, 算術(shù)編碼并不是為每個符號產(chǎn)生一個單獨的代碼, 而是使整條信息共用一個代碼, 增加到信息上的每個新符號都遞增地修改輸出代碼。
假設(shè)信源由4個符號S1、 S2、 S3和S4組成, 其概率模型如表6-1所示。 把各符號出現(xiàn)的概率表示在如圖6-3所示的單位概率區(qū)間之中, 區(qū)間的寬度代表概率值的大小, 各符號所對應(yīng)的子區(qū)間的邊界值, 實際上是從左到右各符號的累積概率。 在算術(shù)編碼中通常采用二進(jìn)制的小數(shù)來表示概率, 每個符號所對應(yīng)的概率區(qū)間都是半開區(qū)間, 如S1對應(yīng)[0, 0.001), S2對應(yīng)[0.001, 0.011)。 算術(shù)編碼所產(chǎn)生的碼字實際上是一個二進(jìn)制小數(shù)值的指針, 該指針指向所編的符號所對應(yīng)的概率區(qū)間。
表6-1 信源概率模型和算術(shù)編碼過程
圖 6-3 算術(shù)編碼過程示意圖
若將符號序列S3S3S2S4進(jìn)行算術(shù)編碼, 序列的第一個符號為S3, 我們用指向圖6-3中第3個子區(qū)間的指針來代表這個符號, 由此得到碼字0.011。 后續(xù)的編碼將在前面編碼指向的子區(qū)間內(nèi)進(jìn)行。 將[0.011, 0.111)區(qū)間再按符號的概率值劃分成4份, 對第二個符號S3, 指針指向0.1001,碼 字串變?yōu)?.1001。 然后S3所對應(yīng)的子區(qū)間又被劃分為4份, 開始對第3個符號進(jìn)行編碼……。
算術(shù)編碼的基本法則如下:
(1) 初始狀態(tài): 編碼點(指針?biāo)柑?C0=0, 區(qū)間寬度A0=1。
(2) 新編碼點: Ci= Ci-1 + Ai-1×Pi。
式中, Ci-1是原編碼點; Ai-1是原區(qū)間寬度;
Pi所編符號對應(yīng)的累積概率。
新區(qū)間寬度Ai= Ai-1×pi
式中, pi為所編符號對應(yīng)的概率。
根據(jù)上述法則, 對序列S3S3S2S4進(jìn)行算術(shù)編碼的過程如下:
第一個符號S3:
C1=C0+A0×P1=0+1×0.011=0.011
A1=A0×p1=1×0.1=0.1
[0.011,0.111]
評論