资源描述
1.图像压缩的概念 减少表示数字图像时需要的数据量 2.图像压缩的基本原理 去除多余数据.以数学的观点来看,这一过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合 图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码. 图像数据之所以能被压缩,就是因为数据中存在着冗余。图像数据的冗余主要表现为:(1) 图像中相邻像素间的相关性引起的空间冗余;(2) 图像序列中不同帧之间存在相关性引起的时间冗余;(3) 不同彩色平面或频谱带的相关性引起的频谱冗余。3数据压缩的目的就是通过去除这些数据冗余来减少表示数据所需的比特数。由于图像数据量的庞大,在存储、传输、处理时非常困难,因此图像数据的压缩就显得非常重要。 信息时代带来了“信息爆炸”,使数据量大增,因此,无论传输或存储都需要对数据进行有效的压缩。在遥感技术中,各种航天探测器采用压缩编码技术,将获取的巨大信息送回地面。 图像压缩是数据压缩技术在数字图像上的应用,它的目的是减少图像数据中的冗余信息从而用更加高效的格式存储和传输数据。 4、图像压缩基本方法 图像压缩可以是有损数据压缩也可以是无损数据压缩。对于如绘制的技术图、图表或者漫画优先使用无损压缩,这是因为有损压缩方法,尤其是在低的位速条件下将会带来压缩失真。如医疗图像或者用于存档的扫描图像等这些有价值的内容的压缩也尽量选择无损压缩方法。有损方法非常适合于自然的图像,例如一些应用中图像的微小损失是可以接受的(有时是无法感知的),这样就可以大幅度地减小位速。 从压缩编码算法原理上可以分为以下3类:(1)无损压缩编码种类哈夫曼(Huffman)编码,算术编码,行程(RLE)编码,Lempel zev编码。(2)有损压缩编码种类预测编码,DPCM,运动补偿;频率域方法:正交变换编码(如DCT),子带编码;空间域方法:统计分块编码;模型方法:分形编码,模型基编码;基于重要性:滤波,子采样,比特分配,向量量化;(3)混合编码。有JBIG,H261,JPEG,MPEG等技术标准。 目前基于小波变换的压缩方法有很多,比较成功的有小波包最优基方法,小波域纹理模型方法,小波变换零树压缩,小波变换向量压缩等。5、图像压缩的主要目标就是在给定位速(bit-rate)或者压缩比下实现最好的图像质量。但是,还有一些其它的图像压缩机制的重要特性: 可扩展编码 (en:Scalability) 通常表示操作位流和文件产生的质量下降(没有解压缩和再压缩)。可扩展编码的其它一些叫法有 渐进编码(en:progressive coding)或者嵌入式位流(en:embedded bitstreams)。尽管具有不同的特性,在无损编码中也有可扩展编码,它通常是使用粗糙到精细像素扫描的格式。尤其是在下载时预览图像(如浏览器中)或者提供不同的图像质量访问时(如在数据库中)可扩展编码非常有用 有几种不同类型的可扩展性: 质量渐进(en:Quality progressive)或者层渐进(en:layer progressive):位流渐进更新重建的图像。 分辨率渐进(en:Resolution progressive):首先在低分辨率编码图像,然后编码与高分辨率之间的差别。 成分渐进(en:Component progressive):首先编码灰度数据,然后编码彩色数据。 感兴趣区域编码,图像某些部分的编码质量要高于其它部分,这种方法可以与可扩展编码组合在一起(首先编码这些部分,然后编码其它部分)。 元数据信息,压缩数据可以包含关于图像的信息用来分类、查询或者浏览图像。这些信息可以包括颜色、纹理统计信息、小预览图像以及作者和版权信息。 6、图像压缩目前的标准 经典的视频压缩算法已渐形成一系列的国际标准体系,如H.26x系列建议,H.320系列建议以及MPEG系列建议等。 7、图像压缩效果的评估 压缩方法的质量经常使用峰值信噪比来衡量,峰值信噪比用来表示图象有损压缩带来的噪声。但是,观察者的主观判断也认为是一个重要的、或许是最重要的衡量标准。二、具体实验方法及算法1、使用图像比例变换缩放图像实验原理:数字图像的比例缩放是指给定的图像在X方向和Y方向按相同的比例缩放a倍,从而获得一副新的图像。并且如果x方向和y方向的缩放比例不同,会使得比例缩放后改变原始图像像数间的相对位置,产生几何畸变。设原始图像中的点A0(X0,Y0)比例缩放后,在信徒中的对应点是A1(X1,Y1),则两点之间的关系可表示为 若比例缩放所产生的图像中的像素在原始图像中没有相对应的像素点时,就需要进行灰度值的插值运算,一般有以下两种差值处理方法。1) 直接赋值为和它最相近的像素灰度值,这种方法成为最邻近差值法,该方法的主要优点是简单,计算量小,但是可能会产生马赛克现象。2) 通过其他的数学插值算法来计算相应的像素点的灰度值,这类方法处理效果好,但运算量会有所增加。 该函数在图像压缩的时候,主要是根据周围相近像素的颜色值进行删除计算,最终达到压缩图片的目的。-源代码-I=imread(D:cameraman.tif);imshow(I);X1=imresize(I,1) X2=imresize(I,0.8)X3=imresize(I,0.6)X4=imresize(I,0.4)X5=imresize(I,0.2)X6=imresize(I,0.09)X7=imresize(I,0.04)X8=imresize(I,0.03)X9=imresize(I,0.02)X10=imresize(I,0.01)subplot(3,3,1),imshow(X1),title(原始图像)subplot(3,3,2),imshow(X2),title(缩小0.8倍)subplot(3,3,3),imshow(X3),title(缩小0.6倍)subplot(3,3,4),imshow(X4),title(缩小0.4倍)subplot(3,3,5),imshow(X5),title(缩小0.2倍)subplot(3,3,6),imshow(X6),title(缩小0.09倍)subplot(3,3,7),imshow(X7),title(缩小0.04倍)subplot(3,3,8),imshow(X8),title(缩小0.02倍)subplot(3,3,9),imshow(X9),title(缩小0.01倍)实验截图:2、小波变换实现图像压缩(分2种函数)实验原理:小波变化通过多分辨分析过程将一幅图像分成近似和细节两部分,细节对应的是小尺度的顺变,它在本尺度内很稳定,因此将细节存储起来,近似部分在下一个尺度进行分解,重复该过程即可,近似与细节在正交镜像滤波器算法中分别对应于高通滤波和低通滤波,这种变换通过尺度去掉相关性。2(1)利用wavedec2()函数对图像进行小波分解后,再用appcoef2()函数对分解的图像进行重构,最后用wcodemat()函数进行量化编码-源代码-clear;load wbarb;subplot(3,3,1);image(X);colormap(map);title(原始图像);disp(原始图像X的大小:);whos(X); c,s=wavedec2(X,2,bior3.7); cal=appcoef2(c,s,bior3.7,1);ch1=detcoef2(h,c,s,1);cv1=detcoef2(v,c,s,1);cd1=detcoef2(d,c,s,1); a1=wrcoef2(a,c,s,bior3.7,1);h1=wrcoef2(h,c,s,bior3.7,1);v1=wrcoef2(v,c,s,bior3.7,1);d1=wrcoef2(d,c,s,bior3.7,1);c1=a1,h1;v1,d1; ca1=appcoef2(c,s,bior3.7,1);ca1=wcodemat(cal,440,mat,0); ca1=0.8*cal;subplot(3,3,2);image(ca1);colormap(map);axis square;title(第一次压缩图像0.8倍);disp(第一次压缩图像的大小);whos(ca1); ca2=appcoef2(c,s,bior3.7,2);ca2=wcodemat(ca2,440,mat,0); ca2=0.6*ca2;subplot(3,3,3);image(ca2);colormap(map);axis square;title(第二次压缩图像0.6倍);disp(第二次压缩图像的大小);whos(ca2); ca3=appcoef2(c,s,bior3.7,2);ca3=wcodemat(ca3,440,mat,0); ca3=0.4*ca3;subplot(3,3,4);image(ca3);colormap(map);axis square;title(第三次压缩图像0.4倍);disp(第三次压缩图像的大小);whos(ca3);ca3=appcoef2(c,s,bior3.7,2);ca3=wcodemat(ca3,440,mat,0); ca4=appcoef2(c,s,bior3.7,2);ca4=wcodemat(ca4,440,mat,0); ca4=0.2*ca4;subplot(3,3,5);image(ca4);colormap(map);axis square;title(第四次压缩图像0.2倍);disp(第四次压缩图像的大小);whos(ca4);ca4=appcoef2(c,s,bior3.7,2);ca4=wcodemat(ca4,440,mat,0); ca5=appcoef2(c,s,bior3.7,2);ca5=wcodemat(ca5,440,mat,0); ca5=0.09*ca5;subplot(3,3,6);image(ca5);colormap(map);axis square;title(第五次压缩图像0.09倍);disp(第五次压缩图像的大小);whos(ca5);ca5=appcoef2(c,s,bior3.7,2);ca5=wcodemat(ca5,440,mat,0); ca6=appcoef2(c,s,bior3.7,2);ca6=wcodemat(ca6,440,mat,0); ca6=0.04*ca6;subplot(3,3,7);image(ca6);colormap(map);axis square;title(第六次压缩图像0.04倍);disp(第六次压缩图像的大小);whos(ca6);ca6=appcoef2(c,s,bior3.7,2);ca6=wcodemat(ca6,440,mat,0); ca7=appcoef2(c,s,bior3.7,2);ca7=wcodemat(ca7,440,mat,0);ca7=0.02*ca7;subplot(3,3,8);image(ca7);colormap(map);axis square;title(第七次压缩图像0.02倍);disp(第七次压缩图像的大小);whos(ca7);ca2=appcoef2(c,s,bior3.7,2);ca7=wcodemat(ca2,440,mat,0); ca8=appcoef2(c,s,bior3.7,2);ca8=wcodemat(ca8,440,mat,0);ca8=0.01*ca8;subplot(3,3,9);image(ca8);colormap(map);axis square;title(第八次压缩图像0.01倍);disp(第八次压缩图像的大小);whos(ca8);ca8=appcoef2(c,s,bior3.7,2);ca8=wcodemat(ca8,440,mat,0);实验结果:原始图像X的大小: Name Size Bytes Class Attributes X 256x256 524288 double 第一次压缩图像的大小 Name Size Bytes Class Attributes ca1 135x135 145800 double 第二次压缩图像的大小 Name Size Bytes Class Attributes ca2 75x75 45000 double 第三次压缩图像的大小 Name Size Bytes Class Attributes ca3 75x75 45000 double 第四次压缩图像的大小 Name Size Bytes Class Attributes ca4 75x75 45000 double 第五次压缩图像的大小 Name Size Bytes Class Attributes ca5 75x75 45000 double 第六次压缩图像的大小 Name Size Bytes Class Attributes ca6 75x75 45000 double 第七次压缩图像的大小 Name Size Bytes Class Attributes ca7 75x75 45000 double 第八次压缩图像的大小 Name Size Bytes Class Attributes ca8 75x75 45000 double 实验截图:2(2)、wdencmp()函数对给定的图像进行压缩处理-源代码-load wbarb;subplot(2,2,1);image(X);colormap(map);c,l=wavedec2(X,2,db3);thr,sorh,keepapp=ddencmp(cmp,wv,X);Xcmp,cxc,lxc,perf0,perf12=wdencmp(gbl,c,l,db3,2,thr,sorh,keepapp);subplot(2,2,2);image(Xcmp);colormap(map);disp(小波分解系数中为0的系数个数百分比:);perf0disp(压缩后保留能量百分比:);perf12实验结果:小波分解系数中为0的系数个数百分比:perf0 = 49.3839压缩后保留能量百分比:perf12 = 99.9774实验截图:3、JPEG图像压缩-基于DCT的图像压缩实验原理:在JPEG图像压缩法里,要将一幅彩色图像进行压缩编码,首先将图像RGB 分量转化为亮度分量和色差分量,然后将图像分成88的象素块,用正向二维DCT 把每个块转变成64 个DCT 系数值,其中1 个数值是直流(DC)系数,即88 空域图像子块的平均值,其余的63 个是交流(AC)系数,接下来对DCT 系数进行Zig-Zag 扫描和Huffman 编码,实现了图像压缩。在此,我采用JEPG里压缩算法里的“基于DCT的图像压缩”法对图片进行图片压缩(1)-源代码-I=imread(D:cameraman.tif );I= im2double(I);%图像存储类型转换T=dctmtx(8);%离散余弦变换矩B=blkproc(I,8 8,P1*x*P2,T,T);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 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0;B2=blkproc(B,8 8,P1.*x,mask);%数据压缩,丢弃右下角高频数据I2=blkproc(B2,8 8,P1*x*P2,TT);%进行DCT反变换,得到压缩后的图像subplot(1,2,1);imshow(I);title( 原图)subplot(1,2,2);imshow(I2);title( 压缩后的图像)实验截图:
展开阅读全文