格伦布编码——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,如需转载请自行联系原作者






相关文章
|
机器学习/深度学习 编解码 数据可视化
图像恢复SwinIR: Image Restoration Using Swin Transformer
图像恢复SwinIR: Image Restoration Using Swin Transformer
628 2
|
缓存 前端开发 JavaScript
一看就懂的gulp操作指南:让前端工作变得更加轻松(一)
一看就懂的gulp操作指南:让前端工作变得更加轻松
|
12月前
|
存储 编解码 算法
ans介绍学习
【9月更文挑战第5天】
945 13
|
消息中间件 Java Kafka
如何在Kafka分布式环境中保证消息的顺序消费?深入剖析Kafka机制,带你一探究竟!
【8月更文挑战第24天】Apache Kafka是一款专为实时数据管道和流处理设计的分布式平台,以其高效的消息发布与订阅功能著称。在分布式环境中确保消息按序消费颇具挑战。本文首先介绍了Kafka通过Topic分区实现消息排序的基本机制,随后详细阐述了几种保证消息顺序性的策略,包括使用单分区Topic、消费者组搭配单分区消费、幂等性生产者以及事务支持等技术手段。最后,通过一个Java示例演示了如何利用Kafka消费者确保消息按序消费的具体实现过程。
515 3
|
Web App开发
笔记本电脑能连接WiFi但浏览器无法打开网页的解决办法
笔记本电脑能连接WiFi但浏览器无法打开网页的解决办法
16334 0
笔记本电脑能连接WiFi但浏览器无法打开网页的解决办法
解决 TypeError: Cannot read property ‘tapPromise‘ of undefined
解决 TypeError: Cannot read property ‘tapPromise‘ of undefined
608 0
|
人工智能 数据挖掘 数据安全/隐私保护
【程序人生】公众号往期回顾如何设置
本文介绍了如何设置微信公众号的往期回顾功能,包括登录公众平台,进入素材管理,创建图文消息,编辑标题、封面和正文,添加往期回顾标签,以及保存和发布。强调了选择合适发布时间、定期更新内容和分析数据以优化策略的重要性。记得在新文章发布时同步推送往期回顾,提升用户对公众号历史内容的了解。
【程序人生】公众号往期回顾如何设置
|
前端开发
通俗易懂讲解为什么设计稿都是750px!!!
通俗易懂讲解为什么设计稿都是750px!!!
echarts多条折线图和柱状图实现
echarts多条折线图和柱状图实现
371 0
|
前端开发