二值化,开门见山的讲,就是将非二进制的字符按照一定的规则编码为二进制串了,这样编码以后,出现的编码符号便只有0和1,从算术编码的角度来讲,可能出现的字符就只有“0”和“1”,这样更有利于编码。常见的二值化编码算法有,一元码,截断一元码,K阶指数哥伦布编码,在此做简单介绍,希望能给大家一个直观的认识。

  1. 一元码

    一元码的编码规则是,对于待编码的符号“x”>=0,编码为x个“1”再加一个“0”编码组成。举个栗子:

    x = 5,根据一元码编码后,编码为“111110”。

2.截断一元码
截断一元码属于一元码的变体,用在已知待编码的语法元素的最大值Max的情况下。假设待编码符号为x:
如果0 < x < Max,x二值化采用一元码的方式;
如果x = Max,x二值化的二进制串全部由1组成,长度为Max。
举个栗子:
设一个序列中的Max = 6,则对符号“6”进行编码,结果为“111111”,对符号“3”进行编码,按一元码的编码方式,结果为“1110”。

3.K阶指数哥伦布编码
K阶指数哥伦布编码,主要的编码格式为【前缀0】【1】【bit信息】的结构。分别计算出了前缀0的长度,即前缀有多少个0,1的个数,以及bit信息,就完成了整个编编码。编码步骤如下:
(1)将待编码的数据以二进制的形式表示,去掉最低位的k个比特,然后加1,得到新的值T1,查看T1含多少个bit,将该值减1,得到的便是前缀0的个数;
(2)将第一步中去掉的最低K个比特位加到T1后,暂称其为T2;
(3)在T2前增加前缀0.至此编码就完成喽。

还是举个栗子吧:
对7进行一阶指数哥伦布编码,则k =1。
首先计算前缀0的个数:
7的二进制表示为 111,去掉最低位的1个比特,为11,然后加1,得T1 = 100,T1包含3个比特, 3 - 1 = 2,所以前缀0的个数为2;
将去掉的1个比特位加上,得T2 = 1001;
在T2前增加两个前缀0,得 001001,即最终的编码结果为001001。