收藏 分享(赏)

图像霍夫曼编码与解码以及熵平均码长冗余度的计算.doc

上传人:HR专家 文档编号:11547241 上传时间:2020-06-21 格式:DOC 页数:12 大小:286KB
下载 相关 举报
图像霍夫曼编码与解码以及熵平均码长冗余度的计算.doc_第1页
第1页 / 共12页
图像霍夫曼编码与解码以及熵平均码长冗余度的计算.doc_第2页
第2页 / 共12页
图像霍夫曼编码与解码以及熵平均码长冗余度的计算.doc_第3页
第3页 / 共12页
图像霍夫曼编码与解码以及熵平均码长冗余度的计算.doc_第4页
第4页 / 共12页
图像霍夫曼编码与解码以及熵平均码长冗余度的计算.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

1、 DIP上机报告题 目:数字图像处理上机报告(第4次) 学 校: 中国地质大学(武汉) 指 导 老 师: 傅华明 姓 名: 龙 勋 班 级 序 号: 071112-06 目录1图像霍夫曼编码与解码以及熵,平均码长,冗余度的计算32上机小结10注:给定的文件夹中只需运行test脚本就可以得到结果,从workspace中看到相应的数据4.2图像的霍夫曼编码与解码题目要求: 对图2实施哈夫曼编码和解码,计算图象熵,平均码长和 冗余度; 算法设计: 1.遍历图像,统计各个像素灰度值的概率 2.找出概率最小的两个,在最小概率所代表的灰度值编码中加1,在另一个较小的概率所代表的灰度值编码中加0 3.合并两

2、个概率,成为一个新的元素,如此重复下去,直到最后剩两个元素 4.进行编码的逆过程,即解码过程 5.计算相应的数据 程序代码: 运行代码:clear in=2,2,3,5,0,0,5,5, 5,4,1,1,2,2,1,5, 4,6,5,5,7,2,2,3, 5,2,2,2,3,4,4,4, 6,2,1,4,1,1,2,2, 1,5,7,6,5,5,7,2, 2,4,4,1,2,2,1,5, 2,3,1,2,2,1,5,0; p,out = gailv( in );code = Huffman(0:7,p); %进行霍夫曼编码Coded_Img=Encode(in,code); %对图像进行编码H

3、,L,R=GetInfo(code); %计算熵、平均码长、冗余度Img=Decode(Coded_Img,code); %对图像进行解码图像各像素灰度的概率计算:function p,out =gailv( in ) M,N=size(in);out = zeros(4,8);p = zeros(1,8);for i=1:8 out(1,i)=i-1;endfor i=1:M for j=1:N for k=1:8 if in(i,j) = out(1,k) out(2,k)=out(2,k)+1; end end endendfor i=1:8 out(3,i)=out(2,i)/(M*N

4、); p(1,i)=out(2,i)/(M*N);end end霍夫曼编码过程:function code_out = Huffman(s,p) Ms,Ns=size(s);if (Ms=1) sig=s;else sig=s;end%s为各元素名称 p为各元素概率Ms,Ns=size(sig);Mp,Np=size(p);if (Ms=Np) return;end code=cell(Ms,4);%建立编码cellcode_out=cell(Ms,3);%建立输出cellcoding=cell(Ms,2);%建立编码过程中用到的cell for i=1:Ms codei,1=sig(i,:)

5、;%第一列为元素名称 codei,2=;%第二列为编码 codei,3=p(i);%第三列为元素概率 codei,4=;%第四列为元素概率排行 codingi,1=p(i);%第一行为元素概率 codingi,2=i;%第二行表示此概率由哪些元素组成end m,l=Cell_min(coding(:,1);%找出最小值 while (m1)%若最小值小于1(编码尚未完成) m1,l1=Cell_min(coding(:,1);%找出最小值 temp_p=codingl1,1;%记录下最小概率 codingl1,1=2;%将概率改为2,则以后不会再次取到 m2,l2=Cell_min(codin

6、g(:,1);%找出次小值 codingl2,1=codingl2,1+temp_p;%最小概率和次小概率相加得到新元素概率 k,mp=size(codingl1,2);%考虑最小概率包含了哪些元素 for i=1:mp codecodingl1,2(i),2=1,codecodingl1,2(i),2;%在这些元素的编码前加1 end k,mp=size(codingl2,2);%考虑次小概率包含了哪些元素 for i=1:mp codecodingl2,2(i),2=0,codecodingl2,2(i),2;%在这些元素的编码前加0 end codingl2,2=codingl2,2,c

7、odingl1,2;%新元素包含了次小和最小元素包含的所有元素 m,l=Cell_min(coding(:,1);%找出当前最小值,继续循环end for i=1:Ms code_out(i,1:3)=code(i,1:3);%输出cell前3列等于编码cell前3列end求概率的最小值函数:function mind,loc=Cell_min(data)%找出cell中的某列元素的最小值和位置M,N=size(data); loc=-1; for i=1:M d(i)=datai(1,1);end turemin=min(d);%找出最小值 for i=1:M %遍历矩阵,找出最小值所在位置

8、 if (d(i)=turemin) mind=d(i); loc=i; return; endend end图像编码代码:function Coded_Img=Encode(img,code)%遍历图像,查表确定码字M,N=size(img);Mc,Nc=size(code);Coded_Img=cell(M,N);for i=1:M for j=1:N data=img(i,j); for k=1:Mc if (codek,1=data) Coded_Imgi,j=codek,2; end end endendend图像解码代码:function img=Decode(Coded_Img,

9、code)%遍历编码图像,查表确定数值M,N=size(Coded_Img);Mc,Nc=size(code); for i=1:M for j=1:N data=Coded_Imgi,j; for k=1:Mc if(size(data)=size(codek,2) if (codek,2=data) img(i,j)=codek,1; end end end endend end相关数据的计算:function H,L,R=GetInfo(code)M,N=size(code); H=0; for i=1:M H=H+codei,3*log2(1/codei,3);end%计算熵 L=0;

10、 for i=1:M m,n=size(codei,2); L=L+codei,3*n;end%计算平均码长 R=L/H-1;%计算冗余度 end运行结果: 编码前图像: 编码后图像: 解码后图像: 熵(H)、平均码长(L)、冗余度(R)至此,成功实现了图像矩阵的编码和解码以及相关参数的计算。上机小结: 此次试验是对图像的矩阵进行霍夫曼编码和解码,编程的过程并不像平时做题一样很顺利。有很多平时认为很简单的编码过程用程序实现起来比较麻烦,但是也进一步了解到了霍夫曼编码的原理。在这次编程的过程中我还有一个比较棘手的问题没有解决,就是在霍夫曼编码的过程中,由于各个元素的概率是以double型的数据出现的,进行了四舍五入的处理。如果在编码过程中有几个概率都进行了四舍五入的处理,那么在计算它们的和的过程中数据有可能会与真实值有所差异,而这个结果有可能与较大的概率相差很小,那么在编码时系统会自动根据此时概率的大小进行排列,有可能出现错误。所以在计算机处理问题与我们平时做题时还是会有一点区别,这要求我在以后的学习中还要更加深入地感受这一方面。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 规范标准 > 工业设计

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报