基于MATLAB图象压缩技术.docx
- 文档编号:24337546
- 上传时间:2023-05-26
- 格式:DOCX
- 页数:27
- 大小:37.87KB
基于MATLAB图象压缩技术.docx
《基于MATLAB图象压缩技术.docx》由会员分享,可在线阅读,更多相关《基于MATLAB图象压缩技术.docx(27页珍藏版)》请在冰豆网上搜索。
基于MATLAB图象压缩技术
湖南安全技术职业学院
设计(论文)题目:
基于MATLAB图象压缩技术
学生姓名郭红斌
专业班级电信0601班
指导老师夏旭
系主任罗文钦
评阅人
2009年5月6日
目录
摘要3
Abstract4
第一章概述5
1.1图象压缩简介5
1.1.1图像压缩的概念5
1.1.2图像压缩的基本原理5
1.1.3图像压缩基本方法5
1.1.4图像压缩的主要目标6
1.2MATLAB软件简介7
1.3研究目的7
第二章理论分析9
2.1离散余弦变换9
2.2图象编码10
2.2.1图象的信息量度量10
2.2.2数字图象的信息冗余11
2.2.3图像的有损编码和无损编码12
2.2.4哈夫曼编码技术12
第三章程序实现14
3.1程序实现14
3.2重要函数介绍18
结论20
参考文献21
致谢22
摘要
本文通过阐述MATLAB在图像压缩研究方面的应用,探讨基于哈夫曼编码技术的图像压缩的MATLAB实现和基于小波的图像压缩技术。
MATLAB软件使用MATLABR2007a版本,并且通过计算机实验证明了经过离散变换和哈夫曼编码的图像在实现高压缩率的情况下能够保证很好的图像质量,具有较好的视觉效果。
关键词:
MATLABR2007a;图像压缩;离散变换;哈夫曼编码
Abstract
Inthispaper,MATLABonresearchinimagecompressionapplications,Huffmancodingtoexploretechnology-basedimagecompressionandtheMATLABrealizationofimagecompressionbasedonwavelettechnology.MATLABR2007ausingMATLABsoftwareversion,andbycomputeraftertheexperimentprovedthatwavelettransformandHuffmancodingtoachievehighimagecompressionratiointhecircumstancestoensuregoodimagequality,withbettervisualeffects.
Keywords:
MATLABR2007a;ImageCompression;WaveletTransform;Huffmancoding
第一章概述
1.1图象压缩简介
1.1.1图像压缩的概念
图像数据压缩是按照某种方法,从给定的图像信源中推出简化的数据表示,它是通过减少图像信号空间量的方法使信号能安排到给定的样本中,即去掉冗余度但不减少信息量。
1.1.2图像压缩的基本原理
去除多余数据.以数学的观点来看,这一过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码.
图像数据之所以能被压缩,就是因为数据中存在着冗余。
图像数据的冗余主要表现为:
图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。
数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。
由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。
信息时代带来了“信息爆炸”,使数据量大整,因此,无论传输或存储都需要对数据进行有效的压缩。
在遥感技术中,各种航天探测器采用压缩编码技术,将获取的巨大信息送会地面。
图像压缩是数据压缩技术在数字图像上的应用,它的目的是减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据。
1.1.3图像压缩基本方法
图像压缩可以是有损数据压缩也可以是无损数据压缩。
对于如绘制的技术图、图表或者漫画优先使用无损压缩,这是因为有损压缩方法,尤其是在低的位速条件下将会带来压缩失真。
如医疗图像或者用于存档的扫描图像等这些有价值的内容的压缩也尽量选择无损压缩方法。
有损方法非常适合于自然的图像,例如一些应用中图像的微小损失是可以接受的(有时是无法感知的),这样就可以大幅度地减小位速。
无损图像压缩方法有:
行程长度编码
熵编码法
如LZW这样的自适应字典算法
有损压缩方法有:
将色彩空间化减到图像中常用的颜色。
所选择的颜色定义在压缩图像头的调色板中,图像中的每个像素都用调色板中颜色索引表示。
这种方法可以与抖动(en:
dithering)一起使用以模糊颜色边界。
色度抽样,这利用了人眼对于亮度变化的敏感性远大于颜色变化,这样就可以将图像中的颜色信息减少一半甚至更多。
变换编码,这是最常用的方法。
首先使用如离散余弦变换(DCT)或者小波变换这样的傅立叶相关变换,然后进行量化和用熵编码法压缩。
分形压缩(en:
Fractalcompression)。
1.1.4图像压缩的主要目标
就是在给定位速(bit-rate)或者压缩比下实现最好的图像质量。
但是,还有一些其它的图像压缩机制的重要特性:
可扩展编码(en:
Scalability)通常表示操作位流和文件产生的质量下降(没有解压缩和再压缩)。
可扩展编码的其它一些叫法有渐进编码(en:
progressivecoding)或者嵌入式位流(en:
embeddedbitstreams)。
尽管具有不同的特性,在无损编码中也有可扩展编码,它通常是使用粗糙到精细像素扫描的格式。
尤其是在下载时预览图像(如浏览器中)或者提供不同的图像质量访问时(如在数据库中)可扩展编码非常有用有几种不同类型的可扩展性:
质量渐进(en:
Qualityprogressive)或者层渐进(en:
layerprogressive):
位流渐进更新重建的图像。
分辨率渐进(en:
Resolutionprogressive):
首先在低分辨率编码图像,然后编码与高分辨率之间的差别。
成分渐进(en:
Componentprogressive):
首先编码灰度数据,然后编码彩色数据。
感兴趣区域编码,图像某些部分的编码质量要高于其它部分,这种方法可以与可扩展编码组合在一起(首先编码这些部分,然后编码其它部分)。
元数据信息,压缩数据可以包含关于图像的信息用来分类、查询或者浏览图像。
这些信息可以包括颜色、纹理统计信息、小预览图像以及作者和版权信息。
1.2MATLAB软件简介
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是矩阵实验室(MatrixLaboratory)的简称,和Mathematica、Maple并称为三大数学软件。
它在数学类科技应用软件中在数值计算方面首屈一指。
MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。
在新的版本中也加入了对C,FORTAN,C++,JAVA的支持。
可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
20世纪70年代,美国新墨西哥大学计算机科学系主任CleveMoler为了减轻学生编程的负担,用FORTRAN编写了最早的MATLAB。
1984年由Little、Moler、SteveBangert合作成立了的MathWorks公司正式把MATLAB推向市场。
到20世纪90年代,MATLAB已成为国际控制界的标准计算软件。
MATLAB的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用MATLAB函数集)扩展了MATLAB环境,以解决这些应用领域内特定类型的问题。
1.3研究目的
图像是信息传递的一种重要媒体,为了使有限的符号表达更多的信息量,图象压缩既非常必要,也有可能,故此产生了各种各样的图象压缩方法,一般原始图像中存在很大的冗余度(如由相邻象素的相关性造成);或者是用户由于种种原因,而对原始图像的信息不全都感兴趣;或者是当信道的分辨率不及原始图像的分辨率时,降低输入原始图像分辨率对输出图像的分辨率影响不大;或者是大量图像信息(如:
卫星遥感图像)的短时传输处理.所有这一切都要求在图象处理过程中,必须丢掉大量无用信息,保留有用部分,用尽可能少的字节数来表示原始图像,以提高图像传输的效率和减少图像的存储容量。
大数据量的图像信息会给储存器的储存容量,通信干线信道的带宽以及计算机的处理速度增加极大的压力。
单纯靠增加储存容量,提高信道带宽以及计算机的处理速度等方法来解决这个问题是不现实的,这时就要考虑压缩。
因此,图像数据在传输和储存中,数据的压缩都是必不可少的。
随着网络与多媒体技术的普及应用,大容量图像传输的应用需求越来越普及。
图象数字化之后,数字图像的数据量是非常大的,存贮时会占用大量空间,在数据传输时误码率非常高,网络的扩容和用户在线人数的增加,使得网络带宽资源越来越紧张,这对通信信道及网络都造成很大压力。
另一个原因是图像、音频和视频这些媒体具有很大的压缩潜力。
因为在多媒体数据中,存在着空间冗余、时间冗余、结构冗余、知识冗余、视觉冗余、图像区域的相同性冗余、纹理的统计冗余等。
它们为数据压缩技术的应用提供了可能的条件。
第二章理论分析
2.1离散余弦变换
在MATLAB图像处理工具箱中,dct2函数用于计算机图像的二维离散余弦变换(DiscreteCosineTransform)简称DCT。
大多数情况下,DCT用于压缩图像,JPEG图像格式就采用了DCT算法。
离散余弦变换的基本概念
假设矩阵A的大小为M×N,其二维离散余弦变换的定义为,
Bp,q=apaq
Amncos
cos
其中Bpq称为矩阵A的DCT系数。
在MATLAB中,矩阵的下标从1开始而不是从0开始,所以A(1,1)和B(1,1)分别代表上面的A00和B00。
DCT是一种可逆变换,它的逆变换定义为:
Ap,q=apaq
Amncos
cos
上式的含义是任何M×N的矩阵A都可以表示为一系列函数的和。
这些函数称为DCT的基函数。
DCT系数Bpq则被看作是每个基函数的权。
水平方向频率由左向右增加,垂直方向频率由上到下增加。
常数值的基函数位于图像的左上角,被称为直流基函数,对应的DCT系数B00常被称为是直流系数。
MATLAB图像处理工具箱提供的DCT函数有3个,分别是dct2、dctmtx和idct2。
(1)dct2
dct2函数采用基于FFT的算法,主要用于实现较大输入矩阵的离散余弦变换。
基语法格式为:
B=dct2(A)
B=dct2(A,m,n)
B=dct2(A,[mn])
B=dct2(A)返回图像A的二维离散余弦变换值,它的大小与A相同,且各元素为离散余弦变换的系数B(k1,k2)。
B=dct2(A,m,n)或B=dct2(A,[mn])表示在对图像A进行二维离散余弦变换之前,先将图像A补零至m×n。
如果m和n比图像A小,则进行变换之前,将图像A进行剪切。
(2)dctmtx
Dctmtx函数主要用于实现较小输入矩阵的离散余弦变换。
其语法为:
D=dctmtx(M)
D=dctmtx(M)返回M×M大小的DCT矩阵。
设A是一个M×M大小的矩阵,则D*A表示A的列向量的一维离散余弦变换,而D'*A(D'表示D的转置)表示A的列向量的一维逆离散余弦变换。
要实现A的二维离散余弦变换,只需要计算D*A*D'。
这种计算有时会比利用函数dct2更快,特别是计算大量小的相同尺寸DCT时,矩阵D只需要计算一次,因而速度快。
(3)idct2
idct2函数可以实现图像的二维逆离散余弦变换,其语法格式为:
B=idct2(A)
B=idct2(A,m,n)
B=idct2(A,[mn])
B=idct2(A)计算矩阵A的二维逆离散余弦变换,返回图像B的大小与A相同。
B=idct2(A,m,n)或B=idct2(A,[mn])表示在对矩阵A进行二维逆离散余弦变换之前,先将矩阵A补零到m×n。
如果m和n比矩阵A小,则进行变换之前,先对矩阵A进行剪切操作,返回图像大小为m×n。
2.2图象编码
2.2.1图象的信息量度量
数字图像形成的关键步骤是在空间(X,Y)和光亮度F上都进行离散化,通常把这一过程叫做采样与量化。
采样与量化处理是决定最终的数字图像与原始图像接近的两个关键因素,也关系到数据量的大与小。
1.采样
如果对图像进行等间距采样,即在X和Y主向上取N个点,并被排成N×N的矩阵,矩阵中的每一个点为离散化的亮度值F(X,Y),它对应于数字图像中的一个元素,称为像素。
采样点的多少直接影响到数字图像与原图像的失真度,而如何表示每一个采样点的亮度值也是导致最终数字图像质量好坏的关键因素。
2.量化
量化过程就是用有限的离散量代替无限的连续的模拟量的一对多的映射过程。
图像的亮度F是连续变化的数值,F(X,Y)的光亮度L表示为:
Lmin≤L≤Lmax。
[Lmin,Lmax]称为灰度级范围。
把[Lmin,Lmax]分成K个等间距的区间,每个区间对应一个亮度值Fi,这样就有K个亮度值,称之为灰度级K。
为了计算方便,灰度级K用2的整数幂表示,即K=2m,m=1,2,…8。
当m=6时,K=26=64个灰度级。
当F(X,Y)的光亮度落在第i个区域中时,就被合入到区域的中心,量化结果就是这个区域的灰度值Fi。
采样点N与量化灰度级K的选择确定了数字图像的质量,也决定了数字图像所占有计算机存储空间的大小。
3.均匀采样与非均匀采样
上面提到的在(X,Y)方向上等到间距的采样成为均匀采样,而非均匀则是在图像细节少的区域采用较稀疏的采样,在细节比较多的区域采用密集采样,这样获得的图像信息量没有减少,但是数据量却有效地降低了。
需要指出的是,分配采样点的时候,应该在灰度变化的边界标上非均匀采样标志。
4.线性量化和非线性量化
将表示数字图像的灰度级范围分为等间隔的子区间叫做线性量化,而非线性量化是指将灰度级范围分为不等间隔的子区间。
与均匀采样和非均匀采样的概念一致,对灰度级出现频率比较高的区间,量化区间变窄,而别一些灰度级出现频率较低的范围量化区间变宽。
5.图形的信息量度量
图像的信息量主要取决于图像的分辩率和像素的位深度。
图像的分辩率由(X,Y)方向的采样点数决定。
如果(X,Y)方向等间隔采样N个点,则图像的分辩率为N×N,像素的位深度就是由量化级确定的。
如果用256个灰度级表示单色调图像,则每一个像素的位深度为8位。
2.2.2数字图象的信息冗余
冗余是指信息中存在着多余的数据。
数字化后的图像就存在着大量的信息冗余,分为空间冗余、结构冗余、信息冗余和视觉冗余等。
1.视觉冗余
人的眼睛对图像细节和颜色的辨认有一个极限,人的视觉特性决定了他最多只能分辨出2的16次幂种颜色,而彩色图像一般每个像素用24位表示,则可表示出2的24次幂种颜色,由此南昌来的数据冗余称为视觉冗余。
2.空间冗余
图像中的大部分景物,其表面颜色都是均匀的、连续的。
把图像数字化成像素点的矩阵后,大量相邻像素的数据是完全一样或十分接近的,这就是空间冗余。
2.2.3图像的有损编码和无损编码
图像编码是指按照一定的格式存储图像数据的过和,而编码技术则是研究如何在满足一定的图像保真条件下,压缩表示原始图像的编码方法。
目前有很多流行的图像格式标准,如BMP、PCX、TIFF、GIF、JPEG等等,采用不同的编码方法,一般可以将其分为有损编码和无损编码两类。
1.无损编码
无损编码指对图像数据进行了无损压缩,解压后重新构造的图像与原始图像之间完全相同。
行程编码就是无损编码的一个实例,其编码原理是在给定的数据中寻找连续重复的数值,然后用两个数值(重复数值的个数,重复数值本身)取代这些连续的数值,以达到数据压缩的目的运用此方法处理拥有大面积色调一致的图像时,可达到很好的数据压缩效果。
常见的无损压缩编码有:
●哈夫曼编码
●算术编码
●行程编码
●Lempelzev编码。
2.有损编码
有损编码是指对图像进行有损压缩,致使解码后重新构造的图像与原图像之间存在着一定的误差。
有损压缩利用了图像信息本身包含的许多冗余。
针对人类的视觉对颜色不敏感的生理特性,对丢失一些颜色信息所引起的细微误差不易被发现的特点来删除视觉冗余。
又由于图像信息之间存在着很大的相关性,存储图像数据时,并不是以像素为基本单位,而是存储图像中的一些数据块,以删除空间冗余。
由于有损压缩一般情况下可获得较好的压缩比,因此在对图像的质量要求不苛刻的情况下是一种理想的编码选择,常见的有损编码有:
●预测编码,如DPCM,运动补偿编码
●频率域方法,如正方变换编码,子带编码
●空间域方法,如统计分块编码
●模型方法编码,如分形编码,模型基编码
●基于重要性编码,如滤波,子采样,比特分配。
2.2.4哈夫曼编码技术
哈夫曼编码是运用信息熵原理的一种无损编码。
压缩方法是利用变长编码将图像中出现概率比较大的灰度值赋予短码字,而对出现概率小的灰度值赋予长码字,从而达到压缩数据的目的。
例如,一幅40个像素的图像,具有5个灰度级A、B、C、D、E,如果40个像素中,A级具有15个像素,B级具有7个像素,C级具有7个像素,D级具有6个像素,E级具有5个像素。
对每个像素编码就需要3位(log25≈3),40个像素需要120位。
则每个像素平均所占位数是2.1898位,40个像素所用的总位数是40×2.1895=87.84≈90,这样就产生了1.3/1的压缩比。
哈夫曼编码方法可以归纳为以下几步:
1.将图像灰度按照概率大小排列;
2.把两个最小的概率加起来作为新的概率;
3.重得
(1)、
(2),直到概率之和达到1为止;
4.每次合并符号时,将被合并的符号赋以1和0(大概率赋1,小概率赋0,或相反);
5.寻找从每一信源符号到概率为1处的路径,记录下路径上的1和0;
6.对每一符号写出“1”、“0”序列,序列的顺序是从树根到信源符号节点。
如果按此步骤对上面所给出的例子进行哈夫曼编码,各个灰度级的出现概率从大到小依次为:
A-0.375,B-0.175,C-0.175,D-0.150,E-0.125。
哈夫曼编码的特点:
利用哈夫曼编码压缩图像数据时,必须读取图像数据两次。
第一次读取数据计算每个数据出现的频率,并对各数据出现的频率以二叉树方式进行排序,在排序过和中获取各数值的编码值。
将这些长度不等的编码值与对应的图像数据放置到一个转换表格中。
第二次读取数据是利用转换表格中的编码值取代图像数据存入图像文件中。
此外哈夫曼编码还具有以下特点:
(1)哈夫曼编码构造的数据不一定是唯一的。
原因是在给两个最小概率的图像灰度值进行编码时,可以是大概率为,小概率为何,也可以相反。
而当两个灰度值的概率相等时,“1”、“0”的分配也是随机的,这就造成了编码的不唯一性。
(2)当图像灰度值分布不是很均匀时,哈夫曼编码的效率是就高。
当信源概率是2的负幂次方时,编码效率为100%。
而在图像灰度值的概率分布比较均匀时,哈夫曼编码的效率就很低。
(3)哈夫曼编码需要先计算出图像数据的概率特性形成编码表后,才能对图像数据编码,因此哈夫曼编码缺乏构造性,即不能使用某种数学模型建立信源符号与编码之间的对应关系,而必须通过查表方法,建立起他们之间的对应关系。
如果信源符号很多,编码表就会很大,这必将影响到存储、编码和传输。
通常可以在经验基础上预先提供哈夫曼编码表,但性能将有所下降。
第三章程序实现
3.1程序实现
经过理论分析后,下面用MATLAB实现哈夫曼编码。
程序将输入的数据(数字矩阵)进行哈夫曼编码,然后反编码,判断是否是无失真编码,最后给出压缩前后存储空间的比较。
%%%下面用MATLAB实现哈夫曼编码的例程(以子函数形式给出):
clearall;
fprintf('Readingdata....')
data=imread('E:
\temp\originalimage(holl).bmp')
data=uint8(data);%读入数据,并将数据限制为unit8型
fprintf('Done!
\n')
fprintf('Comqressingdata...')
[zipped,info]=norm2huff(data);%进行压缩编码
fprintf('Done!
\n')
fprintf('Decomqressingdata...')
unzipped=huff2norm(zipped,info);%进行解压缩
fprintf('Done!
\n')
isOK=isequal(data(:
),unzipped(:
))%显示压缩效果
whosdatazippedunzipped
%%%%%%%%%%norm2huff%%%%%%%%%%
%NORM2HUFF哈夫曼编码器
%对于输入向量,NORM2HUFF(X)返回向量的哈夫曼编码后的码串
%矩阵用X(:
)形式输入
%输入限制为unit8格式,输出为unit8的序列
%[….,info]返回解码需要的解码信息
%INFO.pad=最后添加的比特数
%INFO.huffcodes=Huffman码字
%INFO.ratio=压缩率
%INFO.length=原始数据长度
%INFO.maxcodelen=最大码长
%function[zipped,info]=norm2huff(vector)
if~isa(vector,'unit8'),
error('inputargumentmustbeaunit8vector');
end%保证输入为unit8的数据
vector=vector(:
)';%将输入向量转换为行向量
f=frequency(vector);%计算个元素出现的概率
simbols=find(f~=0);%寻找数出现的所有元素
f=f(simbols);
[f,sortindex]=sort(f);%将元素按照出现概率排列
simbols=simbols(sortindex);
len=length(simbols);
simbols_i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB 图象 压缩 技术