2022年王鸣哈夫曼编码图像编解码系统方案及实现.docx

上传人:H****o 文档编号:57969039 上传时间:2022-11-06 格式:DOCX 页数:39 大小:703.90KB
返回 下载 相关 举报
2022年王鸣哈夫曼编码图像编解码系统方案及实现.docx_第1页
第1页 / 共39页
2022年王鸣哈夫曼编码图像编解码系统方案及实现.docx_第2页
第2页 / 共39页
点击查看更多>>
资源描述

《2022年王鸣哈夫曼编码图像编解码系统方案及实现.docx》由会员分享,可在线阅读,更多相关《2022年王鸣哈夫曼编码图像编解码系统方案及实现.docx(39页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用课程设计任务书同学姓名:王鸣专业班级:信息 sy1001 班指导老师:魏洪涛工作单位:信息工程学院题 目: 基于哈夫曼编码的图像编解码系统设计及实现初始条件:运算机Windows8 操作系统MATLAB7.8.0 软件要求完成的主要任务 : 设计哈夫曼编码的图像编解码系统、利用软件编写程序、仿真实现时间支配:第 1-18 周:理论讲解第 19 周:理论设计,试验室安装调试以及撰写设计报告答辩:时间: 7 月 2 日地点: 鉴主 15 楼通信试验室四指导老师签名:年月日名师归纳总结 系主任 或责任老师)签名:年月日第 1

2、 页,共 24 页- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用目录目录 I 摘要 II ABSTRACTIII 1 引言 1 1.1 图像数据压缩的目的 1 1.2 图像数据压缩的原理 1 1.3 常用的压缩编码方法 3 2 哈夫曼编码 3 2.1 哈夫曼编码简介 3 2.2 哈夫曼编码步骤 3 2.3 哈夫曼编码的缺点 5 3 基于哈夫曼编码的图像编解码系统的程序设计 6 3.1 分块程序设计分析 6 3.2 主程序 8 3.3 程序函数 8 3.3.1 编码函数 8 3.3.2 解码函数 12 3.3.3 符号概率运算函数 13 3

3、.3.4 节点添加函数 14 3.3.5 解码返回符号函数 14 4 系统仿真结果 15 4.1 程序运行结果 15 4.2 程序运行结果分析 16 5.总结 18 参考文献 19名师归纳总结 - - - - - - -第 2 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用摘要本论文第一介绍了图像压缩相关学问;随后,分析概述了哈夫曼压缩编码的原理及方 法,并采纳 MATLAB 软件对两幅图片进行压缩编码程序设计,获得压缩信息及哈夫曼编码 表,分析压缩后的图像像素数据及压缩比;关键词: 图像压缩; MATLAB ;哈夫曼编码;无损压缩编码名师归纳总结

4、 - - - - - - -第 3 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用ABSTRACT This paper firstly introduces the theoretical knowledgeof image compression. Then, it analyses the principle and method of Huffman codingand using Huffman coding principle and methods, compression coding design is made for two

5、images on the MATLAB software.Also gain the compression information and Huffman coding table.Whats more,compressed image pixel data and compression ratio are analyzed. Key words:Image compression; MATLAB ; Huffman encoding;Lossless compression coding名师归纳总结 - - - - - - -第 4 页,共 24 页精选学习资料 - - - - - -

6、 - - - 个人资料整理 仅限学习使用1引言1.1图像数据压缩的目的数字图像通常要求很大的比特数,这给图像的传输和储备带来相当大的困难;要占用很多的资源,花很高的费用;一般原始图像中存在很大的冗余度;例如 1;一幅 512x512 的灰度图象的比特数为512x512x8=256k ;例如 2;一部 90 分钟的彩色电影,每秒放映24帧;把它数字化,每帧512x512 象素,每象素的 R、G、B 三重量分别占 8 bit,总比特数为 90x60x24x3x512x512x8bit=97,200M;例如 3:一张 CD 光盘可存 600兆字节数据,这部电影光图像,对颜色辨论力弱,利用这些特点可以

