好文档 - 专业文书写作范文服务资料分享网站

基于DCT的图像压缩编码算法的MAAB实现

天下 分享 时间: 加入收藏 我要投稿 点赞

DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减。因此,量化系数按Z字形扫描读数,这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。量化后的DCT系数的编排如图2-7所示。

图2-7 量化DCT系数的编排

量化后的DCT系数的序号如表2-2所示。

表2-2 量化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

2.2.5 DC系数的编码

8×8子块的64个变换系数经量化后,按直流系数DC和交流系数AC分成两类处理。坐标u=v=0的直流系数DC实质上就是空域图像中64个像

素的平均值。图像块经过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数与差值内容的对照。

在差值前端另外加入一些差值的霍夫曼码值,例如亮度差值为5(101)的位数为3,则霍夫曼码值应该是100,两者连接在一起即为100101。

2.2.6 AC系数的编码

DCT变换所得系数除直流系数之外的其余63个系数称为交流系数(AC系数)。量化AC系数的特点是1× 64矢量中包含有许多“0”系数,并且许多“0”是连续的,因此使用非常简单和直观的游程长度编码(RLE)对它们进行编码。

所谓行程编码(Run-Length Encoding)就是指仅存储一个像素值以及具有相同颜色的像素数目的图像数据编码方式,或称,常用RLE(Run-Length Encoding)表示。该压缩编码技术相当直观和经济,运算也相当简单,因此

解压缩速度很快。RLE压缩编码尤其适用于计算机生成的图形图像,对减少存储容量很有效果[11]。

63个AC系数采用行程编码的方式进行编码的格式如图2-8所示。也即在AC01到AC63中,找出每一个非零的AC值,将其表示成(NN/SS)VV的形式,其中:NN表示该AC值前的0的个数。而SS、VV与DC的定义一样。如果连续的非0超过15个时,增加一个扩展字节:(15/0)表示连续16个0。另外若有一串0延伸到AC63,一律用(0/0)表示结束。

第一字节

7 6 5 4 3 2 1 0 两个非零值 之间的连续 零的个数 下一个非零 值所占的比 特数 第二字节

7 6 5 4 3 2 1 0 下一个非零系数的实际值 图2-8 AC编码格式

对于AC系数,有两个符号。符号1为行程和尺寸,即上面的(RunLength,Size)。(0,0)和(15,0)是两个比较特殊的情况。(0,0)表示块结束标志(EOB), (15,0)表示ZRL,当行程长度超过15时,用增加ZRL的个数来解决,所以最多有三个ZRL(3×16+15=63)。符号2为幅度值(Amplitude)。

对于DC系数,也有两个符号。符号1为尺寸(Size);符号2为幅度值(Amplitude)。

对于AC系数,符号1和符号2分别进行编码。零行程长度超过15个时,有一个符号(15,0),块结束时只有一个符号(0,0)。

对符号1进行Huffman编码(亮度,色差的Huffman码表不同)。对符号2进行变长整数VLI编码。举例来说:Size=6时,Amplitude的范围是-63~-32,以及32~63,对绝对值相同,符号相反的码字之间为反码关系。所以AC系数为32的码字为100000,33的码字为100001,-32的码字为011111,-33的码字为011110。符号2的码字紧接于符号1的码字之后。

对于DC系数,Y和UV的Huffman码表也不同。

2.2.7 组成位数据流

JPEG编码的最后一个步骤是把各种标记代码和编码后的图像数据组成一帧一帧的数据,这样做的目的是为了便于传输、存储和译码器进行译码,这样的组织的数据通常称为JPEG位数据流(JPEG bit stream)[12]。

举个例子来说明上述过程。下面为8×8的亮度(Y)图像子块经过量化后的系数,如表2-3所示。

表2-3 亮度量化后的系数

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 可见量化后只有左上角的几个点(低频分量)不为零,这样采用行程编码就会很有效。

第一步,熵编码的中间格式表示。

先看DC系数。假设前一个8×8子块DC系数的量化值为12,则本块DC系数与它的差为3,根据下表

表2-4 DC系数表 Size 0 1 2 3 4 Amplitude 0 –1,1 –3,-2,2,3 –7~-4,4~7 –15~-8,8~15

5 6 7 8 9 10 11 –31~-16,16~31 –63~-32,32~63 –127~-64,64~127 –255~-128,128~255 –511~-256,256~511 –1023~512,512~1023 –2047~-1024,1024~2047 查表得Size=2,Amplitude=3,所以DC中间格式为(2)(3)。

下面对AC系数编码。经过Zig-Zag扫描后,遇到的第一个非零系数为-2,其中遇到零的个数为1(即RunLength),根据下面这张AC系数表:

表2-5 AC系数表 Size 1 2 3 4 5 6 7 8 9 10 Amplitude –1,1 –3,-2,2,3 –7~-4,4~7 –15~-8,8~15 –31~-16,16~31 –63~-32,32~63 –127~-64,64~127 –255~-128,128~255 –511~-256,256~511 –1023~512,512~1023

基于DCT的图像压缩编码算法的MAAB实现

DCT变换后低频分量多呈圆形辐射状向高频率衰减,因此可以看成按Z字形衰减。因此,量化系数按Z字形扫描读数,这样就把一个8×8的矩阵变成一个1×64的矢量,频率较低的系数放在矢量的顶部。量化后的DCT系数的编排如图2-7所示。图2-7量化DCT系数的编排量化后的DCT系数的序号如表2-2所示。表
推荐度:
点击下载文档文档为doc格式
0k4n300nmq0088t3x4ji0cqsi0v0qh00p9y
领取福利

微信扫码领取福利

微信扫码分享