小波的秘密7_图像处理应用:图像压缩

来源:互联网 发布:印章生成器软件下载 编辑:程序博客网 时间:2024/06/04 19:07

1.前言:

对图像来说,如果要进行快速或实时传输以及大量存储,就需要对图像数据进行压缩。在同样的通信容量下,如果图像数据压缩后在传输,就可以查UN输更多的图像信息。例如,利用普通的电话线就可以传输经过压缩后的图像信息。图像压缩研究就是寻找高压缩比的方法,且压缩后的图像要有合适的信噪比。因为在压缩之后,我们还要恢复原始信号,并且在压缩、传输、恢复过程,要求图像的失真度小。
图像数据往往存在各种信息的冗余,例如空间冗余、信息熵冗余、视觉冗余、和结构冗余等。所谓的压缩就是去掉各种冗余,只保留有用的信息。

2.小波的方法:

就是将一幅图像通过二维小波变换分解成一系列方向和空间局部变化的子带。一幅图像经小波分解后,可得到一系列不同分辨率的子图像。这是小波方法进行图像处理的基础。
图像的小波压缩过程首先是对原始图像进行二维小波变换,得到小波变换系数。由于小波变换能将原始图像的能量集中到少部分小波系数上,且分解后的小波系数在三个方向的细节分量有高度的局部相关性,为进一步量化编码提供了条件,因此小波编码可以获得较高的压缩比,起亚索速度较快。
小波压缩的特点在于压缩比高,压缩速度快,压缩后能保持信号与图像特征基本不变,并且传输过程中可以抗干扰。此处的难点在于母小波千千万,那个最适合?(正则性/光滑?不连续/块效应?)

3.简单粗暴:“保低去高”压缩法

保留图像低频分量,去除图像高频分量
[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. clear all;%装载并显示原始图像  
  2. load wbarb;  
  3. subplot(2,2,1);image(X);  
  4. colormap(map);  
  5. xlabel('(a)原始图像 ');  
  6. axis square;  
  7. disp('压缩前图像的大小:');  
  8. whos('X')  
  9. [c,l]=wavedec2(X,2,'bior3.7');%对图像进行7层小波分解  
  10. cA1=appcoef2(c,l,'bior3.7',1);%提取小波分解结构中的一层的低频系数和高频系数  
  11. cH1=detcoef2('h',c,l,1);%水平方向  
  12. cD1=detcoef2('d',c,l,1);%斜线方向  
  13. cV1=detcoef2('v',c,l,1);%垂直方向  
  14. %重构第一层系数  
  15. A1=wrcoef2('a',c,l,'bior3.7',1);  
  16. H1=wrcoef2('h',c,l,'bior3.7',1);  
  17. D1=wrcoef2('d',c,l,'bior3.7',1);  
  18. V1=wrcoef2('v',c,l,'bior3.7',1);  
  19. c1=[A1 H1;V1 D1];  
  20. subplot(2,2,2);image(c1);%显示第一层频率信息  
  21. xlabel('(b)分解后的低频和高频信息');  
  22. ca1=wcodemat(cA1,440,'mat',0);%对图像进行压缩:保留第一层低频信息并对其进行量化编码  
  23. %改变图像高度并显示  
  24. ca1=0.1*ca1;  
  25. subplot(2,2,3);  
  26. image(ca1);  
  27. colormap(map);  
  28. xlabel('(c)第一次压缩后图像');  
  29. axis square;  
  30. disp('第一次压缩后图像的大小:');  
  31. whos('ca1')  
  32. cA2=appcoef2(c,l,'bior3.7',2);%压缩图像:保留第二层低频信息并对其进行量化编码  
  33. ca2=wcodemat(cA2,440,'mat',0);  
  34. ca2=0.1*ca2;  
  35. subplot(2,2,4);image(ca2);  
  36. colormap(map);  
  37. xlabel('(d)第二次压缩后图像');  
  38. disp('第二次压缩后图像大小:');  
  39. whos('ca2')  
运行结果:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 压缩前图像的大小:  
  2.   Name        Size              Bytes  Class      
  3.   X         256x256            524288  double                
  4. 第一次压缩后图像的大小:  
  5.   Name        Size              Bytes  Class     
  6.   ca1       135x135            145800  double                
  7. 第二次压缩后图像大小:  
  8.   Name       Size               Bytes  Class      
  9.   ca2       75x75               45000  double      
压缩效果:

4.阈值压缩法:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. clear all;  
  2. load wbarb;  
  3. subplot(1,2,1);image(X);  
  4. colormap(map);%设置色彩索引图  
  5. axis square;  
  6. xlabel('(a)原图像');  
  7. disp('原始图像的大小:');  
  8. whos('X')  
  9. %用db3小波对图像进行5层分解  
  10. [C,S]=wavedec2(X,5,'db3');  
  11. [thr,sorh,kep]=ddencmp('cmp','wv',X);  
  12. [xp,cc,perf0,perf12]=wdencmp('gbl',C,S,'db3',5,thr,sorh,kep);  
  13. subplot(1,2,2);image(xp);  
  14. colormap(map);  
  15. xlabel('(b)压缩后图像')  
  16. axis square;  
  17. disp('压缩后图像的大小:')  
  18. whos('xp')  
  19. disp('小波分解系数中值为0的系数个数百分比:')  
  20. disp(perf0)  
  21. disp('压缩后剩余能量百分比:');  
  22. disp(perf12)  
运行结果:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. 原始图像的大小:  
  2.   Name        Size              Bytes  Class     
  3.   X         256x256            524288  double                
  4. 压缩后图像的大小:  
  5.   Name        Size              Bytes  Class     Attributes  
  6.   xp        256x256             2048  double       
压缩效果:

5.总结:

压缩图像的方法很慢做到尽善尽美。想得到良好的图像压缩效果,需要综合多种技术,尤其是数据编码和解码的算法。

0 0