7、在相应部分适当降低编码精度而使人从视觉上并不感觉到图像质量的 下降,从而达到对数字图像压缩的目的;图像压缩是通过删除图像数据中冗余的或者不必要的部分来减小图像数据量的技术,压 缩过程就是编码过程,解压缩过程就是解码过程;压缩技术分为无损压缩和有损压缩两大名师归纳总结 - - - - - - -第 5 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用类,前者在解码时可以精确地复原原图像,没有任何缺失;后者在解码时只能近似原图像,不能无失真地复原原图像;假设有一个无记忆的信源 概率是已知的 ,记为 Pai;就其信息量定义为 :,它产生的消息为 ai,1

8、iN,其显现的由此可见一个消息显现的可能性越小,其信息量就越多,其显现对信息的奉献量越大,反之亦然;信源的平均信息量称为“ 熵”entropy),可以表示为:对上式取以 2 为底的对数时,单位为比特 bits):依据香农 Shannon)无噪声编码定理,对于熵为H 的信号源,对其进行无失真编码所可能达到的最低比特数为,这里为一任意小的正数,因此可能达到的 最大压缩比:其中 B 是原始图像的平均比特率;在图像压缩中,压缩比是一个重要的衡量指标;可以定义压缩比为:图像的平均码字长度 R 为:编码效率 定义为 : 信息冗余度为:名师归纳总结 - - - - - - -第 6 页,共 24 页精选学习

9、资料 - - - - - - - - - 个人资料整理 仅限学习使用1.3常用的压缩编码方法图 1-1 常用的压缩编码方法2哈夫曼编码2.1 哈夫曼编码简介哈夫曼编码是哈夫曼博士在1952 年依据可变长正确编码定理提出的,它依据信源数据中各信号显现的频率安排不同长度的编码;即,对于显现概率大的信息符号编以短字长的码,对于 显现概率小的信息符号编以长字长的码;采纳哈夫曼编码方法的实质是针对统计结果对字符 本身重新编码,而不是对重复字符或重复子串编码,得到的单位像素的比特数最接近图像的 实际熵值;它是一种无损编码方法;2.2哈夫曼编码步骤其详细步骤如下:1.将信源符号按显现概率从大到小排成一列,然

10、后把最末两个符号的概率相加,合成一 个概率;2.把这个符号的概率与其余符号的概率按从大到小排列,然后再把最末两个符号的概率 加起来,合成一个概率;名师归纳总结 - - - - - - -第 7 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用3.重复上述做法,直到最终剩下两个概率为止;4.从最终一步剩下的两个概率开头逐步向前进行编码;每步只需对两个分支各给予一个 二进制码,如对概率大的给予码 0,对概率小的给予码 1;例如:假设信源符号为【a、b、c、d、e、f、g】,其显现的概率相应的为【0.25、0.025、0.025、0.05、0.35、0.2

11、5、0.05】,一共 7 个字符,对其进行哈夫曼编码,算法如 下:第一依据每个字符显现的频率大小从左到右排列:0.35、0.25、0.25、0.05、0.05、0.025、0.025;选出最小的两个值作为叶子节点构成一棵二叉树,值较大的叶子节点在左,两个叶子节点对应的频率之和作为根节点;把原排列中最小的两个节点删除,新的根节点插入排列保持大小从左到右的排列次序不变;重复执行2),直到最终得到值为1 的根节点;得到一棵哈夫曼树,如下图所示:图 2.1哈夫曼编码树在得到的哈夫曼树上左分支标记1,右分支标记 0,全部的字符依据其频率标记到对应的叶子节点上,从根节点到叶子节点路径上遇到的 0、1 字符

12、串即为对应叶子节点所在字符的编码; a、b、c、d、 e、f、g 七个字符的哈夫曼编码分别是:10、0001、0000、0011、名师归纳总结 - - - - - - -第 8 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用11、01、0010,可以看到 ,符号只能显现在树叶上 ,任何一个字符的路径都不会是另一字符路 径的前缀路径;2.3 哈夫曼编码的缺点哈夫曼编码虽然是正确编码,但存在一些缺点,详细如下:1)对于过短的文件进行编码,意义不大;由于储备哈夫曼树的信息需要肯定的储备空 间;2)利用哈夫曼编码,如用于通信网络,会引起较大的延时;3)对较

13、大文件进行编码,会显现频繁的磁盘读写拜访,降低了数据编码的速度;名师归纳总结 - - - - - - -第 9 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用3基于哈夫曼编码的图像编解码系统的程序设计3.1 分块程序设计分析1)第一,查找显现的全部元素,接着运算各元素显现的概率,并将元素依据显现概率 排列,产生码字;部分程序如下:function huffcode,info=codeingvector )p=probabilityvector ); %运算各元素显现的概率 simbols=findp ); %查找显现的全部元素 p=psimbols

