基于DCT的图像压缩编码算法的MATLAB实现(3)

2019-08-26 18:39

? a b c d e ? b' d'

图2-3 压缩取样示意图

2.2.2 二维离散余弦变换

在傅里叶级数展开式中,如果被展开的函数是实偶函数,那么,其傅里叶技术中只包含余弦项,在将其离散化由此可导出余弦变换,或称之为离散余弦变换(DCT,Discrete Cosine Transform)[7]。

二维离散余弦正变换公式为

2N?1N?1?2x?1??2y?1?F?u,v??c?u?c?v???f?x,y?cos?u??cos?v?? (2-3)

Nx?0y?02N2N?????1?式中,x,y,u,v?0,1,?,N?1。c(u)?c(v)??2??1u?0,v?0其它

二维离散余弦逆变换公式为

2N?1N?1?2x?1??2y?1?f?x,y????c?u?c?v?F?u,v?cos?u??cos?v?? (2-4)

Nu?0v?0?2N??2N??1u?0,v?0?式中,x,y,u,v?0,1,?,N?1。c(u)?c(v)??2

?其它?1JPEG采用的是8×8大小的子块的二维离散余弦变换。在编码器的输入端,把原始图像顺序地分割成一系列8×8的子块,子块的数值在-128到127之间。采用余弦变换获得64个变换系数[8]。

变换公式,如式(2-5)所示。

771?2x?1??2y?1?F?u,v??c?u?c?v???f?x,y?cos?u??cos?v?? (2-5)

41616????x?0y?0

9

?1?式中,x,y,u,v?0,1,?,7。c(u)?c(v)??2??1u?0,v?0其它

在MATLAB的图像处理工具箱中,可以直接调用dct2和idct2来实现二维离散余弦变换及其反变换。

(1) dct2

dct2函数实现图像的二维离散余弦变换,其语法为: F=dct2(f) 运行下列程序:

f=imread('cameraman.tif'); f=im2double(f); F=dct2(f);

subplot(121),imshow(f,[ ]);

subplot(122),imshow(log(1+20*abs(F)),[ ]); 运行结果如图2-4所示。

图2-4 图像显示及图像DCT变换后频谱显示

由运行结果可知,DCT变换具有能量集中的性质,数据集中在左上角。因此进行图像压缩时离散余弦变换矩阵可以舍弃右下角的高频数据。

(2) idct2 idct2函数实现图像的二维离散余弦逆变换,其语法为: F=idct2(f)

在MATLAB图像处理工具箱中,有一个对图像进行块操作的函数blkproc,利用这个函数,可以直接实现图像一系列8×8子块的DCT变换。其语法格式为:

10

B = blkproc(A,[m n],fun, parameter1,,parameter2, ...) B = blkproc(A,[m n],[mborder nborder],fun,...) B = blkproc(A,'indexed',...)

[m n]是指图像以m*n为分块单位,对图像进行处理(如8像素*8像素) Fun:应用此函数对分别对每个m*n分块的像素进行处理 parameter1, parameter2:要传给fun函数的参数

mborder nborder:对每个m*n块上下进行mborder个单位的扩充,左右进行nborder个单位的扩充,扩充的像素值为0,fun函数对整个扩充后的分块进行处理。

如下列程序:

I = imread('cameraman.tif'); fun = idct2;

J = blkproc(I,[8 8],fun); imagesc(J), colormap(hot) 运行结果如图2-5所示。

图2-5 DCT变换后图像

8×8的图像经过DCT变换后,其低频分量都集中在左上角,高频分量分布在右下角(DCT变换实际上是空间域的低通滤波器)。由于该低频分量包含了图像的主要信息(如亮度),而高频与之相比,就不那么重要了,所以我们可以忽略高频分量,从而达到压缩的目的。将高频分量去掉,这就要用到

11

量化,它是产生信息损失的根源。这里的量化操作,就是将某一个值除以量化表中对应的值。由于量化表左上角的值较小,右上角的值较大,这样就起到了保持低频分量,抑制高频分量的目的。JPEG使用的颜色是YUV格式。我们提到过,Y分量代表了亮度信息,UV分量代表了色差信息。相比而言,Y分量更重要一些。我们可以对Y采用细量化,对UV采用粗量化,可进一步提高压缩比。所以上面所说的量化表通常有两张,一张是针对Y的,一张是针对UV的。

2.2.3 DCT系数的量化

量化是对经过DCT变换后的频率系数进行量化,其目的是减小非“0”系数的幅度以及增加“0”值系数的数目,它是图像质量下降的最主要原因。

对于基于DCT的JPEG图像压缩编码算法使用如图2-6所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感,因此使用了表2-1所示的 种量化表。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此表中的左上角的量化步距要比右下角的量化步距小[9]。

量化系数输出 DCT系数输入 图2-6 均匀量化器

亮度和色度因为代表的图像的信息量不同,亮度代表了图像的低频分量,色度代表了图像的高频分量,要分别对亮度和色度进行量化,所以量化表也是不同的。

JPEG压缩色度和亮度量化表如表2-1所示。

12

表2-1 JPEG压缩色度和亮度量化表 亮度量化表 16 11 12 12 14 13 14 17 18 22 24 35 49 64 79 92 10 14 16 22 37 55 78 95 16 19 24 29 56 64 24 26 40 51 40 58 57 87 51 60 69 80 61 55 56 62 17 18 18 21 24 26 47 66 99 99 99 99 24 26 56 99 99 99 99 99 色度量化表 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 68 109 103 77 81 104 113 92 87 103 121 120 101 99 99 98 112 100 103 99 99 99 量化会产生误差,上图是综合大量的图像测试的实验结果,对于大部分图像都有很好的结果。表中可以看出,高频部分对应的量化值大,目的就是将高频部分编程接近于0,以便以后处理。JPEG可以在压缩比和图像质量间作取舍。方法就是改变量化值。如果量化值放大一倍,则有更多的系数量化为0,提高了压缩比。

2.2.4 量化系数的编排

经过DCT变换后,低频分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系数,即8×8子块的平均值,要对它单独编码。由于两个相邻的8×8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。8×8的其它63个元素是交流(AC)系数,采用行程编码[10]。

所以量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排。

DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减。因此,量化系数按Z字形扫描读数,这样就把一个8×8的矩阵

13


基于DCT的图像压缩编码算法的MATLAB实现(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:5现场检测道路交通安全设施

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: