资源描述:
《太原理工多媒体技术实验报告》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、《多媒体技术实验报告》学生姓名学号学院专业班级实验一Huffman编码算法的实现一、实验目的1、学习Matlab软件的使用和编程;2、进一步深入理解Huffman编码算法的原理;二、实验内容用Matlab实现Huffman编码程序的文本压缩和解压;三、实验原理1、Huffman编码程序的文本压缩和解压(1)读信息与概率计算(fhstart.m)(2)哈夫曼树图阶段(fhtree1.m)(3)哈夫曼代码生成模块(fhcode.m)四、Huffman编码的Matlab源程序及运行结果1、用Matlab实现Huffman编码程序的文本压缩和解压clc;clearall;k=input('E
2、nterthefilename:','s');%k=input('Enterthefilename:','s');fid=fopen(k,'r');%fid=fopen(''C:UsersldgDesktop2011教案HuffmanTestfiles,'r')F=fread(fid);img=char(F');mx=255;[xyz]=size(img);h(1:mx)=0;disp('Histogrambuildingphasestarted....');fori=1:yiy=img(i);val=double(iy);h(val)=h(val)+1;end%endd
3、isp('Probabilitycalculatingphasestarted...');i=1:mxp(i)=h(i)/(x*y);j=1;fori=1:mxif(p(i)~=0)lst(j)=i;lst(j+1)=p(i);j=j+2;endend[tt,mx]=size(lst);disp('sortingphasestarted....');fori=2:2:mxforj=i:2:mxif(lst(i)>lst(j))temp1=lst(i-1);temp2=lst(i);lst(i-1)=lst(j-1);lst(i)=lst(j);lst(j-1)=temp1;lst(j
4、)=temp2;endendenddisp('BuildingHuffmanTree.....');fhtree1(lst,img);%huffman画树阶段functionHT=fhtree1(lst,img)[p,q]=size(lst);[tt,mx]=size(lst);sz1=q;xx=1;k1=0;prt=0;while(k1<1)k1=lst(2)+lst(4);prt=prt-1;lstn(xx)=lst(1);lstn(xx+1)=0;lstn(xx+2)=prt;xx=xx+3;lstn(xx)=lst(3);lstn(xx+1)=1;lstn(xx+2)=prt
5、;xx=xx+3;lst(1)=prt;lst(2)=k1;lst(3)=99;lst(4)=99;fori=2:2:mxforj=i:2:mxif(lst(i)>lst(j))temp1=lst(i-1);temp2=lst(i);lst(i-1)=lst(j-1);lst(i)=lst(j);lst(j-1)=temp1;lst(j)=temp2;endendendendlstn(xx)=lst(1);lstn(xx+1)=lst(2);lstn(xx+2)=lst(3);disp('Callingfhcode...')fhcode(lstn,img)%哈夫曼代码生成模块func
6、tionHC=fhcode(lstn,img)disp('Codegeneratingphaseentered...');[lm,ln]=size(lstn);ntt=ln-1;[im,in]=size(img);t=0;idd=input('Enterdestinationhuffmancodefilename:','s');tab=input('EntertheHuffTablename(fordecodingpurpose):','s');tb=fopen(tab,'w+');idd=fopen(idd,'w+');fst1='';fst2='';ed=0;din=0;disp
7、('BuildingHuffmanTable.........');fori=1:ink=img(i);ftemp=img(i);a=0;forj=1:3:lnif(lstn(j+2)==99)break;endif(lstn(j)==k)a=a+1;ary(a)=lstn(j+1);k=lstn(j+2);endendforb=a:-1:1t=t+1;hc(t)=ary(b);fprintf(idd,'%d',ary(b));fst1=int2str(a