14、);p,sortindex=sortp); %概率从小到大排列 simbols=simbolssortindex);%将元素依据显现概率排列 len=lengthsimbols);%产生码字 2)把显现的元素概率最小的两个相加合并成新的概率,与剩余的概率组成新的概率集 合,直到剩下最终两个概率;部分程序如下:while length1;index1=simbols_index1 ;index2=simbols_index2 ;codeword_tmp index1) =addnode codeword_ tmpindex1),uint80);codeword_tmp index2) =addn

15、ode codeword_ tmpindex2),uint81);p=sump1:2) p3:end);simbols_index =index1 index2 simbols_index3:end );p,sortindex=sortp); %将数据重新排列 simbols_index=simbols_indexsortindex);3)从最终一步开头反向进行安排码字,对于每次相加的两个概率,给大的赋“ 0”,小的赋“ 1”,储备到一个稀疏矩阵,最终写出 pad=8-mod0;string=string uint8zeros1,pad);end cols=lengthstring)/8;%运

16、算压缩后的向量 string=reshapestring,8,cols);weights=2.0:7);huffcode =uint8 weights*double string); % 编码字符串凑成一个 %字节一个字节存在 huffcode codeword=codewordsimbols); %储存实际有显现元素对应的码字 4)把整字节储备的 huffcode 一位一位取出,转为字符串,去掉原先为凑整字节数所添 加的零进行解码;部分解码程序如下:vector=zeros1,info.length,uint8); %解码 vectorindex=1;codeindex=1;code=0;f

17、or index=1:len;code=bitsetcode,codeindex,stringindex);codeindex=codeindex+1;byte =info.codetable bitset 0;vectorvectorindex)=byte-1;codeindex=1;code=0;vectorindex=vectorindex+1;5)显示编码的压缩信息 如压缩率、最大码长等),部分程序如下所示:whos data huffcode huffdecode %显示压缩成效 fprintfpad=%dn ,info.pad); %info.pad=为凑整字节数,编码字符 串最终

18、添加零的位数名师归纳总结 - - - - - - -第 11 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用fprintf ratio=%fn ,info.ratio); %info.ratio=压缩率fprintf ;data=uint8X ;zipped,info=huffencodedata unzipped=huffdecodezipped,info;subplot121 ;imshowdata ;title 原始图像 subplot122 ;imshowunzipped ;title 解码后的图像 whos data unzipped z

19、ipped fprintfpad=%dn,info.pad 的位数; %info.pad= 为凑整字节数,编码字符串最终添加零fprintfratio=%fn,info.ratio; %info.ratio=压缩率fprintfmaxcodelen=%dn,info.maxcodelen3.3程序函数 3.3.1编码函数 主程序中使用的函数代码如下;%info.maxcodelen= 最大码长名师归纳总结 - - - - - - -% 编码函数 %第 12 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用% 信息处理课群综合训练与设计- 基于哈夫曼编

20、码的图像编解码系统设计及实现%信息 SY1001班- 王鸣 -0121009320403 %huffencode 函数对输入矩阵 vector 进行 huffman 编码,返回编码后的向量及相关信 息function zipped,info= huffencodevector if isavector,uint8 erorinput argument must be a uint8 vector; end m,n=sizevector; vector=vector:; f=frequencyvector; symbols=findf=0; f=fsymbols; f,sortindex=sor

21、tf; symbols=symbolssortindex len=lengthsymbols; symbols_index=num2cell1:len codeword_tmp=celllen,1; while lengthf1 index1=symbols_index1; index2=symbols_index2; codeword_tmpindex1=addnodecodeword_tmpindex1,uint80 codeword_tmpindex2=addnodecodeword_tmpindex2,uint81; f=sumf1:2 f3:end; symbols_index=in

22、dex1,index2 symbols_index3:end f,sortindex=sortf; symbols_index=symbols_indexsortindex; end 名师归纳总结 codeword=cell256,1;第 13 页,共 24 页- - - - - - -精选学习资料 - - - - - - - - - codewordsymbols=codeword_tmp个人资料整理仅限学习使用; len=0; for index=1:lengthvector len=len+lengthcodeworddoublevectorindex+1; end string=rep

