《实验五、图像压缩(共6页).doc》由会员分享,可在线阅读,更多相关《实验五、图像压缩(共6页).doc(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上桂 林 理 工 大 学实 验 报 告班级 软件15-1班 学号24 姓名 周奎良 同组实验者 实验名称 实验五 图像压缩 日期 2018年 11月20 日 一、 实验目的1 理解有损压缩和无损压缩的概念;2 理解图像压缩的主要原则和目的;3 了解几种常用的图像压缩编码方式。4 利用MATLAB程序进行图像压缩。二、 实验环境1计算机;2 MATLAB、Photoshop等程序;3移动式存储器(软盘、U盘等)。4记录用的笔、纸。三、 实验内容1.图像压缩原理图像压缩主要目的是为了节省存储空间,增加传输速度。图像压缩的理想标准是信息丢失最少,压缩比例最大。不损失图像质量的
2、压缩称为无损压缩,无损压缩不可能达到很高的压缩比;损失图像质量的压缩称为有损压缩,高的压缩比是以牺牲图像质量为代价的。压缩的实现方法是对图像重新进行编码,希望用更少的数据表示图像。信息的冗余量有许多种,如空间冗余,时间冗余,结构冗余,知识冗余,视觉冗余等,数据压缩实质上是减少这些冗余量。高效编码的主要方法是尽可能去除图像中的冗余成分,从而以最小的码元包含最大的图像信息。编码压缩方法有许多种,从不同的角度出发有不同的分类方法,从信息论角度出发可分为两大类。(1)冗余度压缩方法,也称无损压缩、信息保持编码或熵编码。具体说就是解码图像和压缩编码前的图像严格相同,没有失真,从数学上讲是一种可逆运算。(
3、2)信息量压缩方法,也称有损压缩、失真度编码或烟压缩编码。也就是说解码图像和原始图像是有差别的,允许有一定的失真。应用在多媒体中的图像压缩编码方法,从压缩编码算法原理上可以分为以下3类:(1)无损压缩编码种类哈夫曼(Huffman)编码,算术编码,行程(RLE)编码等。(2)有损压缩编码种类预测编码,DPCM,运动补偿;频率域方法:正交变换编码(如DCT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。有JBIG,H261,JPEG,MPEG等技术标准。本实验主要利用MATLAB程序进行离散余弦变换(DCT)压
4、缩和行程编码(Run Length Encoding, RLE)。1) 离散余弦变换(DCT)图像压缩原理离散余弦变换DCT在图像压缩中具有广泛的应用,它是JPEG、MPEG等数据压缩标准的重要数学基础。和相同图像质量的其他常用文件格式(如GIF(可交换的图像文件格式),TIFF(标签图像文件格式),PCX(图形文件格式)相比,JPEG是目前静态图像中压缩比最高的。JPEG比其他几种压缩比要高得多,而图像质量都差不多(JPEG处理的图像只有真彩图和灰度图)。正是由于其高压缩比,使得JPEG被广泛地应用于多媒体和网络程序中。JPEG有几种模式,其中最常用的是基于DCT变换的顺序型模式,又称为基本
5、系统(Baseline)。 用DCT压缩图像的过程为: (1)首先将输入图像分解为88或1616的块,然后对每个子块进行二维DCT变换。 (2)将变换后得到的量化的DCT系数进行编码和传送,形成压缩后的图像格式。用DCT解压的过程为: (1)对每个88或1616块进行二维DCT反变换。 (2)将反变换的矩阵的块合成一个单一的图像。 余弦变换具有把高度相关数据能量集中的趋势,DCT变换后矩阵的能量集中在矩阵的左上角,右下的大多数的DCT系数值非常接近于0。对于通常的图像来说,舍弃这些接近于0的DCT的系数值,并不会对重构图像的画面质量带来显著的下降。所以,利用DCT变换进行图像压缩可以节约大量的
6、存储空间。压缩应该在最合理地近似原图像的情况下使用最少的系数。使用系数的多少也决定了压缩比的大小。在压缩过程的第2步中,可以合理地舍弃一些系数,从而得到压缩的目的。在压缩过程的第2步,还可以采用RLE和Huffman编码来进一步压缩。2)行程编码(RLE)原理:例如如下这幅 的二值图像,如果采用行程编码可以按如下格式保存其中10和8表示图像的宽和高。在这个小例子中行程编码并没有起到压缩图像的作用。这是由于这个图的尺寸过小,当图像尺寸较大时行程编码还是不错的无损压缩方法。对于灰度图像和二值图像,用行程编码般都有很高的压缩率。行程编码方法实现起来很容易,对于具有长重复值的串的压缩编码很有效,例如:
7、对于有大面积的阴影或颜色相同的图像,使用这种方法压缩效果很好。很多位图文件格式都采用行程编码,如TIFF,PCX,GEM,BMP等。3.2实验步骤1. 打开计算机,启动MATLAB程序;2. 调入一幅BMP格式的数字图像,然后完成下面的实验;3. 使用DCT变换完成对该图像的压缩;4. 阅读下面的代码,分析该代码所实现的功能。I=imread(lenna.bmp); %读入原图像;I = rgb2gray(I);I=im2double(I); %将原图像转为双精度数据类型;T=dctmtx(8); %产生二维DCT变换矩阵B=blkproc(I,8 8,P1*x*P2,T,T); %计算二维D
8、CT,矩阵T及其转置T是DCT函数P1*x*P2的参数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; %二值掩膜,用来压缩DCT系数,只留下DCT系数中左上角的10个B2=blkproc(B,8 8,P1.*x,mask); %只保留DCT变换的10个系数I2= blkproc(B2,8,8,P1*x*P2,T,T); %逆DCT,重构图像subplot(1,2,1);ims
9、how(I);title(原图像); %显示原图像subplot(1,2,2);imshow(I2);title(压缩图像);%显示压缩后的图像。对比原始图像和压缩后的图像,虽然舍弃了85%的DCT系数,但图像仍然清晰(当然有一些质量损失)5. 根据行程(RLE)编码的原理,对一幅灰度图像进行行程编码压缩处理,并输出图像的压缩比。6. 记录和整理实验报告提示:3. 先将彩色图像转换成灰度图(rgb2gray),然后使用dct2 离散余弦变换;idct2 反离散余弦变换实现。3.3提交实验的原始图像和结果图像:四、心得体会这次实验是一个体验性的实验,主要就是体验各种图像和视频压缩算法的效果,趣味
10、性比较强。同时也加深了我对这些压缩算法的理解与体会。1参考代码:I=imread(F:program filesworklenna.bmp); %读入原图像;I1 = rgb2gray(I);I=im2double(I1); %将原图像转为双精度数据类型;T=dctmtx(8); %产生二维DCT变换矩阵B=blkproc(I,8 8,P1*x*P2,T,T); %计算二维DCT,矩阵T及其转置T是DCT函数P1*x*P2的参数mask= 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
11、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; %二值掩膜,用来压缩DCT系数,只留下DCT系数中左上角的10个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(压缩图像);%显示压缩后的图像。对比原始图像和压缩后的图像,虽然舍弃了85%的DCT系数,但图像仍然清晰(当
12、然有一些质量损失)x1 = im2bw(I1, 0.7 );subplot(2,2,3);imshow(x1);a b=size(x1);J=a b;value=x1(1,1); num=0; for i=1:a for j=1:b if x1(i,j)=value num=num+1; else J=J num value; num=1; value=x1(i,j); end end endJ=J num value ; disp(原图像)whos(x1);disp(压缩图像)whos(J);disp(图像压缩比)disp(a*b/length(J)t2=J(2);K(1:t2)=0;i1=1;j1=1;for i=3:2:length(J) c1=J(i); c2=J(i+1); for j=1:c1 K(i1,j1)=c2; j1=j1+1; if j1t2 i1=i1+1; j1=1; end endend subplot(2,2,4); imshow(K); title(a*b/length(J); 专心-专注-专业