指数哥伦布编码
规定语法元素的编解码模式的描述符如下:
比特串:
b(8):任意形式的8比特字节(就是为了说明语法元素是为8个比特,没有语法上的含义)
f(n):n位固定模式比特串(其值固定,如forbidden_zero_bit的值恒为0)
i(n):使用n比特的有符号整数(语法中没有采用此格式)
u(n):n位无符号整数
指数哥伦布编码:
ue(v):无符号整数指数哥伦布码编码的语法元素
se(v):有符号整数指数哥伦布编码的语法元素,左位在先
te(v):舍位指数哥伦布码编码语法元素,左位在先
以及ce(v):CAVLC和ae(v):CABAC。
指数哥伦布编码过程:
在表9-1中,比特串格式为“前缀1后缀”。1)1后缀=codeNum+1,如codeNum = 3,则1后缀=4,即为100,后缀为00;2)前缀与后缀的比特数相同,且前缀的各位比特为0,如codeNum=3,则最终编码所得的比特串为:00100.
对于ue(v),按上述规则进行编码;
对于se(v),则按照表9-3转换成codeNum,然后按上述规则进行编码;
在表9-3中,1)语法元素值为负数,则乘2取反,转换成codeNum,2)语法元素为正数,则乘2减1,转换成codeNum;
对于te(v),只有7.3.5.1节“宏块预测语法”和7.3.5.2节“子宏块预测语法”中的ref_idx_l0[mbPartIdx]和ref_idx_l1[mbPartIdx]用此模式编码,
如果语法元素值为0,则编码为1,如果语法元素值为1,则编码为0,如果为其他大于1的值,则按ue(v)进行编码。
---------------------------------------------------
用来表示非负整数的k阶指数哥伦布码可用如下步骤生成:
1. 将数字以二进制形式写出,去掉最低的k个比特位,之后加1
2. 计算留下的比特数,将此数减一,即是需要增加的前导零个数
3. 将第一步中去掉的最低k个比特位补回比特串尾部
0阶指数哥伦布码如下所示:
0 => 1 => 1
1 => 10 => 010
2 => 11 => 011
3 => 100 => 00100
4 => 101 => 00101
5 => 110 => 00110
6 => 111 => 00111
7 => 1000 => 0001000
8 => 1001 => 0001001
小波变换在图像压缩中的应用
小波变换在图像压缩中的应用
施吉鸣
摘要:近十几年来小波理论研究已成为应用数学的一个新方向。作为数学工具,小波被迅速应用到图像和语音分析等众多领域。本文试图从工程和实验角度出发,较为直观地探讨小波变换在图像压缩中的应用。
关键词:小波 变换 重构 图像压缩
1、小波概述
小波(wavelet)是定义在有限间隔且平均值为0的函数,小波函数多以开发者名字命名,如图1所示:
图1 部分小波
众所周知,傅立叶分析是把一个信号分解成各种不同频率的正弦波,因此正弦波是傅立叶变换的基函数。同样,小波分析是把一个信号分解成由原始小波经过移位和缩放后的一系列小波,因此小波是小波变换的基函数,即小波可用作表示一些函数的基函数。
小波是近十几年才发展并迅速应用到图像和语音分析等众多领域的数学工具,是继110多年前建立傅立叶(Joseph Fourier)分析之后的一个重大突破。经过十几年的努力,小波理论基础已经基本建立并成为应用数学的一个新领域,引起了众多数学家和工程技术人员的极大关注,是国际上科技学术界高度关注的前沿领域。本文试图从工程和实验角度出发,较为直观地探讨小波变换在图像压缩中的应用。
2、小波变换和重构
小波变换的基本思想是用一组小波或基函数表示一个函数或信号,例如图像信号。以哈尔(Haar)小波基函数为例,基本哈尔小波函数(Haar wavelet function)定义如下:
1, 当0≤x<1/2
Ψ(x) = -1, 当1/2≤x<1
0, 其他
设有一幅分辨率只有4个像素的一维图像,对应像素值为:[9 7 3 5]。用哈尔小波变换的过程是:计算相邻像素对的平均值(averaging,亦可称之为近似值approximation),得到一幅分辨率为原图像1/2的新图像:[8 4]。这时图像信息已部分丢失,为了能从2个像素组成的图像重构出4个像素的原图像,必须把每个像素对的第一个像素值减这个像素的平均值作为图像的细节系数(detail coefficient)保存。因此,原图像可用下面的两个平均值和两个细节系数表示:[8 4 1 -1]。可以把第一步变换得到的图像进一步变换,原图像两级变换的过程如表1所示:
表1 哈尔小波变换过程
分辨率 | 平均值 | 细节系数 |
4 | [9 7 3 5] |
|
2 | [8 4] | [1 -1] |
1 | [6] | [2] |
哈尔变换过程事实上是用求均值和差值的方法对函数或图像进行分解,对于f(x)=[9 7 3 5],我们可作最多2层的分解。
对于2维图像,同样可以用依次对行列进行小波变换得到2维图像的分解。这时经过一次小波变换得到是2维图像的近似值(CA)以及水平(CH)、垂直(CV)和对角(CD)细节分量值。显然,从2维图像的CA、CH、CV和CD值可以重构出原来的2维图像。
3、图像压缩
事实上,去掉某些经过小波变换得到的细节分量值对重构图像的质量影响不大。具体的做法是设置一个阈值δ,例如把≤δ的经小波变换得到的水平(CH)、垂直(CV)和对角(CD)细节分量值细节分量值置为0,
图2 小波图像变换过程
这样就实现了图像压缩。
为了验证图像压缩的效果,笔者使用数学软件工具MATLAB 6.1设计了3级非标准小波变换和重构图像程序function [ ] = report(picname),同时以分辨率256×256的真彩色照片为测试图像,通过执行程序完成了阈值δ分别为0,5,10和20的情况下利用Haar小波进行变换变换和重构过程。
以使用Haar小波,阈值等于10,真彩色图像G分量为例,小波图像变换过程如图2所示。
4、实验结论
用report('jimm')对jimm_org.png真彩图像文件计算阈值分别为0,5,10和20的情况下进行3级非标准haar小波变换和重构后,系数为“0"的数目和以PNG格式存储的重构图像文件大小,实验结果得到图像测试表如表2所示:
表2 图像测试表
图像名称 | 阈值 | 系数为“0"的数目 | PNG文件大小 |
原始图像jimm_org.png | — | — | 103KB |
重构图像 jimm_haar_00.png | δ=0 | 19527 | 103KB |
重构图像jimm_haar_05.png | δ≤5 | 123261 | 84KB |
重构图像jimm_haar_10.png | δ≤10 | 155003 | 61KB |
重构图像jimm_haar_20.png | δ≤20 | 175655 | 38KB |
图3表示了在不同阈值下的重构图像:
图3 不同阈值下的重构图像
从图像测试表和观察不同阈值下的重构图像可得出以下结论:
u 可利用小波变换与重构对图像文件进行压缩。
u 通常在给定小波基函数条件下,阀值越大,系数为0的数目就越多,重构图像文件压缩率也越高,重构的图像失真程度随之增加。
u 阀值>0时,利用小波变换与重构进行图像压缩是一种有损压缩方法,可以根据实际需要在图像失真度允许的范围内选择适当的阀值来确定压缩率。
参考文献
[1] 林福宗,《小波与小波变换》,清华大学计算机科学与技术系智能技术与系统国家重点实验室,2001-9-25.
[2] The MathWorks, Inc., Wavelet Toolbox. Version 2.1 (R12.1), MATLAB 6.1 06-Apr-2001.