JPEG2000图像压缩标准及其关键算法
周 宁 汤晓军 徐维朴
(西安交通大学人工智能与机器人研究所西安710049)
摘 要:JPEG2000是为适应不断发展的图像压缩应用而出现的新的静止图像压缩标准。阐述了JPEG2000图像编码系统的实现过程, 对其中采用的基本算法和关键技术进行了描述,介绍了这一新标准的特点及应用场合,并对其性能进行了分析。
关键词:JPEG2000; 图像压缩;离散小波变换; 速率控制;感兴趣区域
1 引言
随着多媒体应用领域的快速增长和网络的不断发展,传统的JPEG压缩技术已无法满足人们对数字化多媒体图像资料的要求,一种功能更强大、效率更卓越的静止图像压缩标准被提到制定日程上,这就是JPEG2000。
JPEG(Joint Photographic Experts Group)是在国际标准化组织(ISO)领导之下制定静态图像压缩标准的委员会,第一套国际静态图像压缩标准ISO 10918-1(JPEG)就是该委员会制定的。由于JPEG优良的品质,使他在短短几年内获得了极大的成功,被广泛应用于互联网和数码相机领域,网站上80%的图像都采用了JPEG压缩标准。然而,目前的JPEG静止图像压缩标准,具有中端和高端比特速率上的良好的速率畸变特性,但在低比特率范围内,将会出现很明显的方块效应,其质量变得不可接受。JPEG不能在单一码流中提供有损和无损压缩,并且不能支持大于64×64 K的图像压缩。同时,尽管当前的JPEG标准具有重新启动间隔的规定,但当碰到比特差错时图像质量将受到严重的损坏。
针对这些问题,自1997年3月起,JPEG图像压缩标准委员会开始着手制定新一代的图像压缩标准以解决上述问题。2000年3月的东京会议,确定了彩色静态图像的新一代编码方式JPEG2000图像压缩标准的编码算法。
JPEG2000系统分为下列7个部分: ①JPEG2000图像编码系统;
②扩充(给①的核心定义添加更多的特征和完善度); ③运动JPEG2000; ④一致性;
⑤参考软件(目前包含Java和C实现);
⑥复合图像文件格式(用于文件扫描和传真应用程序); ⑦对①的最小支持(技术报告)。 ①为完全被认可的ISO标准,定义了核心压缩技术和最小文件格式,②~⑥定义压缩和文件格式的扩充。其中,①已经制定完成,其余部分还在制定过程中。本文所讨论的JPEG2000标准就是基于第1部分的。 2 JPEG2000系统的特点
JPEG2000以其特有的优点弥补了现行JPEG标准的不足。离散小波变换算法中,图像可以转换成一系列可更加有效存储像素模块的子带,因此,JPEG2000格式的图像压缩比可在现在的JPEG基础上再提高10%~30%,而且压缩后的图像显得更加细腻平滑。也就是说,在网上观看采用JPEG2000压缩的图像时,不仅下载速率比采用JPEG格式的快近30%,而且品质也将更好。对于目前的JPEG标准,在同一个压缩码流中不能同时提供有损和无损压缩,而在JPEG2000系统中,通过选择参数, 能够对图像进行有损和无损压缩,可满足图像质量要求很高的医学图像、图像库等方面的处理需要。现在网络上的JPEG图像下载时是按“块”传输的,因此只能逐行地显示,而采用JPEG2000格式的图像支持渐进传输(Progressive Transmission),这就允许图像按照所需的分辨率或像素精度进行重构,用户根据需要,对图像传输进行控制,在获得所需的图像分辨率或质量要求后,便可终止解码,而不必接收整个图像的压缩码流。由于JPEG2000采用小波技术,利用其局部分辨特性,在不解压的情况下,可随机获取某些感兴趣的图像区域(ROI)的压缩码流,对压缩的图像数据进行传输、滤波等操作。 3 JPEG2000图像编解码系统
本节主要介绍JPEG2000图像编解码系统。其编码器和解码器的框图如图1所示。
在编码器中,首先对源图像进行前期预处理,对处理的结果进行离散小波变换,得到小波系数。然后对小波系数进行量化和熵编码,最后组成标准的输出码流(位流)。解码器是编码器的反过程,首先对码流进行解包和熵解码,然后是反向量化和离散小波反变换,对反变换的结果进行后期处理合成,就得到重构的图像数据。尽管JPEG2000编解码过程与JPEG类似,但是对于每一步的具体实现两者却有非常大的差异。编码过程的一般步骤如下:
(1) 将有多个颜色分量组成的图像分解成单一颜色分量的图像。分量之间存在一定的相关性,通过分解相关的分量变换,可减少数据间的冗余度,提高压缩效率;
(2) 分量图像被分解成大小统一的矩形片——图像片。图像片是进行变换和编解码的基本单元; (3) 每一个图像片进行小波变换。产生多级系数图像。这些不同级数的系数图像可以重构出不同分辨率的图像;
(4) 多级分解的结果是由小波系数组成的多个子带。他们表示图像片中局部区域(而不是整幅图像)的频率特性;
(5) 对系数子带进行量化,并且组成矩形数组的“码块”;
(6) 对一个码块中的系数位平面(也就是一个码块中整个系数中具有同样权值的那些位)进行熵编码;
(7) 相对于图像的背景区域,可以对感兴趣区域进行更高质量的编码; (8) 通过在位流中加入掩码来增加抗干扰性;
(9) 在每一个码流的最前部都有一个头结构,他描述的是源图像的属性,各种分解情况和编码风格。这个头结构可以用来进行定位、抽取、译码和重构图像,得到的图像可以具有所期望的分辨率、重现精度、感兴趣的区域或是其他特性。
编码过程主要分为以下几个过程:预处理、核心处理和位流组织。预处理部分包括对图像分片、直流电平(DC)位移和分量变换。核心处理部分由离散小波变换、量化和熵编码组成。位流组织部分则包括区域划分、码块、层和包的组织。 3.1 预处理
(1)图像分片
分片指的是把源图像分割成相互不重叠的矩形块——图像片,每一个图像片作为一个独立的图像进行压缩编码。编码中的所有操作都是针对图像片进行的。图像片是进行变换和编解码的基本单元。图像的分片降低了对存储空间的要求,并且由于他们重构时也是独立进行的,所以可以用来对图像的特定区域而不是整幅图像进行解码。当然,图像分片会影响图像质量。比较小的图像片会比大图像片产生更大的失真。图像分片在低比特率表示图像的时候所造成的图像失真会更加严重。 (2)DC电平位移
在对每一图像片进行正向离散小波变换之前,都要进行直流电平位移。目的是在解码时,能够从有符号的数值中正确恢复重构的无符号样本值。直流电平位移是对仅有无符号数组成的图像片的像素进行的。电平位移并不影响图像的质量。在解码端,在离散小波反变换之后,对重构的图像进行反向直流电平位移。 (3)分量变换
JPEG2000支持多分量图像。不同的分量不需要有相同的比特深度,也不需要都是无符号或有符号数。对于可恢复(无损)系统,唯一的要求就是每一个输出分量图像的比特深度必须跟相应输入分量图像的比特深度保持一致。
3.2 核心处理 (1)小波变换
不同于传统的DCT变换,小波变换具有对信号进行多分辨率分析和反映信号局部特征的特点。通过对图像片进行离散小波变换,得到小波系数图像,而分解的级数视具体情况而定。小波系数图像由几种子带系数图像组成。这些子带系数图像描述的是图像片水平和垂直方向的空间频率特性。不同子带的小波系数反映图像片不同空间分辨率的特性。通过多级小波分解,小波系数既能表示图像片中局部区域的高频信息(如图像边缘),也能表示图像片中的低频信息(如图像背景)。这样,即使在低比特律的情况下,我们也能保持较多的图像细节(如边缘)。另外,下一级分解得到的系数所表示图像在水平和垂直方向的分辨率只有上一级小波系数所表示的图像的一半。所以,通过对系数图像的不同级数进行解码,就可以得到具有不同空间分辨率(或清晰,或模糊)的图像。
小波变换因其具有的这种优点被JPEG2000标准所采用。在编码系统中,对每个图像片进行Mallat塔式小波分解。经过大量的测试,JPEG2000选用两种小波滤波器:LeGall 5/3滤波器和Daubechies 9/7滤波器。前者可用于有损或无损图像压缩,后者只能用于有损压缩。
在JPEG2000标准中,小波滤波器可以有2种实现模式:基于卷积的和基于提升机制的。而具体实现时,对图像边缘都要进行周期对称延伸,这样可以防止滤波器对图像边缘操作时产生失真。另外,为了减小变换时所需空间的开销,标准中还应用了基于行的小波变换技术。 (2)量化
由于人类视觉系统对图像的分辨率要求有一定的局限,通过适当的量化减小变换系数的精度,可在不影响图像主观质量的前提下,达到图像压缩的目的。量化的关键是根据变换后图像的特征、重构图像质量要求等因素设计合理的量化步长。量化操作是有损的,会产生量化误差。不过一种情况除外,那就是量化步长是1,并且小波系数都是整数,利用可恢复整数5/3拍小波滤波器进行小波变换得到的结果就符合这种情况。
在JPEG2000标准中,对每一个子带可以有不同的量化步长。但是在一个子带中只有一个量化步长。量化以后,每一个小波系数有2部分来表示:符号和幅值。对量化后的小波系数进行编码。对于无损压缩,量化步长必须是1。
(3)熵编码
图像经过变换、量化后,在一定程度上减少了空域和频域上的冗余度,但是这些数据在统计意义上还存在一定的相关性,为此采用熵编码来消除数据间的统计相关。将量化后的子带系数划分成小的矩形单元——码块(code block)。
如图2所示,采用两层编码策略,首先使用基于上下文的算术编码器,每个码块进行独立的嵌入式码块编码,得到码块的嵌入式压缩位流。然后,根据率失真优化原则,采用PCRD(Post Compression Rate Distortion)优化算法思想,将所有码块的压缩位流适当截取,组织成具有不同质量级的压缩位流层。每一层上的压缩位流连同其前面的所有层的压缩位流,可重构出一定质量的图像。在分层组织压缩位流时,须对每个码块在每一层上的贡献信息进行编码,即对码块位流在该层的截断点信息等编码。由于图像采用小波变换,整个图像压缩码流具有分辨率可分级性,从而,压缩码流可同时具有质量上和分辨率上的可分级性。由于对码块进行独立编码,因此,可根据需要,随机获取并解码相应的码块压缩位流,重构出所需的图像区域。 ①第一层编码算法
与传统的依次对每个系数进行算术熵编码不同,JPEG2000编码系统把码块中的量化系数组织成若干个位平面,从最高有效位平面(MSB)开始,依次对每个位平面上的小波系数位进行算术编码。
第一层编码可以看作2部分:上下文的生成(CF)和算术编码器(AE)。在上下文的生成中,以一定的顺序扫描码块中的所有位。在码块的每个位平面上,从左上角系数开始,从左到右,从上到下进行扫描,并为每一位生成一个上下文。算术编码器根据生成的上下文,对每一位进行编码。
在量化后,小波系数被转换为符号-振幅模式。在从MSB到LSB编码时,当遇到第一个为1的比特时,这个像素被称作是显著的,否则,为不显著的。所有比特的上下文都是由他们的邻域通过以下的4种方法产生: 零编码(zero coding,ZC)用来编码非显著像素在当前的位平面中是否将变得显著;
游程编码(run-length coding, RLC)用来编码位于同一列中的4个非显著性像素,如果他们的邻域都