二维DCT变换在JPEG图像压缩中的应用及其MATLAB实现
2014-11-15刘雅莉
刘雅莉
(1.西安电子科技大学,陕西西安,710071;2商洛学院计算机科学系,陕西商洛,726000)
0 引言
随着网络技术和信息技术的飞速发展,网络中信息的需求量越来越大。这其中就包括有对信息传输的需求,而信息传输中大部分又表现为图像,所以图像信息量的大小将直接影响到网络传输的速度。因此,为了保证图像信息的存储与传输,对图像进行压缩成为当前最迫切的需求。图像压缩就是在没有明显失真的前提下,尽量减少表示数字图像时需要的数据量,从而节省图像的存储空间,减少传输信道的容量、缩短图像加工处理的时间等。在所有的图像压缩编码中JPEG是第一个被广泛应用的适用于(包括灰度和彩色)静止图像压缩算法的国际标准。在JPEG的压缩算法中,一种是基于空间预测(DPCM)的无损压缩算法,另一种是基于离散余弦变换(DCT)的有损压缩算法。本文主要研究的是基于二维DCT的JPEG图像压缩算法及其在MATLAB中的仿真应用。
1 理论分析
1.1 JPEG压缩编码原理
JPEG是一个适用范围很广的静态图像数据压缩标准,不仅能够用于灰度图像还能用于彩色图像。JPGE压缩因其失真度较小,得到了广泛的应用。图1所示是JPEG压缩编码的处理框图。
图1 JPEG压缩编码处理框图
由图可知,整个压缩编码过程大致分为以下三个步骤:
1、使用正向离散余弦变换将空间域表示的图像变换成频率域表示的图像。具体做法:将输入图像分解为8x8大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数矩阵,其中最左上角的数值是直流(DC)系数,其余的63个是交流(AC)系数。
2、对DCT系数进行量化。JPEG压缩中进行量化使用的是均匀量化器,按照系数所在位置和每种颜色分量的色调值来确定量化步距。我们在这里使用标准的亮度量化表和色度量化表。
3、编码。经过DCT变换后,矩阵的左上角是低频分量集中地,高频位于其余部分,因此,要对量化后的系数重新编排,以增加连续“0”的个数。
解码过程与之类似。对已编码的DCT系数进行解码,然后求逆量化,使用二维DCT反变换将其转化为8x8图像块,最后将所有的块组合成一个单一的图像,这样就完成了图像的解压过程。
1.2 DCT变换
DCT变换是将图像信号从色彩域转换到频率域,其数学表达式为式(1)。
对于一个8x8的块,有
对一幅原始图像,我们选取它的最左上角8x8的矩阵,并将其每一个像素值转换到-128到127的范围内,得到矩阵M,然后作 DCT 变换。如式(5),其中为的转置矩阵。
将原始图像信息块转换成代表不同频率分量的系数集,DCT后的64个DCT系数与DCT前的64个像素块相对应,单独一个图像的全部DCT系数块的频谱几乎都集中在最左上角的系数块中。
1.3 量化
量化实际上就是对DCT系数的一个优化。具体做法如下:把经过DCT变换的图像的每个系数根据量化表除以各自对应的量化步长,四舍五入取整,得到量化系数。增加“0”值系数的数目以及减少非“0”系数的幅度是整个量化的目的。JPEG中使用的是YUV格式,Y代表亮度信息,UV代表色差信息,因此,为了进一步提高压缩比,对UV采用粗量化,对Y采用细量化。量化公式为:
控制JPEG压缩比的关键是量化表,在这一步骤中一些高频量被除掉了,其中会有一个色彩过渡的过程呈现在所有图片的点与点之间,在低频率中包含了大量的图像信息,而大量连续的零将会出现在高频段。表1即JPEG亮度量化表。
表1 JPEG亮度量化表
1.4 “Z”字型编码
图像块经过DCT变换后得到的DC直流系数有两个特点,一是AC系数的值比较大,二是相邻8×8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码(DPCM)技术,对相邻图像块之间量化DC系数进行编码;使用游程长度编码(RLE)对交流系数(AC)进行编码。即充分利用相邻两图像块的特性,来再次简化数据。对其他63个元素采用zig-zag(“Z”字形)行程编码,以增加连续“0”的个数。
2 仿真实现
根据上面的分析过程,我们用MATLAB软件进行了仿真验证。程序如下:
close all;clear all;clc;
A=imread('D:MATLABworkPeppersRGB.bmp'); %读入图像
A=rgb2gray(A);
A=im2double(A);
T=dctmtx(8); %计算离散余弦变换矩阵
K=blkproc(A,[8 8],'P1*x*P2',T,T'); %对每个小方块进行离散余弦变换
mask=[1 1 1 1 0 0 0 0 %只选择左上角的10个系数
1 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0
1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0];
K2=blkproc(K,[8 8],'P1.*x',mask); %系数选择
L=blkproc(K2,[8 8],'P1*x*P2',T',T); %对每个小方块进行离散余弦反变换
figure;
subplot(1,2,1);imshow(A); %显示原图像
subplot(1,2,2);imshow(L); %显示结果图像
压缩前后的图像如图2所示。
图2 压缩前后的图像对比
由图2我们可以看出,压缩前后图像在视觉效果上几乎无明显差别,原图像大小为769KB,压缩后图像大小为258KB,其中psnrValue=31.4511。可见,采用这种方法来实现压缩既快捷又简单。
3 结束语
数字图像压缩技术的好坏主要由压缩比、压缩后重构图像的质量、算法实现的复杂度以及压缩速度等方面评价。实验结果表明,基于DCT的图像压缩算法实现简单,重建图像质量高。同时DCT算法具有对称性,可以利用逆DCT算法解压缩图像。因此,它在软件和硬件中都容易实现。本文利用MATLAB来实现DCT图像压缩,减少了大量复杂的矩阵运算,方法简单、速度快且误差小。具有良好的实用价值。
[1]M Thomas.Cover,Joy A.Thomas.Elements of information Theory[M].Beijing Tsinghua University Press,2003:56-98
[2]罗晨.基于DCT的图像压缩及MATLAB实现[J].电子设计工程.2011,19(18)
[3]Ken Cabeen and Peter Gent.Image Compression and the Discrete Cosine Transform[ol].http://www.lokminglui.com/dct.pdf
[4]李秀敏等.基于MATLAB的DCT变换在JPEG图像压缩中的应用[J].电光与控制.2005,12(4)
[5]马媛媛等.基于DCT的JPEG图像压缩的研究[J].计算机技术与发展.2011,21(8)