资源描述
. -数字图像的冗余包括空间冗余、构造冗余、知识冗余和视觉冗余等。空间冗余是指规则物体和规则背景的外表物理特性都具有相关性,数字化后表现为数字冗余。例如:*图片的画面中有一个规则物体,其外表颜色均匀,各局部的亮度、饱和度相近,把该图片作数字化处理,生成位图后,很大数量的相邻像素的数据是完全一样或十分接近的,完全一样的数据当然可以压缩,而十分接近的数据也可以压缩,因为恢复后人亦分辨不出它与原图有什么区别,这种压缩就是对空间冗余的压缩。再比方视觉冗余,视觉系统对于图像场的注意是非均匀和非线性的,视觉系统不是对图像的任何变化都能感知,因此对图像进展压缩后人眼也并不会非常敏锐地觉察画面内容有所删减。所谓的图像压缩编码技术就是对要处理的图像数据按一定的规则进展变换和组合, 从而到达以尽可能少的数据流(代码)来表示尽可能多的数据信息。在众多的图像压缩编码标准中,JPEG(Joint Photographic E*perts Group)格式是一种称为联合图像专家组的图像压缩格式,它适用于不同类型、不同分辨率的彩色和黑白静止图像。而在JPEG图像压缩算法中,有一种是以离散余弦变换(DCT,Discrete Cosine Transform)为根底的有损压缩算法,是为本论文的主要研究对象。DCT变换利用傅立叶变换的性质。采用图像边界褶翻将像变换为偶函数形式,然后对图像进展二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。DCT编码属于正交变换编码方式,用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进展处理的方法。在空间上具有强相关的信号,反映在频域上是在*些特定的区域内能量常常被集中在一起,或者是系数矩阵的分布具有*些规律。我们可以利用这些规律在频域上减少量化比特数,到达压缩的目的。图像经DCT变换以后,DCT系数之间的相关性就会变小。而且大局部能量集中在少数的系数上,因此,DCT变换在图像压缩中非常有用,是有损图像压缩国际标准JPEG的核心。从原理上讲可以对整幅图像进展DCT变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为8*8或16*16块,然后再对每个图像块进展二维DCT变换,接着再对DCT系数进展量化、编码和传输;接收者通过对量化的DCT系数进展解码,并对每个图像块进展的二维DCT反变换。最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数DCT系数值都接近于0,所以去掉这些系数不会对重建图像的质量产生较大影响。因此,利用DCT进展图像压缩确实可以节约大量的存储空间。在实验中,先将输入的原始图像分为8*8块,然后再对每个块进展二维DCT变换。1.1.1 DCT编码DCT编码属于正交变换编码。这类算法通常是将空间域上的图像经过正交变换映射到系数空间,使变换后的系数直接相关性降低。图像变换本身并不能压缩数据,但变换后图像大局部能量集中到了少数几个变换系数上,再采用适当的量化和熵编码便可以有效地压缩图像。信息论的研究说明,正交变换不改变信源的熵值,变换前后图像的信息量并无损失,完全可以通过反变换得到原来的图像值。但图像经过正交变换后,把原来分散在原空间的图像数据在新的坐标空间中得到集中,对于大多数图像而言,大量的变换系数很小,只要删除接近于0的系数,并对较小的系数进展粗量化,而保存包含图像主要信息的系数,以此进展压缩编码。在重建图像进展解码逆变换时,所损失的将是些不重要的信息,几乎不会引起图像失真,图像的变换编码就是利用这些来压缩图像并得到很高的压缩比。由于图像可看成二维数据矩阵,所以在图像编码中多采用二维正交变换方式,然而其正交变换的计算量太大,所以在实用中变换编码并不是对整幅图像进展变换和编码,而是将图像分成假设干个nn的子图像分别处理。这是因为小块图像的变换计算比拟容易,而且距离较远的像素之间的相关性比距离较近的像素之间的相关性要小。实践证明44、88、1616适合图像压缩,这是因为: 如果子图像尺寸取得太小,虽然计算速度快,实现简单,但压缩能力有限; 如果子图像尺寸取得太大,虽然去相关效果好,因为DCT等正弦类变换均渐近最正确化,同时也渐近饱和,犹豫图像本身的相关性很小,反而使得压缩效果不明显,并且增加了计算的复杂度。1.1.2 变换系数的选择对子图像经过变换后,保存变换后的哪些系数用作编码和传输将直接影响信号恢复的质量,变换系数的选择原则是保存能量集中、方差大的系数。系数选择通常有变换变换区域编码和变换阈值编码两种方法。1) 变换区域编码变换区域编码是对设定形状的区域内的变换系数进展量化编码区域外的系数被舍去。一般来说,变换后的系数值较大的会集中在区域的左上部,即低频分量都集中在左上部。保存的也是这一局部。其他局部的系数被舍去,在恢复信号时对它们补0。这样以来,由于保存了大局部图像信号能量,在恢复信号后,其质量不会产生显著变化。变换区域编码的明显缺陷是高频分量完全丧失。反响在恢复图像上将是轮廓及细节模糊。为抑制这一缺陷,可预先设定几个区域,根据实际系数分布自动选取能力最大的区域。2) 变换阈值编码变换阈值编码是根据实际情况设定*一大小幅度的阈值,假设变换系数超过该阈值,则保存这些系数进展编码传输,其余补0.这样,多数低频成分被编码输出,而且少数超过阈值的高频成分也将被保存下来进展编码输出。这在一定程度上弥补了区域变换法的缺乏。但也有两个问题需要解决:一是被保存下来的系数在矩阵中的位置不是不确定的,因此需增加地质编码比特数,其码率相对要高一些;二是阈值需要通过实验来确定,当然也可以根据总比特数进展自适应阈值选择,但需要一定技术,将增加编码的复杂程度。1.1.3 基于DCT编码的JPEG编码压缩基于DCT编码的JPEG编码压缩过程框图,如图2-1所示。压缩数据原始图像数据分成8*8的小块量化器DCT变换熵编码器码表量化表图2-1 基于DCT编码的JPEG压缩过程简化图上图是基于DCT变换的图像压缩编码的压缩过程,解压缩与上图的过程相反。在编码过程中,首先将输入图像分解为88大小的数据块,然后用正向二维DCT把每个块转变成64个DCT系数值,其中左上角第一个数值是直流(DC)系数,即88空域图像子块的平均值,其余的63个是交流(AC)系数,接下来对DCT系数进展量化,最后将变换得到的量化的DCT系数进展编码和传送,这样就完成了图像的压缩过程。在解码过程中,形成压缩后的图像格式,先对已编码的量子化的DCT系数进展解码,然后求逆量化并把DCT系数转化为88样本像块(使用二维DCT反变换),最后将操作完成后的块组合成一个单一的图像。这样就完成了图像的解压过程。1.2 二维离散余弦变换图像数据压缩的目的是在满足一定图像质量的条件下,用尽可能少的比特数来表示原始图像,以提高图像传输的效率和减少图像存储的容量,在信息论中称为信源编码。图像压缩是通过删除图像数据中冗余的或者不必要的局部来减小图像数据量的技术,压缩过程就是编码过程,解压缩过程就是解码过程。假设有一个无记忆的信源,它产生的消息为,其出现的概率是的, 记为。则其信息量定义为: (2-1)由此可见一个消息出现的可能性越小,其信息量就越多,其出现对信息的奉献量越大,反之亦然。信源的平均信息量称为熵,可以表示为:(2-2)对上式取以2 为底的对数时,单位为比特bits:(2-3)在图像压缩中,压缩比是一个重要的衡量指标。可以定义压缩比为:=C=原始数据的平均比特率B/压缩数据的平均比特率HDCT变换后系数的量化是引起失真的主要原因,压缩效果与图像内容本身有较大的关系。在傅里叶级数展开式中,如果被展开的函数是实偶函数,则,其傅里叶技术中只包含余弦项,在将其离散化由此可导出余弦变换,或称之为离散余弦变换(DCT,Discrete Cosine Transform)。(2-)式中,。二维离散余弦逆变换公式为 (2-)式中,。JPEG采用的是88大小的子块的二维离散余弦变换。在编码器的输入端,把原始图像顺序地分割成一系列88的子块,子块的数值在-128到127之间。采用余弦变换获得64个变换系数。变换公式,如式(2-)所示。 (2-)式中,。在MATLAB 仿真实现中, 主要是采用二维DCT变换的矩阵式定义来实现的,矩阵式定义可以表示为:(2-)其中是空间数据阵列, 是变换系数阵列, 是变换矩阵, 是的转置。The basis functions of the DCT of 64*64 an ImageDCT系数的量化量化是对经过DCT变换后的频率系数进展量化,其目的是减小非0系数的幅度以及增加0值系数的数目,它是图像质量下降的最主要原因。量化过程定义了一种从实数到整数映射的方法,它是通过降低DCT变换产生的数值结果的准确度,来减少存储变换后的系数需要的比特数。定义量化公式为:(2-)其中,为量化前的DCT系数,为量化后的DCT系数,而为量化步长,表示取整。对于基于DCT的JPEG图像压缩编码算法,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了表2-1所示的量化表。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此表中的左上角的量化步距要比右下角的量化步距小。亮度和色度因为代表的图像的信息量不同,亮度代表了图像的低频分量,色度代表了图像的高频分量,要分别对亮度和色度进展量化,所以量化表也是不同的。量化就是用DCT变换后的系数除以量化表中想对应的量化阶后四舍五入取整。由于量化表中,左上角的数值比拟小,而右下角的数值比拟大,因而能够起到保持低频分量,抑制高频分量的作用。JPEG压缩色度和亮度量化表如表2-1所示。表2-1 JPEG压缩色度和亮度量化表亮度量化表色度量化表161110162440516117182447999999991212141926586055182126669999999914131624405769562426569999999999141722295187806247669999999999991822375668109103779999999999999999243555648110411392999999999999999949647887103121120101999999999999999979929598112100103999999999999999999量化会产生误差,上图是综合大量的图像测试的实验结果,对于大局部图像都有很好的结果。表中可以看出,高频局部对应的量化值大,目的就是将高频局部编程接近于0,以便以后处理。JPEG可以在压缩比和图像质量间作取舍。方法就是改变量化值。如果量化值放大一倍,则有更多的系数量化为0,提高了压缩比。在本课题研究中,用于DCT变换的图像为灰度图像,故只考虑亮度即可。1.2.1 量化系数的编排经过DCT变换后,低频分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系数,即88子块的平均值,要对它单独编码。由于两个相邻的88子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进展编码。88的其它63个元素是交流(AC)系数,采用行程编码。所以量化后的系数要重新编排,目的是为了增加连续的0系数的个数,就是0的游程长度,方法是按照Z字形的式样编排。DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减。因此,量化系数按Z字形扫描读数,这样就把一个88的矩阵变成一个164的矢量,频率较低的系数放在矢量的顶部。量化后的DCT系数的编排如图2-2所示。图2-2 量化DCT系数的编排量化后的DCT系数的序号如表2-2所示。表2-2 量化DCT系数的序号01561415272824713162629423812172530414391118243140445310192332394552542022333846515560213437475056596135364849575862631.3 2D-DCT与2D-FFT的比拟这两种运算表达在程序中,分别调用了1D-FFT和1D-DCT变换,而1D-DCT又是以1D-FFT为核心的。设计的程序是以频率抽取的基2FFT算法为根本理论的,因此蝶形运算后,需要进展排序,根据理论推算应该采取倒位序的方法,对于一个N=8的蝶形运算,其结果下标排列应是:0,4,2,6,1,5,3,7。倒位序后回到了自然排列顺序0,1,2,3,4,5,6,7。一维快速傅立叶正反变换包含于一个核心子程序中,所以在求其反变换时,先将*(K)取共轭变换,在将*(K)的虚部乘以-1,然后就可以直接访问FFT的子程序,最后再对运算结果取一次共轭变换并乘以常数1/N即可得到*n值。这种IFFT算法可以完全不改动FFT的程序。在进展二维的FFT变换时,可把二维的FFT变换变成一维后直接调用FFT子程序。因为,二维离散傅立叶变换(DFT)处理图像的时间比拟长,其处理结果和FFT处理结果一样;FFT运算量非常大,实时性差,处理图像时没有实用性。傅里叶变换的缺乏之处在于子图像的变换系数在边界处的不连续而造成恢复的子图像在其边界也不连续,于是由于各恢复子图像构成的整幅图像将呈现隐约可见的子图像的方块状构造,影响图像质量。图2-3 2D-FFT的变换谱 图2-4 2D-DCT的变换谱可以看出,原图像经FFT变换后频域能的量主要集中在两条对角线附近;DCT变换后变换域的能量主要集中在低频分量附近即左上角。图像压缩中的DCT编码正是利用DCT变换的这一特性,在对二维图像进展DCT变换后,只对变换域低频分量进展编码,抛弃局部高频分量,减少携带的信息量,从而实现对图像的有损压缩编码。DCT 变换与FFT 变换类似,但DCT 变换可以使用较少的频谱系数来表示被变换的图像数据。在接收端,用逆变换IDCT 将这些频谱系数恢复成的图像数据,与变换前的数据更接近。因此在图像压缩算法中常用DCT 变换。实验结果及分析离散余弦变换DCT 的MATLAB 实现有两种方法,一种是基于FFT 的快速算法,这是通过MATLAB工具箱提供的dct2 函数实现的;另一种是DCT 变换矩阵方法。变换矩阵方法非常适合做 8*8 或 16*16 的图像块的DCT 变换,工具箱提供了dctmt* 函数来计算变换矩阵。方法1:该方法出发点是对整幅图像进展DCT变换,主要应用MATLAB的图像处理工具箱中的基于FFT的有大量输入的快速算法进展处理的dct2函数: 具体程序实现如下:A=imread(D:rabitrabit.bmp);I=rgb2gray(A);DCT=dct2(I); %余弦变化DCT(abs(DCT)10)=0; %把变换矩阵中小于10的值置换为0,然后用idct2重构IDCT=idct2(DCT);subplot(2,2,1),imshow(I);title(灰度图像)subplot(2,2,2),imshow(IDCT,0 255);title(反余弦变换恢复图)subplot(2,2,3),imshow(DCT);title(DCT变换)subplot(2,2,4),imshow(log(abs(DCT),);title(余弦变换系数);figure,mesh(DCT);title(变换谱三维彩色图) (a) (b) (c) (d)(e)图4-1 DCT变换从(b)图,反余弦变换恢复图中,可以看出,该方法偏重图像的视觉效果,按照这种方法重构的图像与原图几乎没有差异。从(c) 图,DCT变换图中可以看出,DCT谱集中在左上部,只有左上局部不为零值。 通过观察e图DCT谱的彩色三维图也可得到这一结论。需要说明的是,对于本课题选取的这幅图像而言,其低频信息比拟多,分布扩散至右下部。因此并未像传统使用的Lena图一样,仅有少局部有效信息集中在左上角。DCT变换系数如下:图4-2 DCT变换系数方法2:该方法的出发点是先将图像分解为8*8或16*16个数据块,然后分别对分解后的每个数据小方块进展DCT变换,主要应用MATLAB的图像处理工具箱中dctmt*函数返回DCT变换矩阵,而后进展相关处理。样本程序实现如下:A=imread(D:rabitrabit.bmp);I=rgb2gray(A);I=im2double(I);%将图像转换为双精度格式T=dctmt*(8);%返回一个8*8的DCT变换矩阵B=blkproc(I,8 8,P1*P2,T,T);%对原图像进展DCT变换mask=1 1 1 1 0 0 0 0 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;%保存了10个DCT系数重构图像B2=blkproc(B,8 8,P1.*,mask);%数据压缩,丢弃右下角高频数据I2=blkproc(B2,8 8,P1*P2,T,T);%进展DCT反变换,得到压缩后的图像subplot(1,2,1),imshow(I)title(原始图像)subplot(1,2,2),imshow(I2)title(压缩图像1)disp(压缩后图像I2的大小);whos(I2);disp(压缩前图像A的大小);whos(A);disp(压缩后图像I的大小);whos(I);(a) (b)(c) (d) (e)(f)图4-3 基于DCT的图像压缩对于b图压缩图像1,仿真中仅保存了3个DCT系数,约占5%,从结果来看,图像压缩的效果出现了块失真。并且随着量化系数的进一步减少,失真情况会越来越严重,这说明图像信息丧失严重。对于c图压缩图像2,仿真中保存了10个DCT系数,占15%,比拟原图和重构图像,可以发现:在抛弃85%的系数后,重构图像根本上恢复了原图像的信息,可以比拟清楚地辨清亮度上的差异,大局部的信息都很好的保存下来。然而细节局部,即边缘局部,也就是高频分量所携带的信息,并没有很好地重现出来。因为我们把高频分量通过mask表中的0值控制全部舍弃了。而且从方法1中的DCT变换一图中,我们可以清楚地看到,对于本图来说,非0值并非很好地集中在左上部很小的局部,而是分布在几乎85%的区域。因此,当我们只取了左上部15%的DCT系数时,当然不能很好地恢复剩余大局部的细节。当然,在采用这种方法来实现压缩算法时,可以通过修改mask变量中的DCT系数来更好地比拟仿真结果。在d图压缩图像3中,则是对半取舍DCT系数。较之c图的效果又有了明显的进步,边缘细节信息已经得到了很好的保存和重现。在e图压缩图像4中,便是把mask中的DCT系数取85%地进展了保存,而只舍去了10个右下角的DCT系数。可以看出,该图中的细节信息较之d图又有了更好的表达,边缘等局部轮廓比拟清晰,与之前的压缩图像进展比照,图像的恢复重现效果明显好了很多。而在f图压缩图像5中,则是把压缩图像1中的DCT系数的取舍完全颠倒过来,即,压缩图像2中,左上局部取1的系数变为取0,同时右下局部取为0的DCT系数则变为取1保存。从低频和高频的角度来说,即是将承载了灰度图像很大局部重要亮度信息的低频局部舍弃,而仅仅将右下角的承载边缘细节信息的高频局部予以保存。效果如压缩图像5所示,我们可以明显看到仅仅有图像的边缘信息显示,而原始图像最重要的信息则没有保存和显现。而当把图像分为16*16数据块进展DCT变换时,算法的复杂度急剧上升,但采用较大的子块可以明显减少图像分块效应。实验结果如下:程序见附录五(a) (b)(c) (d) (e) (f)图4-4 16*16的DCT图像压缩b图压缩图像1是16*16子块模式中仅保存了6个左上角DCT系数的效果,可以看出明显的块失真效果。c图压缩图像2是保存了10个DCT系数,效果与8*8子块模式中保存3个DCT系数的效果差不多,但要稍微好一点。d图压缩图像3中保存了36个DCT系数,约占14%,此时与8*8子块模式中的保存了15%的DCT系数的压缩图像2效果相近,并且稍微更清晰一些。e图保存了3/8的DCT系数,而f图压缩图像5中保存了50%的DCT系数,和8*8子块模式中同样对半取舍系数的d图进展比照,可以看出16*16子块的效果要更好一些。由此可见,将图像划分为更小的数据块进展DCT变换和压缩的效果更好,然而复杂度上升。当图像压缩比增大时,也即压缩效率减小时,图像的质量也将降低,人们可以根据需要的图像的质量来规定压缩比的大小。. 优选-
展开阅读全文