南京师范大学泰州学院本科生毕业设计(论文)
?1?式中,x,y,u,v?0,1,?,N?1。c(u)?c(v)??2??1u?0,v?0其它
如果采用8×8大小的子块的二维离散余弦变换,在编码器的输入端,把原始图像顺序地分割成一系列8×8的子块,子块的数值在-128到127之间。采用余弦变换获得64个变换系数[8]。
图4.1 MATLAB实现的流程图
变换公式,如式(2-3)所示。
F?u,v??1477c?u?c?v??x?0?y?0f?2x?1??2y?1?x,ycosu?cosv?? (2-3) ??????16??16? 15
第四章 基于DCT变换的图像压缩方法
?1?式中,x,y,u,v?0,1,?,7。c(u)?c(v)??2??1u?0,v?0其它
4.3基于DCT的图像压缩编码步骤
4.3.1 基于DCT图像压缩编码流程图
基于DCT的图像压缩编码的MATLAB实现的流程图如图4.1所示。 4.3.2 DCT系数的量化
量化是对经过DCT变换后的频率系数进行量化,其目的是减小非“0”系数的幅度以及增加“0”值系数的数目,它是图像质量下降的最主要原因。
对于基于DCT的图像压缩编码算法使用如图4.2所示的均匀量化器进行量化,量化步距是按照系数所在的位置和每种颜色分量的色调值来确定。因为人眼对亮度信号比对色差信号更敏感。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此表中的左上角的量化步距要比右下角的量化步距小。
量化系数输出 DCT系数输入
图4.2 均匀量化器
亮度和色度因为代表的图像的信息量不同,亮度代表了图像的低频分量,色度代表了图像的高频分量,要分别对亮度和色度进行量化,所以量化表也是不同的。
4.3.3量化系数的编排
经过DCT变换后,低频分量集中在左上角,其中F(0,0)(即第一行第一列元素)代表了直流(DC)系数,即8×8子块的平均值,要对它单独编码。由于两个相邻的8×8子块的DC系数相差很小,所以对它们采用差分编码DPCM,可以提高压缩比,也就是说对相邻的子块DC系数的差值进行编码。8×8的其它
16
南京师范大学泰州学院本科生毕业设计(论文)
63个元素是交流(AC)系数,采用行程编码[10]。
所以量化后的系数要重新编排,目的是为了增加连续的“0”系数的个数,就是“0”的游程长度,方法是按照Z字形的式样编排。
DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减。因此,量化系数按Z字形扫描读数,这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。量化后的DCT系数的编排如图4.3所示。
图4.3量化DCT系数的编排
量化后的DCT系数的序号如表4.4所示。
表4.4 量化DCT系数的序号
0 2 3 9 10 20 21 35 1 4 8 11 19 22 34 36 5 7 12 18 23 33 37 48 6 13 17 24 32 38 47 49 14 16 25 31 39 46 50 57 15 26 30 40 45 51 56 58 27 29 41 44 52 55 59 62 28 42 43 53 54 60 61 63 4.3.4 DC系数的编码
8×8子块的64个变换系数经量化后,按直流系数DC和交流系数AC分成两类处理。坐标u?v?0的直流系数DC实质上就是空域图像中64个像素的平均值。
17
第四章 基于DCT变换的图像压缩方法
图像块经过DCT变换之后得到的DC直流系数有两个特点,一是系数的数值比较大,二是相邻8×8图像块的DC系数值变化不大。根据这个特点,JPEG算法使用了差分脉冲调制编码技术。
差分脉冲编码调制(DPCM,Differential Pulse Code Modulation),是一种对模拟信号的编码模式,先根据前一个抽样值计算出一个预测值,再取当前抽样值和预测值之差作为编码用。此差值称为预测误差。抽样值和预测值非常接近(因为相关性强),预测误差的可能取值范围比抽样值变化范围小。所以可用少几位编码比特来对预测误差编码,从而降低其比特率。这是利用减小冗余度的办法,降低了编码比特率。
因此,对DC系数编码进行差分脉冲编码就是对相邻图像块之间量化DC系数的差值(Delta)进行编码,即对相邻块之间的DC系数的差值DIFF=DCi-DCi-1编码。DC采用差值脉冲编码的主要原因是由于在连续色调的图像中,其差值多半比原值小,对差值进行编码所需的位数,会比对原值进行编码所需的位数少许多。例如差值为5,它的二进制表示值为101,如果差值为-5,则先改为正整数5,再将其二进制转换成1的补数即可。所谓1的补数,就是将每个Bit若值为0,便改成1;Bit为1,则变成0。差值5应保留的位数为3,列出差值所应保留的Bit数与差值内容的对照。 4.3.5 AC系数的编码
DCT变换所得系数除直流系数之外的其余63个系数称为交流系数(AC系数)。量化AC系数的特点是1× 64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。
63个AC系数采用行程编码的方式进行编码的格式如图4.5所示。也即在AC01到AC63中,找出每一个非零的AC值,将其表示成(NN/SS)VV的形式,其中:NN表示该AC值前的0的个数。而SS、VV与DC的定义一样。如果连续的非0超过15个时,增加一个扩展字节:(15/0)表示连续16个0。另外若有一串0延伸到AC63,一律用(0/0)表示结束。
对于AC系数,有两个符号。符号1为行程和尺寸,即上面的(RunLength,Size)。(0,0)和(15,0)是两个比较特殊的情况。(0,0)表示块结束标志(EOB),(15,0)表示零行程长度超过15个时(ZRL),当行程长度超过15时,用增加ZRL
18
南京师范大学泰州学院本科生毕业设计(论文)
的个数来解决,所以最多有三个ZRL(3×16+15=63)。符号2为幅度值(Amplitude)。
第一字节
7 6 5 4 3 2 1 0 7 6 第二字节 5 4 3 2 1 0 两个非零值 之间的连续 零的个数 下一个非零 值所占的比 特数 下一个非零系数的实际值
图4.5 AC编码格式
对于DC系数,也有两个符号。符号1为尺寸(Size);符号2为幅度值(Amplitude)。
对于AC系数,符号1和符号2分别进行编码。零行程长度超过15个时,有一个符号(15,0),块结束时只有一个符号(0,0)。 4.3.5组成位数据流
图像编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为图像位数据流。
表4.6亮度量化后的系数
15 -2 -1 0 0 0 0 0 0 -1 -1 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 0 0 0 0 0 0 0 0 举个例子来说明上述过程。下面为8×8的亮度(Y)图像子块经过量化后的系数,如表4.6所示。
19