《多媒体技术》实验指导书 - 图文 联系客服

发布时间 : 星期四 文章《多媒体技术》实验指导书 - 图文更新完毕开始阅读87e324c008a1284ac8504339

实验二 JEPG 图像编码

实验二 JPEG 图像编码

1.实验目的

本实验旨在了解目前最为常用的 JPEG 压缩算法的工作原理,重点是 DCT 变换和量化。

2.实验条件

(1) 普通 PC 计算机 (2) MATLAB6.5 (3) 标准测试图像

3.实验内容

(1) 用 MATLAB 生成只有(0,0)系数为 1,其余系数均为 0 的 8×8 矩阵,并对该系

数矩阵做 DCT 反变换,并以图像方式显示变换后矩阵。 (2) 改变系数 1 的位置,重复步骤 1,观察输出图像的变化情况,进而理解 DCT 系数的

物理含义。 (3) 根据 JPEG 标准对标准测试图像做 DCT 变换,并对 DCT 系数进行量化(选择量化

步长为 8);然后做反了量化和反变换,得到重建图像,比较原始图像和重建图像的 差别。

(4) 改变量化步长,重复步骤(3)观察量化步长对图像质量的影响。

(5) 利用 MATLAB 自带的 JPEG 压缩算法,对标准测试图像进行压缩,并保存编码后的

JPEG 图像,比较编码前后图像质量和文件大小的差别。

4.实验原理

(1)JPEG-静止图像压缩标准

对于静止图像,国际标准化组织 ISO、原来的国际电报电话咨询委员会 CCITT(现改 名为 ITU-T)及国际电工委员会 IEC 共同组织了一个图片专家联合小组(Joint Photographic Experts Group)研究制订标准,并称之为 JEPG 标准。JEPG 标准分为两类:基于 DPCM 与 熵编码的无失真编码系统;基于离散余弦变换 DCT 的限失真编码系统。前者不会产生失真, 但压缩此很小;后一种算法进行图像压缩是信息虽有损失但压缩比可以很大,例如压缩 20 倍左右时,人眼基本上看不出失真。

本实验中所用的是基于离散余弦变换 DCT 的 JPEG 算法,该 JPEG 算法操作可分成以 下三个步骤:通过离散余弦变换(DCT)去除数据冗余;使用量化表对以 DCT 系数进行量 化,量化表是根据人类视觉系统和压缩图像类型的特点进行优化的量化系数矩阵;对量化后 的 DCT 系数进行编码使其熵达到最小,熵编码采用 Huffman 可变字长编码。

具体过程如下:(如图 1 所示)

14

实验二 JEPG 图像编码

图 1 JPEG 算法的编解码过程

离散余弦变换:JPEG 采用 8x8 子块的二维离散余弦变换算法。在编码器的输入端,把 原始图像(对彩色图像是每个颜色成分)顺序地分割成一系列 8x8 的子块。在 8x8 图像块中, 像素值一般变化较平缓,因此具有较低的空间频率。实施二维 8x8 离散余弦变换可以将图像 块的能量集中在极少数几个系数上,其它系数的值与这些系数相比,绝对值要小得多。与 Fourier 变换类似,对于高度相关的图像数据进行这样变换的效果使能量高度集中,便于后 续的压缩处理。

量化:为了达到压缩数据的目的,对 DCT 系数需作量化处理。量化的作用是在保持一 定质量前提下,丢弃图像中对视觉效果影响不入的信息。量化是多对一映射,是造成 DCT 编码信息损失的根源。JPEG 标准中采用线性均匀量化器,量化过程为对 64 个 DCT 系数除 以量化步长并四舍五入取整,量化步长由量化表决定。量化表元素因 DCT 系数位置和彩色 分量的不同而取不同值。量化表为 8x8 矩阵,与 DCT 变换系数一一对应。量化表一般由用 户规定 JPEG 标准中给出了参考值),并作为编码器的一个输入。量化表中元素为 1 到 255 之间的任意整数,其值规定了其所对应 DCT 系数的量化步长。 DCT 变换系数除以量化表 中对应位置的量化步长并合入小数部分后。多梦变为零,从而达到了压缩的目的。

