文档介绍:算术编码(Arithmetic Coding)的概念是Elias在六十年代初期提出来的,Rissanen和Pasco首次介绍了它的实用技术。到八十年代才出现了算术编码的具体实现方法。
算术编码的基本原理是:将被编码的信息表示成实数0和
算术编码(Arithmetic Coding)的概念是Elias在六十年代初期提出来的,Rissanen和Pasco首次介绍了它的实用技术。到八十年代才出现了算术编码的具体实现方法。
算术编码的基本原理是:将被编码的信息表示成实数0和1之间的一个间隔(Interval)。信息越长,编码表示的间隔就越小,表示这一间隔所需的二进制位就越多。信息源中连续的符号根据某一模式生成概率的大小来减少间隔,出现概率大的符号比出现概率小的符号减少的范围小,因此只增加较少的比特位。
在传输任何信息之前的信息完整范围是[0,1)。当一个符号被处理时,这一范围就依据分配给这一符号的那部分变窄。
初始的range是[0,1),high=1,low=0;然后依据下列公式:
low=low+range*rangelow,
high=low+range*rangehigh,
编码模式rangelow和rangehigh的指定依据该符号出现的概率而定。
算术编码方法有两种编码模式:基于概率统计的固定模式及自适应模式。
采用固定模式需要事先对码书中的码字进行预扫描,以统计各码字出现的概率,此过程计算量比较大,举例来说:一幅160*120的图像,选用4*4的矢量字,则共有1200个矢量,如果选用256个码字的码书(Code Book),则每次迭代中矢量匹配量是1200*256=307200,显然计算量很大,计算效率不高;若出现新的不在码书中的码字,则图像还原效果就会比较差,因此采用此方法必须对要压缩的每一幅图像均进行码字预扫描。
而自适应模式各个符号的概率初始值设为相同值,它们依据出现的码字而相应的改变其概率值,若出现新的码字只需要在码书中添加上即可。只要编码器和解码器使用相同的初始值和相同的改变值的方法,那么它们的概率模型将保持一致。编码器接收到下一个码字对其编码,然后改变概率模型,解码器根据当前的模式解码,然后再改变自己的概率模型。
举例来说,有a、b、c、d四个基本字符组成的字串bacda。,即:a[0,)、b[,)、c[,)、d[,1),编码到字串中第五个字符即“a” 时,修改4个基本字符的概率为a[0,)、b[,)、c[,)、d[,1)。按照(5)(6)式计算后,得到:
low high
初始值 [0, 1)
编 码 b [, )
a [, )
c [, )
d [, )
a [, )
解码时只要知道最后的范围[,)和改变概率的时间及值,就可以解得这个字符串。
  解码是编码的逆过程,了解了编码过程后,理解解码过程的操作就相对容易了。解码时,通过判断