学士学位论文
数样值的矩阵变为非整数系数矩阵,因此要对系数进行量化。量化是对DCT系数进行压缩的关键一步,这是利用降低DCT系数的精确度的方法来去除不重要的系数,从而减少数据量。
数据压缩中的量化处理,不是对A/D转换中的量化,而是对正交变换后的数据进行的量化处理,在此量化过程中,量化输入值的动态范围很大,而量化的输出只能取有限个整数,量化后的数值用较少的比特数便可表示。量化处理总是把一批输入量化到一个输出级上,这样降低了数值的精度,但减少了数据量。
图像压缩过程中,一般将图像分成若干个8×8的图像块,在图像压缩算法中采用均匀量化器,量化定义可以表述为:对64个DCT系数除以其量化步长,四舍五入取整,即
Q?u,v??IntegerRound?F?u,v?S?u,v??
式中,Q?u,v?为量化的系数幅度,S?u,v?为量化步长,它是量化表的元素,通常随DCT系数的位置和彩色分量的不同而取不同的值,量化表的尺寸为8×8与64个DCT系数一一对应。
从物理意义上来分析,u代表了图像样值f?x,y?沿水平方向的变化率,又称为“水平空间频率”;v代表了图像样值f?x,y?沿垂直方向的变化率,又称为“垂直空间频率”;。在这64个系数中,F?0,0?代表了样值子块的直流分量,F?u,v?称为“空间频率系数”
又称为“DC”系数,其它63个系数代表了交流分量,又称为“AC”系数,其中F?8,8?是最高频率系数,如图 4.1所示。
量化后的系数还要重新编排,目的是为了增加连续的“0”系数的个数,即“0”的流程长度,方法是按照Z字形的样式编排,把一个8×8的矩阵变成一个1×64的矢量,使频率较低的系数留在矢量的顶部。连续的0个数越多,编码效率越高,对DCT系数采取Z行扫描方式后,可使大多出现在右下角的0值能够连续起来。如图 3.4所示。
17
学士学位论文
DC值 AC系数开始 AC系数结束 图 3.4 Z字形扫描
量化的作用是在一定的主观保真度图像质量的前提下,丢掉那些对视觉影响不大的信息,以获得较高的压缩比。由于DCT系数包含了空间的频率信息,可充分利用人眼对不同频率敏感程度不同这一特性来选择量化表中的元素值的大小,对视觉重要的系数采用细量化,细量化的步长较小,如低频系数被细量化,对高频系数采用粗量化,与之相应地,粗量化的步长较大。
量化的目的是减小“0”系数的幅度以及增加“0”之系数的数目。量化是图像质量下降的最主要原因。一般情况下都使用均匀量化器进行量化,量化步长是按照系数所在的位置和每种颜色分量的色调值来确定,因为人眼对亮度信号比对色差信号更敏感,因此使用了两种量化表,一个是亮度量化 表,一个是色度量化表。此外,由于人眼对低频分量的图像比对高频分量的图像更敏感,因此量化表中的左上角的量化步长一般要比右下角的量化步长小,量化机要使得大部分数据得以压缩,同时又要保证通过量化和编码之后能输出一个与信道传输速率匹配的比特流。
18
学士学位论文
4 MATLAB实现
4.1 MATLAB语言的特点
MATLAB是一种科学计算软件,主要适用于矩阵去处及控制和信息处理领域的分析设计。它使用方便,输入简捷,运算高效,内容丰富,并且很容易由用户自行扩展。
MATLAB是“矩阵实验室”(MATrix LABoratoy)的缩写,它是一种以矩阵运算为基础的交互式程序语言,专门针对科学、工程计算及绘图的需求。与其他计算机语言相比,其特点是简洁和智能化,适应科技人员的思维方式和书写习惯,使得编程和高度效率大大提高 。它用解释方式工作,键入程序立即得出结果,人机交互性能好,深得科技人员喜爱。特别是它可适应多种平台,并且,随计算机硬软件的更新及时升级。因此,MATLAB语言在国外的大学工学院中,特别是数值计算用的最频繁的电子信息类学科中,已成为每个学生都掌握的工具了。它大大提高了课程教学、解题作业、分析的效率。
MATLAB语言具有以下特点:
(1)起点高。每个变量代表一个矩阵,可以有n?m个元素,其中每个元素都看作复数,且所有的运算都对矩阵和复数有效。
(2)人机界面适合科技人员。这体现在三个方面:第一,语言规则和笔算式相似,易写易读;第二,矩阵行数列数无需定义,输入数据的行列数就决定了它的阶数;第三,键入算式立即得结果,无需编译,若有错误立即作出反应,便于编程都马上改正。
(3)强大而简易的作图功能。MATLAB能根据输入数据自动确定坐标绘图,能规定多种坐标系,能绘制三维坐标中的曲线和曲面,还可设置不同颜色、线型和视角等。如果数据齐全,通常只需一条命令即可出图。
(4)智能化程度高。MATLAB在绘图时自动选择最佳坐标,做数值积分时,自动按精度选择步长,而且自动检测和显示程序错误的能力强,易于调试。
(5)功能丰富,可扩展性强。MATLAB软件包括基本部分和专业扩展两大部分。基本部分包括矩阵的运算和各种变换、代数和超越方程的求解、数据处理和傅里叶变换、数值积分等等。扩展部分称为工具箱,实际上是用MATLAB的基本语句编成的各种子程序集,用于解决某一方面的专门问题或实现某一类新的算法,现在已经有控制系统、信号处理、图像处理、系统辨识、模糊集合、神经元网络和小波分析等数十个工具箱,并且还在继续发展中。
4.2 MATLAB的功能
MATLAB之所以能成为世界流行的科学计算与数学应用软件,是因为它有着以下强大的功能:
19
学士学位论文
(1)高质量、强大的数值计算功能。MATLAB汇集了大量常用的科学和工程计算方法,从各种函数到复杂运算,其出色的数值计算功能是优于其他数学应用软件的重要原因。
(2)数据分析和科学计算可视化功能。在科学计算和工程应用中,经常需要分析大量的原始数据和数值计算结果,MATLAB将这些数据以图形的方式显示出来,使数据间的关系清晰明了。
(3)强大的符号计算功能。MATLAB能够解决在数学科学、应用科学、和工程计算领域中遇到的符号计算问题。
(4)强大的非线性动态系统建模和仿真功能。MATLAB提供了一个模拟动态系统的交互式程序Simulink,允许用户在屏幕上绘制框图来模拟一个系统,并能动态地控制该系统。
(5)灵活的程序接口功能。MATLAB提供了方便的应用程序接口(API),用户可以在MATLAB环境下直接调用已经编译过的C和Fortran子程序,可以在MATLAB和其他应用程序之间建立客户机/服务器关系。同样, 在C和Fortran程序中,也可以调用MATLAB的函数或命令,使得这些语言可以充分利用MATLAB强大矩阵运算功能和方便的绘图功能。
(6)文字处理功能。MATLAB Notebook能成功地将MATLAB与文字处理系统Microsoft Word集成一个整体,为用户进行科学计算、工程设计和文字处理等营造了一个统一的工作环境。
4.3 离散余弦变换的MATLAB实现
MATLAB图像处理工具箱提供的DCT函数有3个,分别是dct2、dctmtx和idct2。 (1)dct2
dct2函数采用基于FFT的算法,主要用于实现较大输入矩阵的离散余弦变换。其语法格式为:
B=dct2(A) B=dct2(A,m,n) B=dct2(A,[m n])
B=dct2(A)返回图像A的二维离散余弦变换值,它的大小与A相同,且各元素为离散余弦变换的系数。
B=dct2(A,m,n)或B=dct2(A,[m n])表示在对图像A进行二维离散余弦变换之前,先将图像A补零到m?n。如果m和n比图像A小,则进行变换之前,将图像A进行剪切。
(2)dctmtx
Dctmtx函数主要用于实现较小输入矩阵的离散余弦变换。其语法格式为: D=dctmtx(M)
20
学士学位论文
D=dctmtx(M)返回M×M大小的DCT矩阵。其形式为
1? k?0?M? (5-1) Dkm???2cos?2m?1?k? 1?k?M?1,0?m?M?1?2M?M设A是一个M×M大小的矩阵,则DA表示A的列向量的一维离散余弦变换,而D?A(D?表示D的转置)表示A的列向量的一维逆离散余弦变换。要实现A的二维离散余弦变换,只需计算DAD?。这种计算有时会比利用函数dct2更快,特别是计算大量小的相同尺寸DCT时,矩阵D只需计算一次,因而速度快。
(3)idct2
idct2函数可以实现图像的二维逆离散余弦变换,其语法格式为: B=idct2(A) B=idct2(A,m,n) B=idct2(A,[m n])
B=idct2(A)计算矩阵A的二维逆离散余弦变换,返回图像B的大小与A相同。 B=idct2(A,m,n)或H=idct2(A,[m n])表示在对矩阵A进行二维逆离散余弦变换之前,先将矩阵A补零至m?n。如果m和n比矩阵A小,则进行变换之前,先对矩阵A进行剪切操作,返回图像大小为m?n。
下面将图 5.1所示的一幅图像进行离散余弦变换,可以注意到图像能量的绝大部分位于变换矩阵的左上角,结果如图 5.1(b)所示。然后,将DCT变换值小于10的系数设为0,然后利用idct2函数重构图像,其结果如图 5.1(c)所示。
(a)原图像
(b)执行DCT的结果
(c)对压缩后的图像重构的结果
图 5.1 基于DCT的图像压缩全过程
程序如下:
RGB=imread('lena.tif');
I=rgb2gray(RGB); J=dct2(I);
imshow(log(abs(J)),[]),colormap(jet(64)),colorbar
21