23、matuint80,1,len; pointer=1; for index=1:lengthvector code=codeworddoublevectorindex+1; len=lengthcode; stringpointer+0:len-1=code; pointer=pointer+len; end len=lengthstring; pad=8-modlen,8 if pad0 string=string uint8zeros1,pad; end codeword=codewordsymbols; codelen=zerossizecodeword weights=2.0:23;

24、maxcodelen=0; for index=1:lengthcodeword len=lengthcodewordindex; if lenmaxcodelen maxcodelen=len; end if len0 名师归纳总结 code=sumweightscodewordindex=1;第 14 页,共 24 页- - - - - - -精选学习资料 - - - - - - - - - code=bitsetcode,len+1;个人资料整理仅限学习使用; codewordindex=code codelenindex=len end end codeword=codeword:;

25、%运算压缩后的向量 cols=lengthstring/8; string=reshapestring,8,cols; weights=2.0:7; zipped=uint8weights*doublestring; % 码表储备到一个稀疏矩阵 huffcodes=sparse1,1; for index=1:nnzcodeword huffcodescodewordindex,1=symbolsindex; end % 填写解码时所需的结构信息 info.pad=pad; info.huffcodes=huffcodes info.ratio=cols./lengthvector info.

26、length=lengthvector info.maxcodelen=maxcodelen; info.rows=m; info.cols=n;%huffdecode 函数对输入矩阵 vector 进行 Huffman 编码,%返回解压后的图像数据名师归纳总结 - - - - - - -第 15 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用3.3.2解码函数% 解码函数 % 信息处理课群综合训练与设计- 基于哈夫曼编码的图像编解码系统设计及实现%信息 SY1001班- 王鸣 -0121009320403 %huffdecode 函数对输入矩阵

27、vector 进行 huffman 解码,返回解压后的图像数据function vector=huffdecodezipped,info if isazipped,uint8 errorinput argument must be a uint8 vector; end % 产生 0,1 序列,每位占一个字节 len=lengthzipped; string=repmatuint80,1,len.*8; bitindex=1:8; for index=1:len stringbitindex+8.*index-1=uint8bitgetzippedindex,bitindex; end str

28、ing=logicalstring:; len=lengthstring; stringlen-info.pad+1:end= len=lengthstring;%开头解码名师归纳总结 weights=2.0:51;第 16 页,共 24 页 vector=repmatuint80,1,info.length vectorindex=1; codeindex=1;- - - - - - -精选学习资料 - - - - - - - - - code=0;个人资料整理仅限学习使用 for index=1:len code=bitsetcode,codeindex,stringindex; code

29、index=codeindex+1; byte=decodebitsetcode,codeindex,info; if byte0 vectorvectorindex=byte-1; codeindex=1; code=0; vectorindex=vectorindex+1; end end vector=reshapevector,info.rows,info.cols;3.3.3符号概率运算函数% 函数 frequency 运算各符号显现的概率 % 信息处理课群综合训练与设计- 基于哈夫曼编码的图像编解码系统设计及实现%信息 SY1001班- 王鸣 -0121009320403 func

30、tion f=frequencyvector ifisavector,uint8 errorinput argument must be a uint8 vector;end f=repmat0,1,256;len=lengthvector;for index=0:255 findex+1=sumvector=uint8index;end 名师归纳总结 f=f./len;第 17 页,共 24 页- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用3.3.4节点添加函数% 函数 addnode 添加节点 % 信息处理课群综合训练与设计- 基于哈

31、夫曼编码的图像编解码系统设计及实现%信息 SY1001班- 王鸣 -0121009320403 function codeword_new=addnodecodeword_old,item codeword_new=cellsizecodeword_old;for index=1:lengthcodeword_old codeword_newindex=item codeword_oldindex;end 3.3.5解码返回符号函数% 函数 decode 返回码字对应的符号 % % 信息处理课群综合训练与设计- 基于哈夫曼编码的图像编解码系统设计及实现%信息 SY1001班- 王鸣 -0121

32、009320403 function byte=decodecode,info 名师归纳总结 byte=info.huffcodescode;第 18 页,共 24 页- - - - - - -精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用4系统仿真结果4.1程序运行结果依据设计好的程序加载到 MATLAB 软件中 即 m 文件 ,运行输出结果;(1) 挑选一幅位图图像 watch.bmp)进行哈夫曼编码压缩编码,得到输出结果如下:图 4-1 位图图像压缩编码输出结果 1 图 4-2 位图图像压缩编码输出结果 2 名师归纳总结 - - - - - - -第 19

