图像变换编码程序设计.doc_第1页
图像变换编码程序设计.doc_第2页
图像变换编码程序设计.doc_第3页
图像变换编码程序设计.doc_第4页
图像变换编码程序设计.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目 录摘 要I1 设计背景及要求11.1 设计背景11.2 设计要求22 图像的信息熵22.1 信息熵与图像熵22.2 图像熵的计算的 MTALAB实现33 基于DCT的JPEG图像压缩编码43.1 关于DCT变换及DCT系数4 3.1.1 DCT变换4 3.1.2 DCT 系数的量化5 3.1.3 DCT系数的性质53.2 程序设计63.2.1 DCT图像压缩模型63.3.2 程序流图73.3.3 程序代码83.3 MATLAB仿真94 图像的信噪比104.1 原理简介104.1.1 均方误差104.1.2 峰值信噪比104.2 程序设计114.3 MATLAB仿真125 心得体会13参考文献14摘 要本设计是基于MATLAB软件的图像变换编码程序设计,介绍了图像的信息熵概念和图像信息熵计算的MATLAB实现方法,对DCT变换和反变换的原理进行了详细介绍,并利用MATLAB 和相关函数实现了基于DCT的JPEG图像压缩编码,简单讲述了图像信噪比的概念及意义,利用MATLAB实现了图像经过DCT编码及重构后图像的信噪比的计算。关键词:MATLAB,信息熵,DCT变换,JPEG压缩,峰值信噪比1 设计背景及要求1.1 设计背景数字图像处理是利用计算机或数字技术对图像信息进行加工处理以改善图像质量、压缩图像数据或从图像数据中获取更多信息。数字图像处理的主要方法可分为两大类:空域法和变换域法。 图像压缩即去除多余数据。以数学的观点来看图像压缩过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合。因此图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码。 图像压缩编码的必要性和可能性:图像压缩编码的目的是以尽量少的比特数表征图像同时保持复原图像的质量使它符合预定应用场合的要求。压缩数据量、提高有效性是图像压缩编码的首要目的。图像数据可以进行压缩有以下几方面的原因:首先原始图像数据是高度相关的存在很大的冗余度,如空间冗余度,时间冗余度,频率域冗余度。数据冗余造成比特数浪费消除这些冗余就可以节约码字也就达到了数据压缩的目的,其次基用相同码长表示不同出现概率的符号也会造成符号冗余度;允许图像编码有一定的失真也是图像可以压缩的一个重要原因。 1.2 设计要求(1)学习图像压缩和 JPEG 压缩的原理和方法;(2)选择一幅 256 级的灰度图像,利用 matlab 设计程序完成以下功能;(3)计算该图像的信息熵;(4)利用 JPEG 的压缩原理,将图像分成 88 的图像块,计算每个块的 DCT 系数;(5)只保留 DCT 系数矩阵最左上角的 10 个系数,然后对每个图像块利用这 10个系数进行 DCT 反变换来重构图像,显示重构后的图像;(5)计算该图像经过离散余弦变换编码及重构后图像的信噪比;(6)要求阅读相关参考文献不少于 5 篇;(7)根据课程设计有关规范,按时、独立完成课程设计说明书。2 图像的信息熵2.1 信息熵与图像熵自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量。 信息熵的意义:信源的信息熵H是从整个信源的统计特性来考虑的。它是从平均意义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。 图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi 表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为: 图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为( i, j ),其中i 表示像素的灰度值(0 = i = 255),j 表示邻域灰度(0 = j = 255), 上式能反应某像素位置上的灰度值与其周围像素灰度分布的综合特征,其中f(i, j)为特征二元组(i, j)出现的频数,N 为图像的尺度,定义离散的图像二维熵为: 构造的图像二维熵可以在图像所包含信息量的前提下,突出反映图像中像素位置的灰度信息和像素邻域内灰度分布的综合特征.2.2 图像熵的计算的 MTALAB实现图像熵计算过程:1) 输入一幅图像,并将其转换成灰度图像。2) 统计出图像中每个灰度阶象素概率。3) 统计出图像中相邻两象素的灰度阶联合分布矩阵。4) 根据图像熵和二阶熵公式,计算出一幅图像的熵。由此,可得图像熵计算的MATLAB程序,如下:A=imread(E:Program FilesMATLABR2010bbinlena,bmp); %读入图像n(1:256)=0;p(1:256)=0;S=0;H=0;for i=1:256 %统计像素值 for j=1:256 n(A(i,j)=n(A(i,j)+1; endend for i=1:256 %计算每个像素值的概率 p(i)=n(i)/(256*256);end for i=1:256 %概率和为1 S=S+p(i);end for i=1:256 %熵的计算 if p(i)=0 H=H+p(i)*log2(1/p(i); endendH 2.3 仿真结果 3 基于DCT的JPEG图像压缩编码 3.1 关于DCT变换及DCT系数3.1.1 DCT变换 离散余弦变换(Discrete Cosine Transform,DCT)是一种实数域变换,其变换核为实数余弦函数。对一幅图像进行离散余弦变换后,许多有关图像的重要可视信息都集中在DCT变换的一小部分系数中。因此,离散余弦变换(DCT)是有损图像压缩JPEG的核心,同时也是所谓“变换域信息隐藏算法”的主要“变换域(DCT域)”之一。因为图像处理运用二维离散余弦变换,所以直接介绍二维DCT变换。 一个矩阵的二维DCT定义如下: ,其中,x,y=0,1,2,N-1,式中表示的阵列为N*N。逆DCT变换定义如下: ,3.1.2 DCT 系数的量化 为了达到压缩数据的目的DCT 系数需作量化量化表需针对性地设计。DCT系数量化是一个十分重要的过程,是造成DCT编解码信息损失(或失真) 的根源。量化过程即经过DCT变换图像的每个系数根据量化表除以各自对应的量化步长,得到量化系数。量化的作用是在一定的主观保真度图像质量的前提下,丢掉那些对视觉影响不大的信息,以获得较高的压缩比。量化公式: 量化值(u,v)= f(u,v)/量化矩阵(u,v)3.1.3 DCT系数的性质 当u,v不断增大时,相应的余弦函数的频率也不断增大,得到的系数可认为就是原始图像信号在频率不断增大的余弦函数上的投影,所以也被称为低频系数、中频系数和高频系数。而且,一个图像的DCT低频系数分布在DCT系数矩阵的左上角,高频系数分布在右下角,低频系数的绝对值大与高频系数的绝对值。对DCT变换来说,图像的主要能量是集中在其DCT系数的一小部分。这所谓的“一小部分”就是指的低频部分。随着u,v阶数的不断增大,图像信号在两组正交函数上的投影值出现了大量的正负相抵消的情景,从而导致了得到的频率系数在数值(绝对值)上的不断减小。中、低频系数所含有的原始信号的成份较多,所以由其反变换重构图像就能得到图像的近似部分。高频系数是在众多正交的余弦函数上投影的加权,是这些不同频率的余弦信号一起来刻画原始信号的结果,图像近似的部分在这些函数上被相互抵消了,剩下的就是图像的细节部分了。3.2 程序设计3.2.1 DCT图像压缩模型 DCT图像压缩模型如图3.1所示: 图3.1 DCT图像压缩模型 在编码过程中,将图像分解为88的象素块,对这个88块进行二维离散余弦变换, 每个块就产生了64个DCT系数,其中一个DC系数位于左上角是直流(DC)系数,它表示了88输入矩阵全部值的平均数,其余63个系数为交流(AC)系数。接下来对DCT系数进行量化, 相邻的88块之间的DC系数有较强的相关性。最后将量化的DCT系数进行编码和传送,就形成了压缩后的图像格式。在解码过程中,先对已编码的量化的系数进行解码,然后求逆量化并利用二维DCT反变换把DCT系数转化为88样本像块,最后将反变换后的块组合成一幅图像。这样就完成了图像的压缩和解压过程。 图像块处理的整个过程由函数blkproc自动实现。函数blkproc的格式为 B=blkproc(A,M,N,FUN,P1,P2) 函数blkproc的参量为一幅输入图像A将被处理的块的大小M,N,用于处理这些块的函数FUN,以及块处理函数FUN的一些可选输入参数P1,P2,并重新将结果组合到输出图像。 3.3.2 程序流图对一幅图像进行DCT压缩编码的MATLAB程序流程图如图3.2所示: 图3.2 图像DCT压缩编码的程序流程图3.3.3 程序代码I=imread(E:Program FilesMATLABR2010bbinlena,bmp);I=im2double(I);T=dctmtx(8); %8*8的离散余弦变换矩阵B=blkproc(I,8,8,P1*x*P2,T,T); %对原图像进行DCT变换blkproc()函数是对f1矩阵中的%每个8,8模块,用公式P1*x*P2进行计 算。其中x=8,8,P1=T,P2=T。用*表示的是%矩阵乘法,而.*表示的矩阵中相应数的乘积。由线性代数的知识,很快就能知道B1的%size和f1的size是一样的。 mask=1 1 1 1 0 0 0 0; 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反变换,得到压缩后的图像subplot(2,2,1);imshow(I);title(原图像);subplot(2,2,2);imshow(I2);title(重构后图像);subplot(2,2,3);imshow(abs(I-I2);title(原图象和复原后图象的差)subplot(2,2,4);imshow(B);title(DCT系数);3.3 MATLAB仿真经过MATLAB软件进行仿真,仿真结果如图3.3所示: 图 3.1 原图像和重构后图像比较,及DCT系数总结分析: 仿真中取了10个DCT系数,占15%.比较原图和重构图像,可以发现:在抛弃85%的DCT系数后,重构图像时并不会因此而带来其画面质量的显著下降,即重构图像的失真不大。当然,采用这种方法来实现压缩算法时,可以通过修改mask变量中的DCT系数来更好地比较仿真结果。4 图像的信噪比4.1 原理简介图像的信噪比应该等于信号与噪声的功率谱之比,但通常功率谱难以计算,有一种方法可以近似估计图像信噪比,即信号与噪声的方差之比。首先计算图像所有象素的局部方差,将局部方差的最大值认为是信号方差,最小值是噪声方差,求出它们的比值,再转成dB数,最后用经验公式修正。数字图像处理中,我们一般用均方误差和峰值信噪比来表示图像压缩效果。4.1.1 均方误差均方误差(Mean Squared Error, MSE)在相同测量条件下进行的测量称为等精度测量,例如在同样的条件下用同一个游标卡尺测量铜棒的直径若干次这就是等精度测量。对于等精度测量来说还有一种更好的表示误差的方法就是标准误差。标准误差定义为各测量值误差的平方和的平均值的平方根故又称为均方误差。 数理统计中均方误差是指参数估计值与参数真值之差平方的期望值记为MSE。4.1.2 峰值信噪比 峰值信噪比,其英文缩写是PSNR,英文全称为“Peak Signal to Noise Ratio”。peak的中文意思是顶点。而radio的意思是比率或比列的。整个意思就是到达噪音比率的顶点信号,psnr是一般是用于最大值信号和背景噪音之间的一个工程项目。通常在经过影像压缩之后,输出的影像通常都会有某种程度与原始影像一样。为了衡量经过处理后的影像品质,我们通常会参考PSNR 值来认定某个处理程序够不够令人满意。 峰值信噪比定义为: Peak就是指8 bits表示法的最大值255。MSE指 Mean Square Error(均方误差各值相差的n次方和的平均值的n次平方根(这几个字应该没有)),I(角标n)指原始影像第n个pixel值,P(角标n)指经处理后的影像第n个pixel值。PSNR 的单位为dB。所以PSNR值越大,就代表失真越少。PSNR 是最普遍,最广泛使用的评鉴画质的客观量测法,不过许多实验结果都显示,PSNR的分数无法和人眼看到的视觉品质完全一致,有可能PSNR较高者看起来反而比PSNR较低者差,这是因为人眼的视觉对于误差的敏感度并不是绝对的,其感知结果会受到许多因素的影响而产生变化例如人眼对空间频率较低的对比差异敏感度较高人眼对亮度对比差异的敏感度较色度高,人眼对一个区域的感知结果会受到其周围邻近区域的影响。4.2 程序设计程序函数:function PSNR = PSNR(A,B) %计算输入两图像A,B的峰值信噪比PSNR(dB) A = double(A); %图像数据类型转换 B = double(B); Row,Col = size(A); %输入图像的大小 Row,Col = size(B); MSE = sum(sum(A - B).2) / (Row * Col); %均方误差MSE PSNR = 10 * log10(2552/MSE); %峰值信噪比PSNR(dB) function MSE = MSE(A,B) A=double(A); B=double(B); Row,Col = size(A); %输入图像的大小 Row,Col = size(B); MSE = sum(sum(A - B).2) / (Row * Col); %均方误差MSE 主程序代码:disp(DCTJPEG压缩前后均方误差MSE:) mse0=mse(I,I2) disp(DCTJPEG压缩前后图像峰值信噪比(dB):) PSNR0=PSNR(I,I2) 4.3 MATLAB仿真经过MATLAB软件进行仿真,仿真结果如图4.1所示: 图4.1 均方误差及峰值信噪比5 心得体会这次的课程设计,让我对单MATLAB的理论有了更加深入的了解,同时在具体的制作过程中,我们发现现在书本上的知识与实际的应用存在着不小的差距。这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论