Huffman编码(哈夫曼编码)的Matlab实现_第1页
Huffman编码(哈夫曼编码)的Matlab实现_第2页
Huffman编码(哈夫曼编码)的Matlab实现_第3页
Huffman编码(哈夫曼编码)的Matlab实现_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、clea r allf printf ( Re a ding data、)d ata= imreadC camera man、tif);da t a=uin t 8 (da t a) ;%读入数据,井将数据限制为u i n t 8fprintfC Done!n)%编码压缩fprintf pre s sing da t a、):z i pp e d, info = n orm 2 huff (data):fprintfC D one!n )%解压缩fp rin t f (* pressing data、);u nzi p ped=h u ff 2 n o r m(zi p ped, in f 0

2、 );f p r intf ( Done!n* )%测试就能否无失貞.isOK=i s e qua 1 (data(:)unz i pp ed(:)%显示压缩效果whos da t a z ippe d u n z i ppedfun c ti 0 n zi pp ed, info =norm2 h u f f ( v e c t or)if isa( Y ect o r, uint 8 *)er r or C i npu tar gume n t must be a uint 8 vector*)endvecto r =ve c t o r (:):%将输入向量转换为行向量f=freq u

3、en c y (vec t or);%讣算个元素出现猖概率sirabo I s=fi n d (f=0);f=f(simbols);%W元素按出现得概率排列f, s 0 rti n d ex = s ot (f ):simbols = simbols( s ortindex):%产生码字 ge n e r ate the c odeword as the 5 2 bi t s of a do u bl elen= 1 e ng t h( s imb o Is);s i mb 0 ls_in d ex=num2cell (1: len);c odew 0rd_tmp= c elKle n , 1

4、 ):wh i le le n g t h ( f )1,ind exl= s imb o ls_index;index 2 =simb o 1 s _in d ex 2 ;codeword_tm p (i n dexl)=a d dnod e( c odeword_tmp (ind e xl) .u i n t8(0); c 0 d e w 0 rd_ t mp( ind ex2) = a ddno d e (co d e word_tm p (index 2 ), u i ntS (1 ):f=sum (f(1:2) fC3:end);simbols_in d e x= i n d e x

5、 1 i n d e x2 simb o ls_ i ndex (3:e n d );%将数据重新排列,就是两个右点得频率尽量与前一个iT点得频率想肖r esort da t a in orde r to h av e two no d es w i th ! ov e r fr e que n cy asfirst toft so r ti n dex=sort(f):sim b ols_index=s i mbols_index(so r tindex):end$对应相应得元素与码字codew ord =cell( 2 56 :1);c odew 0 r d (sim b ols)=cod

6、ew o rd_tmp:%讣算总得字符串长度len=0:for index=l: length (vector) le n =1 e n+ 1 ength (codew ord doubl e (vector (index) )+1): end%产生01序列st r ing=repraa t (u i n t8(0) I en);poin t er= I :for inde x =1:1 e ngth(vect or),co d e=cod eworddou b 1 e(v e ct o r (inde x )+1;le n =length(co de);strin s (pointer+(0

7、 :len-l) =code;poin t e r=poin t er+len:en d%如果需要,加零len= 1 ength ( s tring);p ad=8-mod (1 e n, 8);辻 pad 0 ,s t ring= s tring u in t 8(zeros(1 , pad);end财呆存实际有用得码字cod e wo r d=co d ew o rd (simbo 1 s);c ode I en=z e r o s (s i ze (codewor d );weigh t s=2、* (0:23);max c ode I e n= 0 ;1 e nm a s c od e

8、 1 e n,max cod e le n =len:n d1 e n0rc 0 de=sum(w e ig li t s ( codeword index =1): cod e =bitset(cod e , le n +1);cod eword i nd ex =code:co d ele n (ind e x) =len;e iffo r ind ex 1; length ( cod ew ord), len=lengt h (cod e wordi n de x ); ifen dend co d eword= code wor d :%汁算压缩后得向量co ls= I eng t h

9、( s tri n g) / 8 ;s t r i ng= r eshape (strin g , 8, co 1 s);weights=2、* ( 0 : 7 );zip p e d = U intS (weights*d o u b 1 e (st ring):%存储一个稀疏矩阵h uf f c 0 des=sp arse (1, 1);% init s p arse ma t r ixfor in d e x=l: nu me 1 ( c odeword),huffcod e s( c o dewo r d (ind e x),1 ) =s i m b ols (index):end瓯产

10、生信息结构体i nfox pad = pad ;info、rati o =cols、/leng t h(v e c tor):i n fox 1 en g th=l e ngth(vec t or);info, max c od e len=maxc o de 1 en;fun c t i 0 n codewor d _new=a d dno d e (co d eword_old, item)codew ord _ne w=cell ( s iz e (cod e word_ol d ):for index=l;lens t hCcodewor d _old),c 0 d e w 0 rd_

11、newin dex=Eitemcod ewo r d _oldi n de x ;endfu n c t ion v e c t or=huf f 2norm (zipped, info)%HVFF2X0RI Huffman 解码器%IIVFF2N0RM(X, INFO)根据倚息体结构info返回向星zipped得解码结果%矩阵参数以X(:)形成输入i f 2 i S a ( Z i P ped, uintS*).error ( i n pu t a r gumen t mus t be a uintS vector)end%产生01序列1 e n=l e ngth(zi p p ed);st

12、r i ng=repma t (uint 8 (0) ,1, len * 8 );b it i n dex= 1 :8;for i n d e s+1: I en,s t r in s (b i tindes+g、* (ind e x -1) =uint8( b itget ( z ipped(index), bitind ex);end%调整字符串st r ing= I 0 gica 1 (st r ing (:); % remove 0 padd i n g1 e n =lengt h ( s t ring);%解码weig h t s =2、* (0:51):V ecto r =re p

13、 mat (uintS ( 0 ) , 1 , in f o, length);vec t orind e x=l;c 0 deinde x =1:c 0 de=O;for i n d ex=l: le n ,code=bit s et(coder cod e i n des, s t r i ng (ind ex); codein d e x=c o de i n d ex+ 1 ;byte=dec o de ( b i t set ( c o de, codei n dex), i n f o): if by t e0- %V e ctor ( V ector i n d ex) =byte-l;cod ei n d e x= 1 :code = 0;vecto r i n d e X = V ect o rindex+ 1 ;endendfu n Ct i 0 n b yt e =d e code (code, i nfo)b y te=in f o、huf f cod e s (code);func t ion f=frequ e ncy (v e ct o r )幣FREQUENCY计算元素出现概率I fisa(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论