格伦布编码——rice编码无非是golomb编码M为2^x的特例

简介:

格伦布编码 

格伦布编码是一种无失真资料压缩方法,由数学家 所罗门·格伦布在1960年代提出。

Rice编码

Robert F. Rice提出Rice 编码,是以哥伦布编码为基础做改良而更简易的前置码。Rice编码可视为适应性编码的一种或是哥伦布编码的特例之一。哥伦布编码有一个可调整参数,可以是任一正整数。而Rice编码则是此调整参数为2的次方情况时。这让Rice编码在电脑运算上快速许多,因为电脑上是已二进制运算为主。 Rice编码是一种熵编码技术,可用在影像及图像压缩上。

 

编码的建立

哥伦布编码使用可调整参数M把输入值分成两部分: 商数q, 除以M的结果及余数r。 商数当做一元编码而余数放在后面做为可缩短的二进制编码。当{\displaystyle M=1}哥伦布编码等同于一元编码。

 

 

 

哥伦布-Ric编码可想成用bin(q) 指示位置而bin (r)代表偏移。上述图片显现使用哥伦布-Ric对整数 N编码,另有位置q、偏移r、参数M。 而这两部分如下式表达,x是要被编码的数字。

{\displaystyle q=\left\lfloor {\frac {\left(x-1\right)}{M))\right\rfloor } and {\displaystyle r=x-qM-1} 最后偏码结果: {\displaystyle \left(q+1\right),r}

r 是变化的位元数,在Rice编码r则只有b位元数,而在哥伦布编码, r会是b-1或b bits. 假设 {\displaystyle b=\lceil \log _{2}(M)\rceil }. 如果 {\displaystyle 0\leq r<2^{b}-M},则用b-1 位元数编码r. 相反的,如果 {\displaystyle 2^{b}-M\leq r<M},用b位元数编码r'. 当M 是2的次方时,{\displaystyle b=\log _{2}(M)},则所有的r值都是b个位元.

参数M是伯努利试验函数,其中{\displaystyle p=P(X=0)}M则是中位数或中位数+/-1,如下式:

{\displaystyle (1-p)^{M}+(1-p)^{M+1}\leq 1<(1-p)^{M-1}+(1-p)^{M}.} M愈大愈难抓取{\displaystyle M=\left\lfloor {\frac {-1}{\log _{2}(1-p)))\right\rfloor }.

哥伦布编码在分布上跟霍夫曼编码有相同概率。

使用记号整数

哥伦布原本是用来编码非负整数,但也可改良用来编码任意整数,利用重新排列数值使正整数排在特定的位置。例如一串数字0, -1, 1, -2, 2, -3, 3, -4, 4 ... ,-n排在nth奇数(2n-1),而mth正数排在mth偶数(2m)。 正数x对应({\displaystyle x^{\prime }=2|x|=2x,x\geq 0}),负数对应({\displaystyle y^{\prime }=2|y|-1=-2y-1,y<0})。

 

算法

  1. 选择整数作为M
  2. 要编码数值N,找出下列式子
    1. 商数: q = int[N/M]
    2. 余数: r = N除以M
  1. 产生整体编码
    1. 编码形式 : < 商数编码 > < 余数编码 >
    2. 商数编码
      1. 写 q长度位元的1
      2. 写一个0位元
    3. 余数编码
      1. 如果M'是2的次方,编码是二进制形式,需要{\displaystyle \log _{2}(M)}。(Rice 编码)
      1. 如果M'不是2的次方,令b = \lceil\log_2(M)\rceil</math>
        1. If {\displaystyle r<2^{b}-M} 使用b-1 个位元编码 r.
        2. If {\displaystyle r\geq 2^{b}-M} 使用b个位元 编码{\displaystyle r+2^{b}-M}

范例

M = 10. 则 {\displaystyle b=\lceil \log _{2}(10)\rceil =4}{\displaystyle 2^{b}-M=16-10=6}

当选42作为编码时,42会被拆成q=4及r=2,从上表中为q(4),r(2),编码为11110,010,实际上不需要逗号去分隔两部分,因为商数编码最后的0能代表 余数编码的起始位置。

参考:http://www.wikiwand.com/zh-sg/%E6%A0%BC%E5%80%AB%E5%B8%83%E7%B7%A8%E7%A2%BC






本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6879315.html,如需转载请自行联系原作者






相关文章
|
6月前
|
JavaScript 数据安全/隐私保护
41 # 编码的问题
41 # 编码的问题
33 0
|
1月前
|
机器学习/深度学习 存储 数据处理
矩阵编码
矩阵编码
12 0
|
1月前
|
机器学习/深度学习 算法
独热编码的两种实现形式
独热编码的两种实现形式
34 1
|
JavaScript
编码
编码
68 0
数制与编码
十进制整数转换为二进制数 可以将十进制数逐次用2除,取余数,一直到商为0.然后把全部余数按相反的次序排列起来。(除二取余)
255 0
数制与编码
【计算机网络】物理层 : 编码 ( 数字数据 编码 数字信号 | 非归零编码 | 归零编码 | 反向不归零编码 | 曼彻斯特编码 | 差分曼彻斯特编码 | 4B/5B 编码 )
【计算机网络】物理层 : 编码 ( 数字数据 编码 数字信号 | 非归零编码 | 归零编码 | 反向不归零编码 | 曼彻斯特编码 | 差分曼彻斯特编码 | 4B/5B 编码 )
473 0
【计算机网络】物理层 : 编码 ( 数字数据 编码 数字信号 | 非归零编码 | 归零编码 | 反向不归零编码 | 曼彻斯特编码 | 差分曼彻斯特编码 | 4B/5B 编码 )
|
机器学习/深度学习 算法 索引
关于Onehot编码的总结
关于Onehot编码的总结
530 0
关于Onehot编码的总结
|
Java
编码小结3
java中编码问题
1243 0