《MATLAB在数据压缩技术中的应用》由会员分享,可在线阅读,更多相关《MATLAB在数据压缩技术中的应用(14页珍藏版)》请在金锄头文库上搜索。
1、华东交通大学现代仿真技术大作业 1 MATLAB 在数据压缩技术中的应用 摘要 离散余弦变换(Discrete Cosine Tranform,简称 DCT)是一种与傅立叶变换紧密相关的数学运算。 在傅立叶级数展开式中, 如果被展开的函数式是偶函数,那么其傅立叶级数中只包含余弦项,再将其离散化可导出余弦变换,因此称之为离散余弦变换。时间域中信号需要许多数据点表示;在 x 轴表示时间,在 y 轴表示幅度。信号一旦用傅立叶变换转换到频率域,就只需要几点就可以表示这个相同的信号。如我们已经看到的那样,原因就是信号只含有少量的频率成分。这允许在频率域中只用几个数据点就可以表示信号, 而在时间域中表示则
2、需要大量数据点。 这一技术可以应用到彩色图像上。 彩色图像有像素组成, 这些像素具有 RGB彩色值。每个像素都带有 x,y 坐标,对每种原色使用8x8或者16x16矩阵。在灰度图像中像素具有灰度值,它的 x,y 坐标由灰色的幅度组成。为了在 JPEG 中压缩灰度图像,每个像素被翻译为亮度或灰度值。 关键词; 图像压缩算法 MATLAB 软件 DCT 压缩编码 华东交通大学现代仿真技术大作业 2 目录 摘要. 1 引言.错误!未定义书签。 第一章 基于 DCT 的图像压缩编码理论算法及 Matlab 仿真基础 . 3 1.1 图像压缩编码的概念. 3 1.2 图像压缩编码的一般框图. 3 第二章
3、 离散余弦变换(DCT) . 5 2.1 DCT 的定义. 5 2.2 DCT 和图像压缩. 5 2.2.1 dct2 . 5 2.2.2 idct2. 5 3.1 图像编码的分类. 6 3.2 无损编码. 6 3.2.1 行程编码(RLE) . 6 3.2.2 Huffman 编码 . 6 3.3 有损编码. 6 3.3.1 量化. 6 3.3.2 预测编码. 7 3.3.3 DCT 编码. 7 3.4 保真度准则. 7 3.4.1 客观保真度准则. 7 3.4.2 主观保真度准则. 8 第四章 MATLAB 仿真及效果 . 8 4.1 程序. 8 4.2 结果. 11 第五章 作业过程中遇
4、到的问题. 12 第六章 总结. 12 参考文献. 13 华东交通大学现代仿真技术大作业 3 引言 随着信息技术的发展,图像信息被广泛应用于多媒体通信和计算机系统中。但是图像具有庞大的数据量, 不便于存储和传输, 必须采用合适的方法对其进行压缩, 因此有必要对图像压缩编码标准进行研究。 本研究在介绍图像压缩原理的基础上,用 Matlab 65 对标准灰度图像进行压缩与重建,并分析实验结果,得出结论。 第一章 基于 DCT 的图像压缩编码理论算法及 Matlab 仿真基础 1.1 图像压缩编码的概念 压缩的理论基础是信息论。从信息论的角度来看,压缩就是去掉信息中的冗余,即保留不确定的信息,去掉确
5、定的信息(可推知的),也就是用一种更接近信息本质的描述来代替原有冗余的描述。这个本质的东西就是信息量(即不确定因素)。 1.2 图像压缩编码的一般框图 图像压缩的过程可以概括成图所示的三个步骤,原始图像经映射变换后的数据再经量化器和熵编码器成为码流输出。 (1)映射变换。其目的是通过映射改变图像数据的特性,使之更有利于压缩编码。 (2)量化器。在限失真编码中要对映射后的数据进行量化,若量化是对映射后的数据逐个的进行的,则称标准量化,若量化是成组的进行的,则称矢量量化,量化总会造成某些信息丢失,形成失真,即量化失真或量化噪声,为使失真小,应量化的精细,但压缩比就高不了,这是一对矛盾,应选用恰当的
6、量化级数和量化曲线形状来缓解这对矛盾,量化器的引入是图像编码产生失真的根源,在要求复原图像与原图完全一致的无失真编码器中必须不用量化器,但这样一来,压缩比难以提高,在多数应用中,存在少量失真并不可怕,只要把失真的程度和性质控制在允许的范围内,也就是把复原图像的主观质量控制在允许的程度内,就可以在满足应用要求的前提下提高压缩比,值得注意的是,对于同样的量化失真,不同的映射变换和反变换反映不同性质的复原图像的失真,人眼对某些性质的失真敏感而对另一些性质的失真不敏感。 (3)熵编码器。这一步是用来消除符号编码冗余度的,它一般不产生失真,理想华东交通大学现代仿真技术大作业 4 的情况是编出的码流的平均
7、码长等于量化后数据的信息熵, 常用的编码方法有许多种, 例如分组码、 行程码(RLC)和变长码(VLC)、 不分组码以及算术码(Arithmatic Coing 等)。行程码传输的是数据行程长度而不是数据本身,例如要传 108 个 0,用行程码是改为传行程码标记和行程长度 1080 在变长码中最常用的是霍夫曼(Hufman)码,基本原则是对出现概率大的数值用短码来编, 对出现概率小的数值用长码来编,从而使平均码长减小。降低码率,在实际编码器中常把 RLc 和Hufman 码结合起来,称为霍夫曼行程码。 1.3 MATLAB 仿真实现 根据压缩编码算法,要将一幅灰度图像进行压缩编码,首先把图像分
8、成 88的像素块,分块进行 DCT 变换后,根据标准量化表 Es对变换系数进行量化后,再对直流系数(DC)进行预测编码,然后根据标准的 Huffman 码表蜘进行熵编码,输出压缩图像的比特序列, 实现了图像压缩。 在接收端, 则经过 Huffman 熵解码、DC 系数和 AC 系数可变长解码、反量化后,再进行反 DCT 变换得到重建图像。对一幅图像进行编解码的 MATLAB 程序流程图: 开始 输入图片 分成 8*8 像素块,DCT 变换 输入量化表,对变换系数进行量化 对变换系数进行量化 选择一副图对其进行压缩变换 反量化 反 DCT 变换 显示所选图像的信噪比 结束 华东交通大学现代仿真技
9、术大作业 5 第二章 离散余弦变换(DCT) 2.1 DCT 的定义 DCT 变换利用傅立叶变换的性质 采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换, 变后仅包含余弦项 所以称之为离散余弦变换。 2.2 DCT 和图像压缩 DCT 编码属于正交变换编码方式用于去除图像数据的空间冗余。变换编码就是将图像光强矩阵(时域信号)变换到系数空间(频域信号)上进行处理的方法。 在空问上具有强相关的信号, 反映在频域上是在某些特定的区域内能量常常被集中在一起, 或者是系数矩阵的分布具有某些规律。 我们可以利用这些规律在频域上减少量化比特数,达到压缩的目的。图像经 DCT 变换以后,DC
10、T 系数之间的相关性已经很小。而且大部分能量集中在少数的系数上,因此,DCT 变换在图像压缩中非常有用,是有损图像压缩国际标准 JPEG 的核心。从原理上讲可以对整幅图像进行 DCT 变换,但由于图像各部位上细节的丰富程度不同,这种整体处理的方式效果不好。为此,发送者首先将输入图像分解为 8x8 或 16x16的块,然后再对每个图像块进行二维 DCT 变换,接着再对 DCT 系数进行量化、编码和传输;接收者通过对量化的 DCT 系数进行解码,并对每个图像块进行的二维 DCT 反变换最后将操作完成后所有的块拼接起来构成一幅单一的图像。对于一般的图像而言,大多数 DCT 系数值都接近于 0,町以去
11、掉这些系数而不会对重建图像的质量产生霞大影响。此,利用 DCT 进行圈像压缩确实可以节约大量的存储空间在宴验中,先将输入的原始 lena 图像分为 8x8 的块,然后再对每个块进行二维 DCT 变换。MATLAB 图像处理上具箱中提供的二维 DCT 变换及 DCT 反变换函数如下。 2.2.1dct2 dct2 实现图像的二维离散余弦变换其语法格式为: (1)B=dct2(A) 返回图像 A 的二维离散余弦变换值,其大小与 A 相同且各元素为离散余弦变换的系数 B(K1,k2)。 (2)B=dct2(A,in,n)或 B=dct2(A,m,n) 如果 m 和 n 比图像 A 大,在对图像进行二
12、维离散余弦变换之前,先将图像 A 补零至 mxn 如果 m 和 n 比图像 A 小。则进行变换之前,将图像A 剪切。 2.2.2 . idct2 idct2 可以实现图像的二维离散余弦反变换,其语法格式为: B=idct2(A);B=idct2(A,m,n)或 B=idct2(A,m,n)。 华东交通大学现代仿真技术大作业 6 第三章 图像编码 3.1 图像编码的分类 图像编码压缩的方法目前有很多,其分类方法根据出发点不同而有差异。根据解压重建后的图像和原始图像之间是否具有误差(对原图像的保真程度) ,图像编码压缩分为无误差(亦称无失真、无损、信息保持)编码和有误差(有失真或有损)编码两大类。
13、无损压缩(冗余度压缩、可逆压缩) :是一种在解码时可以精确地恢复原图像,没有任何损失的编码方法,但是压缩比不大,通常只能获得 15 倍的压缩比。 用于要求重建后图像严格地和原始图像保持相同的场合, 例如 复制、 保存十分珍贵的历史、文物图像等;有损压缩(不可逆压缩) :只能对原始图像进行近似的重建, 而不能精确复原,适合大数工用于存储数字化了的模拟数据,压缩比大,但有信息损失。 3.2 无损编码 3.2.1 行程编码(RLE) 在一个逐行存储的图像中, 具有相同灰度值的一些象素组成的序列称为一个行程。在编码时,对于每个行程只存储一个灰度值的码, 再紧跟着存储这个行程的长度。这种按照行程进行的编
14、码被称为行程编码(Run Length Encoding) 。行程编码对于仅包含很少几个灰度级的图像,特别是二值图像,比较有效。 3.2.2 Huffman 编码 Huffman 编码是 50 年代提出的一种基于统计的无损编码方法, 它利用变长的码来使冗余量达到最小。 通过一个二叉树来编码, 使常出现的字符用较短的码代表, 不常出现的字符用较长的码代表。 静态 Huffman 编码使用一棵依据字符出现的概率事先生成好的编码树进行编码。 而动态 Huffman 编码需要在编码的过程中建立编码树。 由于 Huffman 编码所得到的平均码字长度可以接近信源的熵, 因此在变长编码中是最佳的编码方法,
15、故也称为熵编码。 具体编码方法是:把输入元素按其出现概率的大小顺序排列起来,然后把两个具有最小概率的元素之概率加起来;把该概率之和同其余概率大小顺序排队,然后再把两个最小概率加起来,再重新排队;重复,直到最后得到和为 1的根节点。 3.3 有损编码 3.3.1 量化 将图像用较少的灰度级别来表示是最简单的减小数据量的方法, 这种方法就华东交通大学现代仿真技术大作业 7 是标量量化方法。更一般的情况是,针对连续量的采样过程,量化是用有限个状态来表示连续值。 3.3.2 预测编码 预测编码根据数据在时间和空间上的相关性,根据统计模型利用已有样本对新样本进行预测, 将样本的实际值与其预测值相减得到误
16、差值, 再对误差值进行编码。由于通常误差值比样本值小得多,因而可以达到数据压缩的效果。 模拟量到数字量的转换过程是脉冲编码调制过程 PCM ,也称 PCM 编码。对于图像而言,直接以 PCM 编码,存储量很大。预测编码可以利用相邻象素之间的相关性, 用前面已出现的象素值估计当前象素值, 对实际值与估计值的差值进行编码。常用的一种线性预测编码方法是差分脉冲编码调制DPCM。 预测编码通常不直接对信号编码,而是对预测误差编码。当预测比较准确,误差较小时,即可达到编码压缩的目的。这种编码称之为差分脉冲编码调制(DPCM) ,上图是原理框图。在该系统中,xN 为 tN 时刻的亮度取样值。预测器根据 t
17、N 时刻之前的样本 x1,x2,xN-1 对 xN 作预测,得到预测值 xN。xN 与xN之间的误差为 量化器对eN 进行量化得到 eN。 编码器对 eN 进行编码发送。接收端解码时的预测过程与发送端相同,所用预测器亦相同。当 xN 足够小时,输入信号 xN 和 DPCM 系统的输出信号几乎一致。 3.3.3DCT 编码 DCT 变换是图像压缩标准中常用的变换方法,如JPEG 标准中将图像按 8x8分块利用 DCT 变换编码实现压缩。 3.4 保真度准则 在图像压缩编码中,解码图像与原始图像可能会差异,因此,需要评价压缩后图像的质量。描述解码图像相对原始图像偏离程度的测度一般称为保真度(逼真度
18、)准则。常用的准则可分为两大类:客观保真度准则和主观保真度准则。 3.4.1 客观保真度准则 最常用的客观保真度准则是原图像和解码图像之间的均方根误差和均方根信噪比两种。 令 f(x,y)代表原图像, 代表对 f(x,y)先压缩又解压缩后得到的 f(x,y)的近似,对任意 x 和 y,f(x,y)和 f(x,y)之间的误差定义为: 若 f(x,y)和 f(x,y) 均为 MN,则它们之间均方根误差为: 华东交通大学现代仿真技术大作业 8 如果将 f(x,y) 看作原始图 f(x,y)和噪声信号 e(x,y)的和,那么解压图像的均方信噪比 SNR 为: 如果对上式求平方根,就得到均方根信噪比。
19、3.4.2 主观保真度准则 尽管客观保真度准则提供了一种简单、方便的评估信息损失的方法,但很多解压图最终是供人观看的。事实上,具有相同客观保真度的不同图像,在人的视觉中可能产生不同的在视觉效果。 这是因为客观保真度是一种统计平均意义下的度量准则,对于图像中的细节无法反映出来。而人的视觉系统具有独特的特性,能够觉察出来。这种情况下,用主观的方法来测量图像的质量更为合适。1 种常用的方法是对 1 组(不少于 20 人)观察者显示图像,并将他们对该图像的评分取平均,用来评价一幅图像的主观质量。 第四章 MATLAB 仿真及效果 4.1 程序 %程序功能:模拟DCT编码解码过程,生成带“块效应”的图像
20、 %步骤:灰度图像DCT量化反量化IDCT I=imread(cameraman.tif) I=im2double(I) %转换图像矩阵为双精度型。 T=dctmtx(8) %产生标准二维DCT变换中的矩阵 8*8 %计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数,DCT变换公式:正变换K=T*P*T,逆变换P=I*K*I a1=16 11 10 16 24 40 51 61;%亮度量化表 12 12 14 19 26 58 60 55; 14 13 16 24 40 57 69 56; 14 17 22 29 51 87 80 62; 18 22 37 56 68 109 1
21、03 77; 华东交通大学现代仿真技术大作业 9 24 35 55 64 81 104 113 92; 49 64 78 87 103 121 120 101; 72 92 95 98 112 100 103 99 ; %分块做DCT变换(8*8) for i=1:8:200 %用到了for循环的嵌套 for j=1:8:200 %循环内容 P=I(i:i+7,j:j+7); K=T*P*T; I2(i:i+7,j:j+7)=K; K=K./a1; %量化 K(abs(K)0.03)=0;%将DCT变换值小于0.03的元素设为0 I3(i:i+7,j:j+7)=K; end end figur
22、e; imshow(I2); title(DCT变换后的频域图像);%显示DCT变换后的频域图像 %分块做DCT反变换(8*8) for i=1:8:200 for j=1:8:200 P=I3(i:i+7,j:j+7).*a1;%反量化 K=T*P*T; I4(i:i+7,j:j+7)=K; end end figure; imshow(I4); title(复原图像); imwrite(I4,复原图像6.jpg); %对图像I的每一个8*8数据应用矩阵式P1* x*P2进行处理,其中P1=T,P2=T B=blkproc(I,8,8,P1*x*P2,T,T) mask=1 1 1 1 0
23、0 0 0 %二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个 1 1 1 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 B2=blkproc(B,8 8,P1.*x,mask) % 只保留DCT变换的10个系数 I2=blkproc(B2,8 8,P1*x*P2,T,T) %逆DCT变换,用来重建图像 华东交通大学现代仿真技术大作业 1 0 figure imshow(I) title(原始图像); figure
24、imshow(I2); title(压缩图像); figure imshow(dct2(I); figure mesh(dct2(I) %mesh函数是用来画三维网格表面 colorbar(horiz) 华东交通大学现代仿真技术大作业 1 1 4.2 结果 图1 图2 图3 图4 图5 华东交通大学现代仿真技术大作业 1 2 图6 第五章 作业过程中遇到的问题 (1)DCT 变换能够体现出能量的关系,但是它是怎么体现点与点的关系的? (2)在对已变换的数据做反变换的时候,它是怎么还原成原来的图片的? (3)为什么采用 8x8 的图像块? (4)图片加载到什么地方?是二维数组吗? 华东交通大学现
25、代仿真技术大作业 1 3 第六章 总结 通过做这次大作业以后才发现自己对 matlab 软件还不是很熟悉, 看到别的同学做的东西都是很复杂而且功能很强大, 而自己做的大作业却是相当的简单, 有时下一下真的很惭愧。但是反过来又想,不要管别人做的怎么样,我只要把自己所做的东西弄懂就可以了,反正我们都是在学知识,努力就行了。对于 DCT 的图像处理方法,我不是很懂,在网上查阅了一些资料,把网上的代码进行粗略的了解之后, 再对代码修改运行调试,最后再根据相关的理论知识对代码进行详细的分析。 通过这次大作业,自己又重新熟悉了 matlab 的一些功能,刚开始的时候本来想用 systemview 来仿真一
26、个通信系统的,但那软件不太会用,最后选择了直接用 matlab 来处理数据压缩技术的图片问题。 在将近一个多星期的 MATLAB 大作业过程中,我真的是受益匪浅。起初对图像处理的知识几乎没有,不知道图像的格式,不知道 DCT,很茫然,无从下手。刚开始我大量的查看网络,首先找一些图像处理的基本知识,从大量的知识中,挖掘有用的东西,近于课设有关的知识,比如信道,编码技术等等信息,一概过滤,最快的时间,找有用的知识。 华东交通大学现代仿真技术大作业 1 4 参考文献 1吕风军数学图象处理编程人门做一个自己的 Photosho 2阮秋奇数学图象处理学M北京:电子工业出版社,2001 3清源计算机工作室 ICuTLaB 高级应用图形及影像处理 4 罗倩玲JPEG 编码与矢量量化编码方法比较J电子测量技术 5张志涌精通 Matlab65版M3北京:北京航空航天 大学出版社,2003 6 钟玉琢,冼伟铨,沈洪编著多媒体技术基础及应用,清华大学出版社,2000 .忽略此处.