游程编码:64 个变换数经量化后,左上角系数是直流分量(DC 系数),即空间域中 64 个图像采样值的均值。相邻 8x8 块之间的 DC 系数一般有很强的相关性,JPEG 标准对 DC 系数采用 DPCM 编码(差分编码)方法,即对相邻像素块之间的 L 系数的差值进行编码。 其余 63 个交流分量(AC 系数)使用游程编码,从左上角开始沿对角线方向,以 Z 字形 (Zig-Zag)进行扫描直至结束。量化后的 AC 系数通常会有许多零值,以 Z 字形路径进行 游程编码有效地增加了连续出现的零值个数。

熵编码:为了进一步压缩数据,对 DC 码和 AC 行程编码的码字再作基于统计特性的熵 编码。 JPEG 标准建议使用的熵编码方法有 Huffman 编码和自适应二进制算术编码。

(2)DCT 变换与反变换

首先把一幅图像(单色图像的灰度值或彩色图像的亮度分量或色差分量信号)分成 8×8 的块按图中的框图进行离散余弦正变换(FDCT)和离散余弦逆变换(IDCT)。8×8FDCT 和 8×8IDCT 数学定义表达式如下:

FDCT:

? 7 7 ( 2x?? 1) ( 2 y?? 1) ??1 F (u, v)???C (u)C (v)????? cos ?????? f ( x, y)?? cos 16 u??4 16 v???? x??0 y??0 ??

(1)

15

IDCT:

实验二 JEPG 图像编码

1?? 7 7 ( 2x?? 1) ( 2 y?? 1) ??

F ( x, y)??????u???? cos ??? C (u)C(v) f (u, v)?? cos 16 ???16 v??4??? u??0 v??0 ??

1 两式中, C (u), C (v)???,当 u?? v?? 0 ;

2 C (u), C (v)?? 1 , 其它情况

(2)

每个 8×8 二维原图像采样数据块,实际上是 64 点离散信号,该信号是空间二维参数 x 和 y 的函数。fdct 把这些信号作为输入,然后把它分解成 64 个正交基信号,每个正交基信 号对应于 64 个二维(2d)空间频率中的一个,这些空间频率是由输入信号的频谱组成。fdct 的输出是 64 个基信号的幅值(即 dct 系数),每个系数值由 64 点输入信号唯一地确定,即 离散余弦变换的变换系数。在频域平面上变换系数是二维频域变量 u 和 v 的函数。对应于 u=0,v=0 的系数,称做直流分量(dc 系数),其余 63 个系数称做交流分量(ac 系数)。因为 在一幅图像中像素之间的灰度或色差信号变化缓慢,在 8×8 子块中像素这间相关性很强, 所以通过离散余弦正变换处理后,在空间频率低频范围内集中了数值大的系数,这样为数据

压缩提供了可能。

5.实验步骤及结果

(1) 用 MATLAB 生成只有(0,0)系数为 1,其余系数均为 0 的 8×8 矩阵,并对该系

数矩阵做 DCT 反变换,并以图像方式显示变换后矩阵。

本实验的 matlab 源代码如下: T = dctmtx(8); I1

=[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

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0];

I2 = blkproc(I1,[8 8],'P1*x*P2',T',T); I3 = imresize(I1,16); I4 = imresize(I2,16); figure

subplot(2,1,1); imshow(I3); subplot(2,1,2); imshow(I4,[]);

运行结果如下所示(左图以黑白显示原矩阵,右图以灰度显示变换后矩阵):

16

实验二 JEPG 图像编码

图 2

(2) 改变系数 1 的位置,重复步骤 1,观察输出图像的变化情况,进而理解 DCT 系数的

物理含义。

改变原矩阵中 1 的位置,令 I1

= [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 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

就可得到如下的结果:

图 3

同样的,若 I1

= [0

0

0

0

0

0

0

0

17