摘要
基于 DCT 的图像压缩编码算法的
MATLAB 实现
摘要
随着科学技术的发展,图像压缩技术越来越引起人们的关注。为此从众
多的图像压缩编码标准中选取了基于 DCT 变换的 JPEG 图像压缩编码算法
进行研究,并通过对比分析各种软件特性选取了 MATLAB 进行实验仿真。
首先说明了图像压缩在现代通信中的必要性和可行性,然后讲述了
MATLAB 及其图像处理工具箱的相关知识,并对基于 DCT 变换的 JPEG 图
像压缩算法进行了详细的研究,重点介绍了 JPEG 压缩编码的具体过程和方
法 ,详细介绍了编码中 DCT 变换、量化、熵编码和霍夫曼编码等模块的原
理和数学推导以及各模块的功能分析。最后应用 MATLAB 进行了实验仿真
并分析结果得出结论。
实验结果表明基于 DCT 变换的 JPEG 图像压缩方法简单、方便,既能
保证有较高的压缩比,又能保证有较好的图像质量,应用 MATLAB 仿真出
来的结果较好的反应了其编码算法原理。
关键词 JPEG 图像压缩;DCT;MATLAB;图像处理工具箱
I
Abstract
Image compression technology has been growing concern with the
development of science. To this end a large number of images from the selected
coding standard DCT-based JPEG image compression research, and comparative
analysis of various software features through the selection experiment MATLAB
simulation.
First, note the image compression in modern communications and the
necessity and feasibility, and then tells the MATLAB and its Image Processing
Toolbox of relevant knowledge, and DCT-based JPEG image compression
algorithm is studied in detail, focuses on process and method of compression of
JPEG,describes theory and mathematical derivation the DCT transform coding,
quantization , entropy coding and Huffman coding module , as well as the
functional analysis of each module. The last application of MATLAB to
Simulation and experimental results concluded.
Experimental results show that the results table DCT-based JPEG image
compression method is simple and convenient, not only guarantee a higher
compression ratio, but also to ensure both better image quality, MATLAB
simulation results reflect a better algorithm principle.
Keywords
Toolbox
JPEG image compression;DCT;MATLAB;Image Processing
II
目 录
摘要........................................................................................................................ I
Abstract................................................................................................................. II
第 1 章 绪论......................................................................................................... 6
1.1 课题背景.................................................................................................6
1.1.1 离散余弦变换................................................................................. 7
1.1.2 预测技术......................................................................................... 8
1.2 图像压缩技术的发展和现状.................................................................8
1.2.1 图像编码技术发展历史................................................................. 8
1.2.2 图像编码技术的现状..................................................................... 9
1.3 MATLAB 及其图像处理工具箱........................................................... 9
1.4 论文组织结构.......................................................................................10
第 2 章 图像压缩编码理论算法......................................................................... 6
2.1 DCT 变换的思想来源............................................................................ 6
2.2 基于 DCT 的 JPEG 图像压缩编码步骤................................................8
2.2.1 颜色空间的转换和采样................................................................. 8
2.2.2 二维离散余弦变换......................................................................... 9
2.2.3 DCT 系数的量化........................................................................... 12
2.2.4 量化系数的编排........................................................................... 13
2.2.5 DC 系数的编码..............................................................................14
2.2.6 AC 系数的编码.............................................................................. 15
2.2.7 组成位数据流............................................................................... 16
2.2.8 DCT 变换在图像压缩中的应用................................................... 19
2.3 JPEG2000 压缩算法............................................................................. 19
2.3.1 小波变换....................................................................................... 20
2.3.2 量化 ........................................................................................... 20
2.3.3 熵编码 ....................................................................................... 21
2.3.4 位流组织 ................................................................................... 21
2.4 JPEG 与 JPEG2000 的区别.................................................................. 21
III
2.5 本章小结...............................................................................................23
第 3 章 基于 DCT 的图像压缩 MATLAB 仿真实现.......................................24
3.1 数字图像文件的读写...........................................................................24
3.2 程序流程图...........................................................................................26
3.3 DCT 变换的编程实现.......................................................................... 27
3.4 MATLAB 仿真结果..............................................................................27
3.5 实验结果分析.......................................................................................29
3.6 本章小结...............................................................................................30
结论..................................................................................................................... 31
参考文献............................................................................................................. 34
致谢..................................................................................... 错误!未定义书签。
附录 1.................................................................................. 错误!未定义书签。
附录 2.................................................................................. 错误!未定义书签。
附录 3.................................................................................. 错误!未定义书签。
附录 4.................................................................................. 错误!未定义书签。
IV
第 1 章 绪论
1.1 课题背景
随着信息技术的发展,图像信息被广泛应用于多媒体通信和计算机系统
中,但是图像数据的一个显著特点就是信息量大。具有庞大的数据量,如果
不经过压缩,不仅超出了计算机的存储和处理能力,而且在现有的通信信道
的传输速率下,是无法完成大量多媒体信息实时传输的,因此,为了更有效的
存储、处理和传输这些图像数据,必须对其进行压缩,因此有必要对图像压缩
编码进行研究。由于组成图像的各像素之间,无论是在水平方向还是在垂直
方向上都存在着一定的相关性,因此只要应用某种图像压缩编码方法提取或
者减少这种相关性, 就可以达到压缩数据的目的[1]。
数字图像的冗余主要表现在以下几种形式:
空间冗余:规则物体和规则背景的表面物理特性都具有相关性,数字化
后表现为数字冗余。例如:某图片的画面中有一个规则物体,其表面颜色均
匀,各部分的亮度、饱和度相近,把该图片作数字化处理,生成位图后,很大数
量的相邻像素的数据是完全一样或十分接近的,完全一样的数据当然可以压
缩,而十分接近的数据也可以压缩,因为恢复后人亦分辨不出它与原图有什
么区别,这种压缩就是对空间冗余的压缩。
时间冗余:序列图像(如电视图像和运动图像)和语音数据的前后有着很
强的相关性,经常包含着冗余。在播出该序列图像时,时间发生了推移,但若
干幅画面的同一部位没有变化,变化的只是其中某些地方,这就形成了时间
冗余。
统计冗余:空间冗余和时间冗余是把图像信号看作概率信号时所反应出
的统计特性,因此,这两种冗余也被称为统计冗余。
编码冗余:同样长度的编码可以表示不同的信息。
结构冗余:相似的,对称的结构如果都加以记录就出现结构冗余。
知识冗余:由图像的记录方式与人对图像的知识差异而产生的冗余。人
对许多图像的理解与某些基础知识有很大的相关性。许多规律性的结构,人
6
可以由先验知识和背景知识得到。而计算机存储图像时还得把一个个像素信
息存入,这就形成冗余。
视觉冗余:视觉系统对于图像场的注意是非均匀和非线性的,视觉系统
不是对图像的任何变化都能感知。
所谓的图像压缩编码技术就是对要处理的图像数据按一定的规则进行
变换和组合, 从而达到以尽可能少的数据流(代码)来表示尽可能多的数据信
息。在众多的图像压缩编码标准中,JPEG(Joint Photographic Experts Group)
格式是一种称为联合图像专家组的图像压缩格式,它适用于不同类型、不同
分辨率的彩色和黑白静止图像[2]。
在 JPEG 图像压缩算法中,一种是以离散余弦变换(DCT,Discrete Cosine
Transform)为基础的有损压缩算法,另一种是以预测技术为基础的无损压缩
算法。
1.1.1 离散余弦变换
DCT 变换利用傅立叶变换的性质。采用图像边界褶翻将像变换为偶函
数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之
为离散余弦变换。
DCT 编码属于正交变换编码方式,用于去除图像数据的空间冗余。变
换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处
理的方法。在空间上具有强相关的信号,反映在频域上是在某些特定的区域
内能量常常被集中在一起,或者是系数矩阵的分布具有某些规律。我们可以
利用这些规律在频域上减少量化比特数,达到压缩的目的。图像经 DCT 变
换以后,DCT 系数之间的相关性就会变小。而且大部分能量集中在少数的
系数上,因此,DCT 变换在图像压缩中非常有用,是有损图像压缩国际标
准 JPEG 的核心。从原理上讲可以对整幅图像进行 DCT 变换,但由于图像
各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送
者首先将输入图像分解为 8*8 或 16*16 块,然后再对每个图像块进行二维
DCT 变换,接着再对 DCT 系数进行量化、编码和传输;接收者通过对量化
的 DCT 系数进行解码,并对每个图像块进行的二维 DCT 反变换。最后将操
作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大
7
多数 DCT 系数值都接近于 0,所以去掉这些系数不会对重建图像的质量产
生较大影响。因此,利用 DCT 进行图像压缩确实可以节约大量的存储空间。
在实验中,先将输入的原始 lena 图像分为 8*8 块,然后再对每个块进行二
维 DCT 变换。MATLAB 图像处理上具箱中提供的二维 DCT 变换及 DCT 反
变换函数如下。
dct2 实现图像的二维离散余弦变换。其语法格式为:
(1)B=dct2(A) 返回图像 A 的二维离散余弦变换值,其大小与 A 相同且
各元素为离散余弦变换的系数 B(K1,k2)。
(2)B=dct2(A,in,n)或 B=dct2(A,[m,n]) 如果 m 和 n 比图像 A 大,在
对图像进行二维离散余弦变换之前,先将图像 A 补零至 m*n 如果 m 和 n 比
图像 A 小。则进行变换之前,将图像 A 剪切。
idct2 可以实现图像的二维离散余弦反变换,其语法格式为:
B=idct2(A);B=idct2(A,m,n)或 B=idct2(A,[m,n])。
1.1.2 预测技术
它是利用空间中相邻数据的相关性,利用过去和现在出现过的点的数据
情况来预测未来点的数据。通常用的方法是差分脉冲编码调制(DPCM)和自
适应差分脉冲编码调制(ADPCM)。
1.2 图像压缩技术的发展和现状
1.2.1 图像编码技术发展历史
1948 年提出电视信号数字化后,图像压缩编码的研究工作就宣告开始
了。在这项技术发展的早期,限于客观条件,仅对帧内预测法和亚取样内查
复原法进行研究,对视觉特性也做了一些极为有限但可贵的研究工作。1966
年 J.B.O Neal 对比分析了 DPCM 和 PCM 并提出了用于电视的实验数据。
1969 年进行了线性预测编码的实际实验。1969 年举行首届图像编码会议。
70 年代开始进行了帧间预测编码的研究。80 年代开始对运动估值和模型编
码进行研究[3]。
进入 90 年代,ITU-T 和 ISO 制定了一系列图像编码国际建议,如 H.261、
JPEG、MPEG-1、H.262、H.263、MPEG-4 等。
8
变换编码是 1968 年 H.C.Andrews 等人提出的,采用的是二维离散傅立
叶变换,此后相继出现用其他变换方法的变换编码,其中包括二维离散余弦
变换。
1.2.2 图像编码技术的现状
经过几十年的发展,图像编码技术业已成熟,一些国际建议的制定极大
地推动了图像编码技术的实现和产业化,从而推动图像编码技术以更快的速
度发展,目前的研究方向有两个:
(1) 更好地实现现有的图像编码国际建议。 研制出集成度更高、性能
更好的图像编码专用芯片,使编码系统成本更低、可靠性更高。解决好现有
的图像编码系统开发中的技术问题。例如:提高图像质量、提高抗码能力等。
(2) 对图像编码理论和其他图像编码方法的研究。 目前已经提出和正
在进行研究的图像编码方法有:多分辨率编码、基于表面描述的编码、模型
编码、利用人工神经网络的编码、利用分形几何的编码、利用数学形态学的
编码等等。
1.3 MATLAB 及其图像处理工具箱
如果应用高级语言(如 Basic,C,Fortran)编写仿真程序来实现这一基于
DCT 的图像压缩编码算法比较麻烦,而且仿真效果也不是十分理想。本文
主要应用 MATLAB 发布的图像处理工具箱中的相关函数和命令来实基于
DCT 的图像压缩编码理论算法的仿真。
MATLAB 语言是由美国 MathWorks 公司推出的计算机软件,经过多年
的逐步发展与不断完善,现已成为国际公认的最优秀的科学计算与数学应用
软件之一,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了
一个方便的、界面友好的用户环境,而且还具有可扩展性特征。MATLAB
中的数字图像是以矩阵形式表示的,矩阵运算的语法对 MATLAB 中的数字
图像同样适用,这意味着 MATLAB 强大的矩阵运算能力对用于图像处理非
常有利。
图像处理工具箱(Image Processing Toolbox)提供了一套全方位的参照标
准算法和图形工具,用于进行图像处理、分析、可视化和算法开发。可进行
9