33、页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用(2) 挑选一幅 jpg 图像 王鸣 .jpg)进行哈夫曼编码压缩编码,得到输出结果如下:图 4-3jpg 图像压缩编码输出结果 1 图 4-4jpg 图像压缩编码输出结果 2 4.2 程序运行结果分析1)图像压缩、解压缩整个过程大约要花 等会就会出结果;23 min,一开头不知道,以为死机,后来稍2)仔细观看原始图像和新图像,比较发觉:新旧的位图图像视觉成效相差不大,但是 其文件大小却变小了;如 watch 图像 262144bytes减小到 233877bytes;压缩率为 0.892170;由此可

34、说明,哈夫曼编码是一种无损压缩编码, 它不会造成信息缺失 , 解压缩时能够从压缩数名师归纳总结 - - - - - - -第 20 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用据精确地复原原始图像;3)比较两幅不同大小的位图的压缩比可知,对不同的信源,哈夫曼编码的压缩比不 同;4)后者为 jpg 彩色图像,有 RGB 三个重量,所以其输出有三个重量解码输出的图 像;名师归纳总结 - - - - - - -第 21 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用5.总结通过本次设计,我进一步巩固了哈夫曼

35、压缩编码基本原理及方法,学会了使用 MATLAB编写哈夫曼编码程序,并仿真实现基于哈夫曼编码的图像编解码系统;也初步明白图像压缩编码技术的应用和开发,进一步提高编程才能;此外,我对于 悉了;matlab 的有关操作也更加熟此外,在这次课程设计中开头调试程序时,解码的图像迟迟不能显示,以为 MATLAB软件死机,其实是哈夫曼编码有肯定的时间一般为 2-3 分钟),这是由于自己的不耐心而导致了这个问题;所以我从中习得不管做什么设计、工程,耐心最重要;当未出结果的时候,我们不能一味的焦躁,而是应当冷静的分析,找出问题的所在;总之这次设计,我受益匪浅;名师归纳总结 - - - - - - -第 22

36、页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用参考文献1 冈萨雷斯 .数字图像处理 M. 北京 .电子工业出版社 .2005. 2 王新成 .高级图像处理技术 M. 第一版 ,北京.中国科学技术出版社 . 2 0 0 1. 3 孙仲康 ,等.数字图像处理及其应用 M. 北京.国防工业出版社 .1985. 4 董士海 ,等.图像格式编程指南 M. 北京 .清华高校出版社 , 1994. 5Ian H Witten. 张仲颖 ,曹文斌 ,曹永革 ,译.海量数据治理 -文档和图像的压缩与索引 .北京.科学 出版社 .1996.6 夏良正 . 数字图像处理

37、 M . 南京 .东南高校出版社 . 2002. 7 陈守吉 , 张立明 . 分形与图像压缩 M . 上海科技训练出版社 . 1998. 8 陈衍仪 . 图像压缩的分形理论和方法 M . 国防工业出版社 , 1997. 9 王防修 , 周康 . 通过哈夫曼编码实现文件的压缩与解压 J.武汉工业学院学报 .2022. 专业综合课程设计成果评定表名师归纳总结 - - - - - - -第 23 页,共 24 页精选学习资料 - - - - - - - - - 个人资料整理 仅限学习使用姓 名 王鸣 性别 男专业、班级 信息 sy1001班 学号 0121009320403 题 目: 基于哈夫曼编码的图像编解码系统设计及实现答辩或质疑记录:1)简述一下哈夫曼编码的原理?答:哈夫曼编码依据信源数据中各信号显现的频率安排不同长度的编码;即对于显现概率大的信息符号编以短字长的码,对于显现概率小的信息符号编以长字长的码;它是一种无损编码方法;2)哈夫曼编码的步骤是什么?答: 1.将信源符号按显现概率从大到小排成一列,然后把最末两个符号的概率相加,合成一个概率;2.把这个符号的概率与其余符号的概率按从大到小排列,然后再把最末两个符号的概率加起来,合成一个概率; 3.重复上述做法,直到最终剩下两个概率为止;4.从最终一步剩下的两个概率开

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