Glomb编码及其变种

Glomb编码

在这里插入图片描述
Glomb编码使⽤可调整参数M把待编码值分成两部分: 商数q及余数r。 商数当做⼀元编码⽽余数放在后⾯做可缩短的⼆进制编码。当M=1哥伦布编码等同于⼀元编码。
示例:设M = 10. 则 b = (向上取整)ceil[log2(10)] = 4; 2^b-M=16-10=6}当选42作为编码时,42会被拆成q=4及r=2,根据上述算法对q(4)、r(2)编码为11110 010。

算法过程

1. 选择整数作为M
2. 得到编码数值N,

1.商数:q = int[N/M]
2.余数:r

3. 整体编码: <商数编码><余数编码>

1.商数编码 :写q⻓度位元的1,再写⼀个0位元
2.余数编码:如果M’是2的次⽅,编码是⼆进制形式,需要log2(M)
如果M’不是2的次⽅,令b = ceil[log2(M)]

  • If { r < 2^b-M} 使⽤b-1 个位元编码 r.
  • If { r > 2^b-M} 使⽤b个位元编码r+2^b-M

Glomb-rice编码

Golomb-Rice是Golomb编码的⼀个变种,它给Golomb编码的参数m添加了个限制条件:

  • M必须是2的次幂。这样有两个好处:
  • 不需要做模运算(和取余区别在于负整数除法运算)即可得到余数r,r = N&(m -1);取模运算在计算商的值时,向负⽆穷⽅向舍⼊(floor()函数),例如-7 / 4 = -2(向负⽆穷⽅向舍⼊)
  • 对余数r编码更为简单,只需要取r⼆进制的低log2(m)位即可。则Golomb-Rice的编码过程更为简洁:初始化参数m,m必须为2的次幂计算q和r,q = N / m ; r = N & (m - 1)使⽤⼀元编码编码q取r的⼆进制表示的低log2(m)位作为r的码字。
    示例:设M=8 则log2(M)=3 当对42进⾏编码时,42被拆分成q=5 r=2,则编码为111110 010

Exp-Glomb编码

Rice的编码方式和Golomb的方法是大同小异的,只是选择m必须为2的次幂。而Exp-Golomb则有了一个很大的改进,不再使用M这样固定大小的分组,而使组的大小呈指数增长。如下图:
在这里插入图片描述
Exp-Golomb需要一个非负整数K作为参数,称之为K阶Exp-Golomb。其中当K = 0时,称为0阶Exp-Golomb,目前比较流行的H.264视频编码标准中使用的就是0阶的Exp-Golomb。

  • Exp-Golomb的码元结构是:
    ** [M zeros prefix] [1] [Offset] **
    m=[ log2(num+1) ]
    Offset=num+1−2m
  1. 首先使用公式计算组号m,m=[ log2(num+1) ]
  2. 对组号m进行编码,连续写入m个0,最后写入一个1作为结束。
  3. 计算组内偏移量offset, Offset=num+1−2m取offset二进制形式的低m位作为offset码元

1之前的0的个数就是该数字所在的组的编号,因此同一组内的编码长度是相同的。
0阶Exp-Golomb的编码后的长度是:2∗m+1,其解码过程和上面的Rice码类似,读入bit流,是0则继续,1则停止,然后统计0的个数m;接着读入m位的bit,就是offset,最后解码后的数值是:N=2m−1+offset
K阶Exp-Golomb编码,Exp-Golomb的组的大小实际上是呈2的指数增长,不同的参数k,实际控制的是起始分组的大小
在这里插入图片描述
不同的k造成了其起始分组的大小不同,所以对于任意的k阶Exp-Golomb编码都可以转化为0阶来进行实现,具体如下:

  • 设待编码数字为N,参数为k使用0阶Exp-Golomb编码 N+2^k−1
  • 从第一步的结果中删除掉高位的k个0
    在这里插入图片描述

自适应rice编码方法

自适应Rice编码的算法思想是由取2指数的Golomb方法确定k的系数,这样就避免进行选择多个k值所需要的数据缓存。该算法与JPEG-LS中采用的Golomb-rice编码方法类似,但进行了改进。

图中的k表示的是对最低位至k位不进行编码,对高于k位的数据进行rice编码。最后将编码之后的数据长度进行比较,然后选择最短的输出。因此从自适应rice编码方法可以看出,在进行rice编码过程中的自适应过程是通过将k的值进行遍历实现,这势必要求对硬件提出缓存的要求。

在这里插入图片描述

CCSDS自适应rice编码方法

CCSDS自适应rice编码方法与JPEG-LS的Golomb-rice编码方法不同,一是该编码过程进行了删除了游程编码,这是因为在高光谱图像预测中,几乎不存在全为‘0’或一定值的情况。二是该算法采用k值的选取与JPEG-LS不同,JPEG-LS算法是通过预测后的上下文更新,而CCSDS中的k值选取是通过自适应统计选取。下面介绍k值的计算过程。自适应编码k选择由累加器和计数器决定,并在编码过程中自动更新。
在这里插入图片描述
通过上述函数实现将累加器和计数器不断的累加,但如果按照累加器除计数器,当计算平均值的时,码流是按照不断的有数据读进来进行计算,就会造成后读进的数据权重过高,通过不断除2降低对计算均值的影响。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例如在上图中2^k_z(t)的范围在16与32之间,从而求出k_z(t)为4,确定k_z(t)之后,再进行指数rice编码,对最低位至k位不进行编码,对高于k位的数据进行一元编码。
对于42来说,假设此时k=4,42的二进制表示为00101010,最低位到第k=4位保持不变,对高于第4位的数据进行编码,编码结果是001 1010,假设k=5此时编码结果为010 1010

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ANIMZLS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值