Hello Mat

 找回密码
 立即注册
查看: 4228|回复: 0

基于小波变换的图像压缩

[复制链接]

1323

主题

1551

帖子

0

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22647
发表于 2017-2-5 11:24:45 | 显示全部楼层 |阅读模式
对于小波图像压缩编码分析,小波一级分解,分解成水平,垂直和斜线方向的梯度值,编程如下:
  1. %第一层小波分解
  2. clc,clear,close all                    % 清屏、清工作区、关闭窗口
  3. warning off                         % 消除警告
  4. feature jit off                       % 加速代码执行
  5. load wbarb;
  6. image(X);
  7. colormap(map);
  8. colorbar;
  9. % 小波分解
  10. [cA1,cH1,cV1,cD1] = dwt2(X,'bior3.7');
  11. % 第一层小波逼近系数--cA1
  12. % 水平系数--cH1
  13. % 垂直系数--cV1
  14. % 对角系数--cD1
  15. A1 = upcoef2('a',cA1,'bior3.7',1);
  16. H1 = upcoef2('h',cH1,'bior3.7',1);
  17. V1 = upcoef2('v',cV1,'bior3.7',1);
  18. D1 = upcoef2('d',cD1,'bior3.7',1);
  19. %显示第一层小波分解图形
  20. colormap(map);
  21. subplot(2,2,1); image(wcodemat(A1,192));
  22. title('Approximation A1')
  23. subplot(2,2,2); image(wcodemat(H1,192));
  24. title('Horizontal Detail H1')
  25. subplot(2,2,3); image(wcodemat(V1,192));
  26. title('Vertical Detail V1')
  27. subplot(2,2,4); image(wcodemat(D1,192));
  28. title('Diagonal Detail D1')
复制代码
对该图像进行第二层小波分解,同样的得到水平,垂直和斜线方向的梯度值,编程如下:

  1. %% 由单层逆小波变换重新产生一副图像
  2. % 逆变换
  3. Xsyn = idwt2(cA1,cH1,cV1,cD1,'bior3.7');
  4. %图像2级小波分解
  5. [C,S] = wavedec2(X,2,'bior3.7');
  6. %提取第二层小波逼近系数
  7. cA2 = appcoef2(C,S,'bior3.7',2);
  8. %提取第一层、第二层小波系数
  9. cH2 = detcoef2('h',C,S,2);
  10. cV2 = detcoef2('v',C,S,2);
  11. cD2 = detcoef2('d',C,S,2);
  12. cH1 = detcoef2('h',C,S,1);
  13. cV1 = detcoef2('v',C,S,1);
  14. cD1 = detcoef2('d',C,S,1);
  15. %重构 the level 2 approximation from C
  16. A2 = wrcoef2('a',C,S,'bior3.7',2);
  17. %重构 the level 1 and 2 details from C
  18. H1 = wrcoef2('h',C,S,'bior3.7',1);
  19. V1 = wrcoef2('v',C,S,'bior3.7',1);
  20. D1 = wrcoef2('d',C,S,'bior3.7',1);
  21. H2 = wrcoef2('h',C,S,'bior3.7',2);
  22. V2 = wrcoef2('v',C,S,'bior3.7',2);
  23. D2 = wrcoef2('d',C,S,'bior3.7',2);
  24. %显示2级小波分解结果
  25. colormap(map);
  26. subplot(2,4,1);image(wcodemat(A1,192));
  27. title('Approximation A1')
  28. subplot(2,4,2);image(wcodemat(H1,192));
  29. title('Horizontal Detail H1')
  30. subplot(2,4,3);image(wcodemat(V1,192));
  31. title('Vertical Detail V1')
  32. subplot(2,4,4);image(wcodemat(D1,192));
  33. title('Diagonal Detail D1')
  34. subplot(2,4,5);image(wcodemat(A2,192));
  35. title('Approximation A2')
  36. subplot(2,4,6);image(wcodemat(H2,192));
  37. title('Horizontal Detail H2')
  38. subplot(2,4,7);image(wcodemat(V2,192));
  39. title('Vertical Detail V2')
  40. subplot(2,4,8);image(wcodemat(D2,192));
  41. title('Diagonal Detail D2')
复制代码
第一层小波压缩和第二层小波压缩以及采用wdencmp小波压缩方法得到的结果及图,程序如下:

  1. %% 重构 the original image from the wavelet decomposition structure
  2. X0 = waverec2(C,S,'bior3.7');
  3. % 压缩图像X
  4. [thr,sorh,keepapp]= ddencmp('cmp','wv',X);
  5. % 降噪 or 压缩 using wavelets.
  6. [Xcomp,CXC,LXC,PERF0,PERFL2] = ...
  7. wdencmp('gbl',C,S,'bior3.7',2,thr,sorh,keepapp);
  8. % 对比查看压缩前后图像
  9. colormap(map);
  10. subplot(121); image(X); title('Original Image');
  11. axis square
  12. subplot(122); image(Xcomp); title('Compressed Image');
  13. axis square
  14. PSNR(X,Xcomp)
复制代码









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-11-22 23:48 , Processed in 0.230178 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表