一、哥伦布码

  哥伦布码就是将编码对象分能成等间隔的若干区间(Group),每个Group有一个索引值:Group Id。

  》对于Group Id采用二元码编码;

  》对于Group内的编码对象采用定长码。

  如下图:

  

  对于编码对象n:  n = q * m + r = low(n/m) * m + r。其中q = low(n/m),表示取下整,对应是Group Id; 余数r对应是Group内编码对象。

  例如:对于m=5的哥伦布编码如下表

  

二、指数哥伦布码

  对于哥伦布码,编码对象分成等间隔区间。而对于指数,编码区间长度是按照指数增长的,如下图:同样

  》组号采用二元码编码

  》组内编码对象采用定长码编码

  

  编码结果如下:

三、K阶指数哥伦布码

  在H.264中,使用CABAC需要进行二值化处理,而指数哥伦布编码就是CABAC的一种二值化处理的方法。k阶指数哥伦布编解码具体过程如下:

A、编码过程:假设待编码数字为CodeNum(必须非负整数)

  指数哥伦布编码后的形式为[MZeors][1][Info],MZero表示M个0。

    1、将CodeNum以二进制形式表示(若不足k位,前面补0),去掉后面k位(若刚好是k位,去掉k位后得0),将结果(数值)加1,得到二进制数T1;

    2、M为二进制数T1的二进制位数减一;

    3、然后将第一步中舍去的k位接到T1结尾,就得到[1][Info]。

  设[Info]的二进制位数为I,编码过程也可以如下描述:

    [1 Info] 是CodeNum+2^k的二进制表示,MZeros中0的个数M = I - k。

    于是就有总的编码长度CodeLen = M + 1 + I =2M+k+1。

B、解码过程:

  1、读入连续0,连续0的个数就是M;

  2、计算CodeLen = 2M+k+1,得到[1 Info]的位数是 I=CodeLen - M =M+K+1;

  3、读入I位二进制码字,转换成10进制,假设为W。由W = CodeNum + 2^k,得CodeNum = W-2^K。

C、示例:

  对于 k =0时:CodeNum=3。编码如下:

    二进制表示为11,去掉k=0位后加1得100;

    所以M=2;

    所以编码后结果为[MZeros][1][Info] = [MZeros][1 Info] = 00100

  解码如下:

    读入连续2个0,所以M=2;CodeLen=2M+1+k=5;所以需要再读入3个码流100,[1 Info]就是100,转成十进制结果W为4,所以CodeNum = W-2^K=4-1=3;

  同样对于k=0,CodeNum=6时,编码为:00111;

  同样对于k=3,CodeNum=3时,编码为:1011;

  同样对于k=3,CodeNum=6时,编码为:1110;

  同样对于k=3,CodeNum=10时,编码为:010010;

最新文章

  1. C#的Socket实现UDP协议通信
  2. 连接到Windows Azure Point to Site VPN
  3. IE6及以上版本fixed问题解决方案,页面右下角固定页面,可以最大化、最小化、正规显示
  4. java 截取pdf
  5. 2014 Super Training #8 G Grouping --Tarjan求强连通分量
  6. oracle中=>是什么意思
  7. WebService 出现因 URL 意外地以“/HelloWorld”结束,请求格式无法识别。
  8. [irving] C# Windows Beep 调用声音文件
  9. 查看linux网卡硬件名称
  10. python学习之 getattr vs __get__ vs __getattr __ vs __getattribute__ vs __getitem__
  11. Ubuntu16.04安装Python3.6 和pip(python3 各版本切换)
  12. 【转】STM32擦除内部FLASH时间过长导致IWDG复位分析
  13. JavaScript之能力与硬件检测[小结]
  14. 四、持久层框架(Hibernate)
  15. [蓝桥杯ALGO-53.算法训练_最小乘积(基本型)
  16. js正则表达式中的正向肯定预查和正向否定预查
  17. 换掉Tomcat默认图标
  18. mpvue开发美团外卖点餐小程序
  19. mongoDB--万能的$关键字
  20. 2014 ACM/ICPC 亚洲区 北京站

热门文章

  1. Linux的进程优先级NI和PR到底有什么区别
  2. pymssql.connect(server='.', user='', password='', database='', timeout=0, login_timeout=60, charset='UTF-8', as_dict=False, host='', appname=None, port='1433', conn_properties, autocommit=False, tds_
  3. bzoj1486【HNOI2009】最小圈
  4. mongo11---Access control is not enabled for the database
  5. HDU1114 Piggy-Bank —— DP 完全背包
  6. 谈一谈以太坊虚拟机EVM的缺陷与不足
  7. CollectionView缩放水平卡片布局
  8. Synchronized的使用和注意事项
  9. hdu3652(含有13且能被13整除的数)数位DP基础
  10. 小程序-demo:小熊の日记