WDR编码和Exp-Golomb

来源:互联网 发布:java 自定义日志 编辑:程序博客网 时间:2024/05/04 13:40

//   http://zmshy2128.blog.163.com/blog/static/2544637200811945139934/

 

WDR算法采用一种基于索引的编码(差分编码和二进制缩减)方法来有效表示重要小波系数的位置和正负号。先从较粗尺度的子带开始,然后对较细尺度的子带进行扫描,从而完成对二维图像的一维扫描过程。不妨设某一位平面中扫描时有4个重要系数,一维的扫描位置为S={2,3,6,15},符号为{+,-,-,+},由于S中的系数递增,对邻近的数值进行差分后得S’={2,1,3,9},显然S也可由S’逆运算得到。将S’中的数值用二进制表示并和对应的符号排列在一起得{10+,1-,11-,1001+},注意第一个以及“+”、“-”之后出现的符号必定是“1”,因此可以省去这些符号的编码,实际需算术编码的符号为“0+-1-001+”。

如果用H.264中出现的Exp-Golomb来编码游程和重要系数的符号,和WDR进行对比分析是很有趣的。不妨用同样的S={2,3,6,15}和符号{+,-,-,+},有S’={2,1,3,9},则Exp-Golomb编码输出为{010+,1-,011-,0001001+},看起来Exp-Golomb比WDR输出的符号多了,可是WDR中每次是四个符号“1”“0”“+”“-”的编码,而Exp-Golomb每次只有两种概率“1”和“0”、或者“+”和“-”。将Exp-Golomb编码的输出顺序稍微调整一下

注意这样调整后,相应修改解码程序还是可以正常解码的哦。中间留个空格便于看清楚,{01+1-01-0001+},如果“00”表示WDR中的符号“0”、“01”表示WDR中的“1”、“1+”表示WDR中的“+”、“1-”表示WDR中的符号“-”,不正好变成WDR编码么?

 这也正是WDR变成无算术编码的方式。

 经实验,将这种拆分成二元概率的方式,用算术编码也不会出现压缩性能的下降。所以WDR方式可以看作是Exp-Golomb编码,但Exp-Golomb更灵活些,因为可以衍生很多变种,比如01xx、001xxxx等形式以适应不同概率的数据。