基于二维DCT的图像压缩编码及其实现
摘 要:DCT变换是图像压缩的一项重要技术,如何准确、快速进行图像压缩一直是国内外研究的热点。主要介绍基于DCT变换的图像压缩编码算法,给出具体的实现方法和步骤,并用Matlab进行了算法仿真。实验结果表明,该算法实现简单,在很大压缩范围内,都能得到很好的重建图像质量,满足不同场合要求不同图像质量的实际需要。这里利用Matlab做仿真实验,方法简单、速度快且误差小,大大提高了图像压缩的效率和精度。
关键词:图像压缩;DCT变换;Matlab仿真;峰值信噪比
中图分类号:TP391 文献标识码:B 文章编号:1004373X(2008)1615703
Image Compression Coding and Implementation Based on 2DDCT
LI Chunxia
(College of Electric and Information Engineering,Shaanxi University of Science & Technology,Xi′an,710021,China)
Abstract:The DCT transform is an important technique in the field of image compression.How to compress the image accurately and fast has been a research focus both at home and abroad all the time.This paper mainly introduces the algorithm of the image compress coding based on DCT,and shows details of realization.Then the algorithm is simulated by Matlab.Simulation experiments show that the algorithm is simple to realize.The reconstructed images are of good quality satisfying the demands of different image quality on various occasions under the circumstances of very large compression range.The innovation spot of this paper is that the method doing experiments with Matlab is simple,rapid and with little error.It can improve the efficiency and precision of the image compression greatly.
Keywords:image compression;DCT transform;Matlab simulation;peak signal to noise ratio
在信息世界迅猛发展的今天,图像传输已成为一项重要内容,而传输信息量的大小是影响传输速度的重要因素之一。要想提高通信速度,一个必要的手段就是图像的压缩编码技术,减少传输的数据量。于是,对图像信息的压缩成为一个不可或缺的环节。图像压缩是关于用最少的数据量表示尽可能多的原图像信息的一个过程。本文主要研究基于离散余弦变换(Discrete Cosine Transform,DCT)的有损压缩编码技术。DCT是一种实数域变换,其变换核为余弦函数,计算速度快。DCT除了具有一般正交变换的性质外,它的变换阵的基向量能很好地描述人类语音信号和图像信号的相关特征。因此,在对语音信号、图像信号的变换中,DCT变换被认为是最接近KL(KarhunenLoeve)变换性能的准最佳变换。
1 离散余弦变换的基本原理
DCT是正交变换的一种,它具有正交变换的一些有用性质:
(1) 熵保持性,即通过DCT变换后并不丢失信息。
(2) 能量保持性,并能把能量重新分配和集中。这就有可能采用熵压缩法来压缩系数,即在质量允许的情况下,舍弃一些能量很小的系数,而对能量较大的系数分配较多的比特数,对能量较小的系数分配较少的比特数,从而使数据有较大的压缩。
(3) 去相关性,即可使高度相关的空间样值变为相关性较弱的变换系数,从而减少空间样值的冗余度。
基于DCT的压缩算法之所以能压缩信息的比特数,是因为在经过离散余弦变换后得到的系数矩阵中,数值较大的方差总是集中在少数系数中。这样,把分布在变换域中的信息集中起来,为合理少分配比特数提供了可能。以下就是图像尺寸为M×N的数据的二维DCT公式:
正变换(FDCT):F(u,v)=2MNC(u)C(v)[∑M-1x=0∑N-1y=0f(x,y)·
cos(2x+1)uπ2Mcos(2y+1)vπ2N](1)
u=0,1,2,…,M-1; v=0,1,2,…,N-1逆变换(IDCT):f(x,y)=2MN[∑M-1u=0∑N-1v=0C(u)C(v)F(u,v)·
cos(2x+1)uπ2Mcos(2y+1)vπ2N](2)
x=0,1,2,…,M-1; y=0,1,2,…,N-1式中,当u,v=0时,C(u),C(v)=1/2;当u,v≠0时,C(u),C(v)=1。
f(x,y)为像素值;F(u,v)为变换后的系数,u,v为系数下标。
2 DCT在图像压缩编码中的应用
DCT变换在图像压缩中有很多应用,是JPEG,MPEG等图像压缩标准的重要数学基础。在编码过程中,首先将输入图像划分为8×8大小的图像块,然后用正向二维DCT把每个块转变成64个DCT系数值。其中1个数值是直流(DC)系数,即8×8空间域图像子块的平均值,其余63个是交流(AC)系数。接下来对DCT系数进行量化以进一步减少数据量。最后对量化后的系数进行编码和传送,形成压缩后的图像格式。在解压缩时首先对已编码的量化的系数进行解码,然后求逆量化并利用二维DCT反变换把DCT系数转化为8×8样本像块,最后将反变换后的块组成一幅完整的图像。
2.1 DCT变换
DCT的实现常常将图像分成一些小而易处理的块,这里假设选择8×8的块作为DCT计算的大小。DCT变换的实现有2种方法:
(1) 基于FFT的快速算法;
(2) DCT变换矩阵方法。
后者非常适合做8×8或16×16的图像块的DCT变换。一个M×M的DCT变换矩阵T定义为:T=(Ti,j)=1M,i=0,0≤j≤M-1
2Mcosπ(2j+1)i2M,1≤i≤M-1,0≤j≤M-1 如果设X为8×8像素矩阵,则X的离散余弦变换Y可表示为矩阵的乘积:为Y=TXT.T。在Matlab的仿真实现中,主要采用二维DCT变换的矩阵式定义来实现,矩阵式定义可以表示为:[F(u,v)]=[T][f(x,y)][T].T,
[f(x,y)]=[T].T[F(u,v)][T]其中[f(x,y)]是空间数据矩阵;[F(u,v)]是变换系数矩阵;[T]是变换矩阵;[T].T是[T]转置。
经过DCT变换得到的系数,其能量主要沿对角线分布,并主要集中在左上角。也就是说能量成分以低频为主。因此,可以在确保一定的图像质量情况下。放弃一些次要信息,以达到压缩目的。
2.2 DCT系数的量化与Z扫描
量化的作用是在一定的主观保真度图像质量的前提下,丢掉那些对视觉影响不大的信息,以获得较高的压缩比。然而,量化也是导致图像质量下降的最主要原因。这里使用量化矩阵来实现量化。对于DCT输出矩阵中的每一个元素,量化矩阵中的同一位置都有一个相应的量化值,范围是0~255。量化定义可以表述为:对64个DCT系数除以其量化步长,四舍五入取整,即:C(u,v)=IntegerRound(F(u,v)/Q(u,v)) 式中,C(u,v)为量化的系数幅度,Q(u,v)为量化步长,它是量化表的元素,通常随DCT系数的位置和彩色分量的不同而取不同的值。因为人眼对亮度信号比对色差信号更敏感,因此使用了2个量化表,一个是亮度量化表,一个是色差量化表。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此量化表中的左上角的量化步长一般要比右下角的量化步长小。量化既要使得大部分数据得以压缩,同时又要保证通过量化和编码之后能输出一个与信道传输速率匹配的比特流。在DCT变换时使用量化矩阵很容易对图像压缩质量进行控制,用户可根据具体的硬件存储容量和所需要的图像量,选择合适的量化值。
图1 量化系数的Z扫描量化后的系数需要重新编排,目的是为了增加连续的“0”系数的个数,即“0”的游程长度,方法是按照Z字形的样式编排,如图1所示。这样就把一个8×8的矩阵变成一个1×64的矢量,同时保证低频分量先出现,高频分量后出现。矩阵的左上角元素为DC分量,其余63个为AC分量,由左上至右下频率渐次升高。
2.3 压缩编码
原始图像经过离散余弦变换和量化后,最后一个步骤就是编码。8×8图像块经过DCT变换后得到的DC系数有2个特点:一是系数的数值比较大;二是相邻图像块的DC系数值变化不大。根据这个特点,可以法使用差值冲编码调制(DPCM)技术,对相邻图像块之间量化DC系数的差值Δ(Δ=DCi-DCi-1,其中DCi为第i个子图像的直流量,DCi-1为前一个子图像的直流量)进行编码。
量化后的AC系数的特点是包含有许多“0”的系数,并且这许多的“0”是连续的,因此可以使用游程编码(RLC,Run Length Coding)对它们进行编码。之后再使用熵编码对DPCM编码后的直流DC系数和游程编码后的交流AC系数做进一步的压缩。熵编码可以分两步进行,首先对DPCM编码后的DC系数和RLE编码后的AC系数转换成中间符号序列,然后赋予这些符号以变长码字。最后组成数据位流。把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样组织的数据通常称为位数据流(bitstream)。
3 实验结果分析与结论
基于前面的理论,下面使用二维离散余弦变换进行图像压缩编码。实验利用Matlab 6.5对图像peony.tif进行仿真的结果如图2所示。其中图2(a)为原始图像,图2(b)为经过DCT变换压缩编解码得到的图像。
图2 原始图像与重建图像比较对比上面的原始图像与重建图像,可以发现视觉效果相差很小,可见压缩的效果比较理想。改变量化矩阵,对peony图像做不同的量化,在不同的压缩比下,得到质量不同的重建图像,并用峰值信噪比(Peak Signal to Noise Ratio,PSNR)进行衡量。实验数据如表1所示。
表1 不同压缩比下压缩图像的峰值信噪比
量化矩阵Q倍乘Compress ratio压缩比PSNR /dBQ.0.35.8639.45Q.219.833.6Q.429.731.23Q.945.0127.82
实验结果表明,基于DCT的图像压缩算法实现简单,在很大压缩范围内,都能得到很好的重建图像质量,满足不同场合要求不同图像质量的实际需要。用Matlab做仿真实验,方法简单而且误差小,大大提高了图像压缩的效率和精度。
DCT具有算法简单,易于硬件实现等优点,从而广泛应用于图像压缩领域,尤其在的高比特率传输条件下能取得令人满意的压缩效果。然而它在低比特率条件下的“方块效应”成了不容忽视的“瓶颈”缺陷。原因就在于DCT处理的图像是分块进行的,块与块边界两边的像素相关性不能去掉,从而形成了明显的方块边界。若将DCT变换与其他编码方法(如小波变换、分形等)相结合,会得到更好的效果。
参 考 文 献
[1]张兆礼.现代图像处理技术及Matlab实现[M].北京:人民邮电出版社,2001.
[2]徐飞.Matlab应用图像处理[M].西安:西安电子科技大学出版社,1990.
[3]何东健.数字图像处理[M].西安:西安电子科技大学出版社,2002.
[4]朱剑英.基于DCT变换的图像编码方法研究\.南京:南京理工大学,2004.
[5]闫宇松,石青云.可逆的DCT整型变换与无失真图像压缩\.软件学报,2000,11(5):620627.
作者简介 李春霞 女,陕西西安人。主要研究方向为图像处理。
注:本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文