本章中,主要粗略练习图像压缩方面的知识。图像压缩分为3部分,编码压缩,像素间冗余压缩,心理视觉冗余压缩。编码主要分为线性预测编码,哈弗曼编码,已经JPEG和JPEG2000等。

练习代码和解释如下:

  1 %第八章  图像压缩  2  10 %% entropy熵 11 clc 12 clear 13 f=[119 123 168 119;123 119 168 168] 14 f=[f;119 119 107 119;107 107 119 119]%不想分行的写法 15 h1=entropy(f,8)%直接算其8个bin的熵 16 %%h1=1.7806 17  18 %[p x]=hist(Y,X),如果X是一个标量,则表示将Y列向量均分为X个斌 19 %p返回每一个bin中对应数量,x返回每一个bin的中心位置 20 [p x]=hist(f(:),8) 21 hist(f(:),8)%没有单独写返回值的情况下就是画出f的直方图 22 title('向量f的直方图显示')

 23 p=p/sum(p)%直方图bin中个数与总个数之比 24 %p = 25 %    0.1875    0.5000    0.1250         0         0         0         0    0.1875 26 h2=entropy(f)%其计算方法为h=-sum([p(i).*log2(p(i))); 27 %h2=1.7806,结果与h1是一样的 28 c=huffman(hist(double(f(:)),4)) 29 %其中hist(double(f(:)),4)为11     2     0     3,所以 30 %计算出来的其haffman编码为按其顺序给的 31 %c =  32 %    '1' 33 %    '001' 34 %    '000' 35 %    '01' 36 cp=huffman([0.1875 0.5 0.125 0.1875]) 37 %cp =  38 %    '011' 39 %    '1' 40 %    '010' 41 %    '00' 42  43 %% huffman 44 clc 45 clear 46 f2=uint8([2 3 4 2;3 2 4 2;2 2 1 2;1 1 2 2]) 47 R1=whos('f2') 48 %运行结果如下: 49

 50 c=huffman(hist(double(f2(:)),4)) 51 %c= '00' 52 %    '1' 53 %    '010' 54 %    '011' 55 h1f2=c(f2(:))'%g该句的作用就是将f2中的元素按照c来查表 56 whos('h1f2');%可以看出其存储空间用了1014个字节

 57  58 h2f2=char(h1f2)'%此处需要转置是因为char函数把包元数组转换成行向量 59 %h2f2= 60 %1010011000011111 61 % 1 01  0110      62 % 0  0   11   63 whos('h2f2')%可以看到此处仍然用了96个bytes 64 %运行结果如下: 65

 66 h2f2=h2f2(:) 67 h2f2(h2f2==' ')=[];%此处单引号内的空格不能少 68 whos('h2f2'); 69 %运行结果如下: 70

 71 h3f2=mat2huff(f2)%该函数的功能是用huffman编码一个矩阵 72 whos('h3f2');%虽然返回的需要128个字节,不过主要是应用于结构的开销 73%运行结果如下:

 74  75 hcode=h3f2.code; 76 whos('hcode')%可以看出压缩比接近4:1 77%运行结果如下:

 78  79 dec2bin(double(hcode))%转换成二进制 80 %运行结果如下: 81

 82 %% cell数据结果的理解 83 clc 84 clear 85 X=cell(2,3)%注意虽然X是2行3列,但是其顺序是从上到下,从左到右的 86 X{1}={8,9} 87 X{1} 88 X(1) 89  90 X{2}=5 91 X{2} 92 X(2) 93  94 X(3)={6} 95 X{3} 96 X(3) 97  98 X(4)={[7 9]} 99 X{4}100 X(4)101 102 X{5}={[10,11]}103 X{5}104 X(5)105 106 X{6}=[12,13]107 X{6}108 X(6)109 110 celldisp(X)%列出每一个包元的数值111 cellplot(X)%画出包元的结构图112 title('cell示意图')113%其运行结果如下:

114 115 %% 剪去第一个元素的方法116 clc117 clear118 p=[1 2 3 4]119 p(1)=[]%此时p=2 3 4120 121 %%122 clc123 clear124 125 %编码:126 f1=imread('.\images\dipum_images_ch08\Fig0804(a)(Tracy).tif');127 c=mat2huff(f1)128 cr1=imratio(f1,c)129 130 save .\Data\SqueezeTracy.mat;131 cr2=imratio('.\images\dipum_images_ch08\Fig0804(a)(Tracy).tif','.\Data\SqueezeTracy.mat')132 %可以看出2者的压缩比是不同的,主要差别在matlab数据文件的开销133 134 %解码:135 load .\Data\SqueezeTracy.mat;136 g=huff2mat(c);137 rmse=compare(f1,g)%可以看出rmse=0,说明在编码和解码的过程中均方根误差为0138 139 %% 无损预测编码140 clc141 clear142 f=imread('.\images\dipum_images_ch08\Fig0807(c)(Aligned).tif')143 imshow(f);144 title('预测编码原图')

145 %其运行结果如下:146 147 fshang=entropy(f)%fsang=7.3505148 c0=mat2huff(double(f));149 cfshang=entropy(c0.code)%cfshang=7.9963150 cfr=imratio(f,c0)%cfr=1.0821,即huffman编码后熵变大151 152 %预测编码153 e=mat2lpc(f);154 figure,imshow(mat2gray(e));155 title('线性预测编码后图');156 esgang=entropy(e)%esang=5.9727,变小157 cer=imratio(f,unit8(e))%cer=1.0821158%其运行结果如下:

159 160 c=mat2huff(e);%将lpc编码后继续进行huffman编码161 ceshang=entropy(c.code)%7.9937162 cr=imratio(f,c)%1.3311163 164 %解码165 ee=huff2mat(c);166 ff=lpc2mat(ee);167 figure,imshow(ff,[])168 title('解码后图')

169 170 [h,x]=hist(e(:)*512,512);171 figure,bar(x,h,'k');172 set(gcf,'outerposition',get(0,'screensize'))%设置目标的属性173 title('预测误差的直方图')174%其运行结果如下:

175 176 g=lpc2mat(huff2mat(c));177 compare(f,g)%值为0,无损还原178 179 %% 利用无损预测和霍夫编码混合的IGS(改进的灰度级)量化180 clc181 clear182 f=imread('.\images\dipum_images_ch08\Fig0810(a)(Original).tif');183 q=quantize(f,4,'igs');%用该函数进行igs量化,量化到4bit184 qs=double(q)/16;185 e=mat2lpc(qs);186 c=mat2huff(e);187 imratio(f,c)%此处得到值为4.1420188 189 %解压缩(无反变换)190 ne=huff2mat(c);191 nqs=lpc2mat(ne);192 nq=16*nqs;193 compare(q,nq)%无损预测和霍夫编码不会产生灰度级误差194 rmse=compare(f,nq)%rmse=6.8382,说明误差有7个灰度级195 196 %%JPEG压缩197 clc198 clear199 f=imread('.\images\dipum_images_ch08\Fig0804(a)(Tracy).tif');200 imshow(f);201 title('JPEG压缩前图像');202%其运行结果如下:

203 204 c1=im2jpeg(f);205 f1=jpeg2im(c1);206 figure,imshow(f1);207 title('JPEG压缩后图像');%肉眼看不出太大的区别208%其运行结果如下:

209 210 imratio(f,c1)%压缩比约为18.2450211 compare(f,f1,3)%2.4329,compare函数的功能是计算并显示在Scale等级2个矩阵直接的错误212 %其运行结果如下:

213 214 c4=im2jpeg(f,4)215 f4=jpeg2im(c4);216 figure,imshow(f)217 title('标准化数组乘以4后')218%其运行结果如下:

219 220 imratio(f,c4)221 compare(f,f4,3)222 %其运行结果如下:223 224 %% JPEG2000压缩225 clc226 clear227 f=imread('.\images\dipum_images_ch08\Fig0804(a)(Tracy).tif');228 imshow(f);229 title('JPEG2000压缩前图像');230 %其运行结果如下:231

232 c1=im2jpeg2k(f,5,[8 8.5]);%使用5尺度变换,参数为[8 8.5]的隐式量化233 f1=jpeg2k2im(c1);234 figure,imshow(f1);235 title('JPEG2000压缩后图像(8.5)');236%其运行结果如下:

237 238 rms1=compare(f,f1)%3.6241239 cr1=imratio(f,c1)%42.1589240 %8.5压缩后图像误差如下:241 242 c2=im2jpeg2k(f,5,[8 7]);%使用5尺度变换,参数为[8 8.5]的隐式量化243 f2=jpeg2k2im(c2);244 figure,imshow(f2);245 title('JPEG2000压缩后图像(7)');246%其运行结果如下:

247 248 rms2=compare(f,f2)%5.9202249 cr2=imratio(f,c2)%87.7323250%7压缩后图像误差如下:

251 252 c3=im2jpeg2k(f,1,[1 1 1 1]);%使用5尺度变换,参数为[8 8.5]的隐式量化253 f3=jpeg2k2im(c3);254 figure,imshow(f3);255 title('JPEG2000压缩后图像(1)');256%其运行结果如下:

257 258 rms3=compare(f,f3)%0.7858259 cr3=imratio(f,c3)%1.6350260%1压缩后图像误差如下:

练习得比较基本,很多函数内部的代码没有分析,等功底深些再学习吧。

转载于:https://www.cnblogs.com/tornadomeet/archive/2012/03/17/2403964.html

Matlab DIP(瓦)ch8图像压缩练习相关推荐

  1. matlab 基于小波变换的图像压缩,基于Matlab的小波变换在图像压缩中的应用

    匿翻 |jf叙≮cc 2..8m (上旬刊) 口 王洪涛 沈有建 李满枝 (海南师范大学数学系 海南 ·海口 571158) 摘 要 小波变换作用在图像上主要体现在两点:图像压缩和图像降噪.本文借用 ...

  2. matlab霍夫曼图像压缩,用matlab仿真huffman编码在jpg图像压缩中的应用崔微微

    <用matlab仿真huffman编码在jpg图像压缩中的应用崔微微>由会员分享,可在线阅读,更多相关<用matlab仿真huffman编码在jpg图像压缩中的应用崔微微(3页珍藏版 ...

  3. matlab 基于小波变换的图像压缩,matlab 基于小波变换的图像压缩

    原理书上都有,我就上代码了 clc; clear all; close all; % 清理工作空间 clear; X=imread('fish.jpg'); X=rgb2gray(X); subplo ...

  4. MatLab 数字图像处理实验 图像压缩

    实验(1)使用给定的图像lena做实验,采用im2bw把灰度图像转换为二值图像,试计算二值化时阈值分别取0.2,0.4,0.6的压缩比是多少? clc close all clear allI=imr ...

  5. 本人部分博客导航(ing...)

    原文地址为: 本人部分博客导航(ing...)   Deep Learning学习笔记: Deep learning:五十一(CNN的反向求导及练习) Deep learning:五十(Deconvo ...

  6. 机器学习和深度学习相关的博客推荐

    Deep Learning学习笔记: Deep learning:五十一(CNN的反向求导及练习) Deep learning:五十(Deconvolution Network简单理解) Deep l ...

  7. cnblogs_tornadomeet博客导航

    [转]:http://www.cnblogs.com/tornadomeet/archive/2012/06/24/2560261.html Deep Learning学习笔记: Deep learn ...

  8. 基于小波变换的图像压缩解压缩的matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 图像压缩的类别 对于图像压缩,主要有两类方法:无损的图像压缩以及有损的图像压缩,分别称为lossle ...

  9. 小波变换在图像压缩方面的分析与应用(Matlab代码)

    小波变换在图像压缩方面的实现与应用 一.实验图片的基本信息 二.数据处理过程 2.1小波函数的选择 2.2图像压缩的基本思想 三.不同小波函数压缩程度的对比 四.MATLAB源码 一.实验图片的基本信 ...

  10. matlab+中文字体设计,有搞头没有? 有搞头

    进入一个不熟悉的领域, 个人喜欢先down一大堆行业资料,流水般扫描一轮,再精选几本做为手册:这样2-3轮下来,基本上就算入了行. http://blog.sina.com.cn/s/blog_710 ...

最新文章

  1. Java多线程系列--“JUC原子类”01之 框架
  2. windows环境下tensorflow安装过程详解(亲测安装成功后测试那块)
  3. 逆向入门--简单win32CK逆向手记
  4. ICT学习笔记(3)IP编址
  5. 1152Google Recruitment
  6. C#用正则表达式 获取网页源代码标签的属性或值
  7. 关于php的梗儿_抖音上的梗,你知道哪些?
  8. ngrok服务的编译与环境搭建
  9. U盘硬盘文件提示“文件或目录损坏且无法读取”问题解决
  10. List集合导出成Excel表格
  11. Python入门习题大全——T恤
  12. PaddlePaddle飞桨《高层API助你快速上手深度学习》『深度学习7日打卡营』第四节课后作业题(代码实践)---快来选一顿好吃的年夜饭
  13. DIY强大的虚拟化环境-规划思路框架
  14. android usb ftdi,android-Nexus7 USB主机FTDI设备未检测到
  15. 如何用木板做桥_用木板做桥 工具跟做家具的一样 大小跟办公桌差不多大 能承重 参加比赛 主要是承重 给个设计方案...
  16. viper4android io错误,Go viper包处理JSON笔记
  17. MapReduce优化----Shuffle过程剖析及性能优化
  18. idea tomcat启动乱码������
  19. 甘特图看起来很生硬?教你使用智能颜色装饰你的甘特图!(三)
  20. Android手游SDK那点事(一)简述

热门文章

  1. 如何向水晶报表数据源中的存储过程传参数……
  2. Mac下mysql登陆问题
  3. 五个 macOS12 Monterey 常用实用技巧
  4. Kap for Mac(轻量级屏幕录像机)免费版
  5. 机器学习数学知识积累总结
  6. 使用IDM继续下载会话过期的文件
  7. 一个流氓的SQL设计,备份(一个字段存多个数据)
  8. 黄光裕出来后,首先会做这三件事(转)
  9. 「代码随想录」63. 不同路径 II【动态规划】力扣详解!
  10. 「leetcode」538.把二叉搜索树转换为累加树【递归】【迭代】详解