ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:184.86KB ,
资源ID:2949570      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2949570.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于MATLAB的图像Huffman编码研究Word文件下载.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

基于MATLAB的图像Huffman编码研究Word文件下载.docx

1、3.5.1主流程图3.5.2编码流程图3.5.3解码流程图3.3组员任务分工王振宇:编写主要程序,编码解码函数程序及相关子程序,修改报告及演示文稿。龙航:编写部分主程序及部分函数程序,撰写报告。王一鸣:编写部分程序,进行程序调试完善,制作演示文稿。1.程序实现4.1函数主程序clc;clear;close all;X=imread(peppers.JPG);%图像灰度化R=X(:,:,1);G=X(:,2);B=X(:,3);Y=0.299*R+0.587*G+0.114*B;subplot(1,3,1);imshow(X);title(原始图像data=uint8(Y);zipped,inf

2、o=huffencode(data);%调用Huffman编码程序进行压缩unzipped=huffdecode(zipped,info);%调用Huffman编码程序进行解码%显示原始图像,灰度化图像和经编码解码后的图像subplot(1,3,2);imshow(data);灰度化图像subplot(1,3,3);imshow(unzipped);Huffman编码并解码后图像disp(平均码长L=info.avalen压缩比CR=info.ratio信息熵H=info.h编码效率CE=info.ce4.2编码程序%huffencode函数对输入矩阵vector进行Huffman编码,返回编

3、码后的数据及相关信息function zipped,info=huffencode(vector)if isa(vector,uint8)%确定输入矩阵是uint8格式 error(input argument must be a uint8 vectorendm,n=size(vector);%求输入矩阵的行列数vector=vector(:);%将矩阵按列转换成一列后转至,成为一个行向量(其中存放灰度值)f=frequency(vector);%计算各符号出现的概率symbols=find(f=0);%返回概率矩阵中非零元素的位置向量,作为符号向量f=f(symbols);%非零概率位置上

4、的概率值组成非零概率行向量f,sortindex=sort(f);%将符号按照出现的概率从小到大排序,并保留非零概率向量位置索引fs=f;symbols=symbols(sortindex);%读出原位置向量中的值(即概率向量中的位置),得到按概率排序后的符号向量len=length(symbols);%读取位置向量的长度symbols_index=num2cell(1:len);%生成从1开始以1递增,1行len列的细胞型矩阵codeword_tmp=cell(len,1);%创建一个len行1列的细胞型变量用于存放码字while length(f)1 %生成Huffman树,得到二进制码字

5、编码表 index1=symbols_index1; index2=symbols_index2; codeword_tmp(index1)=addnode(codeword_tmp(index1),uint8(0);%添加节点且该分支按0标记 codeword_tmp(index2)=addnode(codeword_tmp(index2),uint8(1);%添加节点且该分支按1标记 f=sum(f(1:2) f(3:end);%求出两个最小概率之和,列出其他概率,组成一个新的行向量 symbols_index=index1,index2 symbols_index(3:%合并已编码的符号

6、索引 f,sortindex=sort(f);%将新的概率向量按照概率从小到大排序 symbols_index=symbols_index(sortindex);%得到新的索引表codeword=cell(256,1);codeword(symbols)=codeword_tmp;%各符号二进制码字按原符号位存入细胞型矩阵len=0;for i=1:length(symbols)%得到各符号码长矩阵wordlen(i)=length(codeword_tmpi);avawordlen=fs*wordlen%计算平均码长Hlog=log2(fs)H=-(fs*Hlog);%计算信息熵for in

7、dex=1:length(vector) %得到整个图像各点灰度值转化为二进制码字后的总比特数 len=len+length(codeworddouble(vector(index)+1);string=repmat(uint8(0),1,len);%创建元素数与总比特数一致的行向量pointer=1;%定义指针变量length(vector) %对输入图像进行编码 code=codeworddouble(vector(index)+1;%对应符号的二进制码字给code len=length(code);%读取码字长度 string(pointer+(0:len-1)=code;%将二进制码字

8、存入行向量中 pointer=pointer+len;%指针移移位% 将二进制编码按照每8位生成一个新字符。len=length(string);zp=8-mod(len,8);if zp string=string uint8(zeros(1,zp);%不足8位的在后补零codeword=codeword(symbols);%码字按符号概率放入列向量中codelen=zeros(size(codeword);%创建与列向量元素数相同的列向量weights=2.(0:23);maxcodelen=0;length(codeword) len=length(codewordindex);%读二进

9、制码字长度 if len code=sum(weights(codewordindex=1);%计算二进制码字对应的十进制数 code=bitset(code,len+1);%将码字最高位的上一位置1 codewordindex=code; codelen(index)=len;%码字长度存入列向量中 endcodeword=codeword:;%转化为行向量%计算压缩后的向量cols=length(string)/8;string=reshape(string,8,cols);7);zipped=uint8(weights*double(string);%码表存储到一个稀疏矩阵huffcod

10、es=sparse(1,1);nnz(codeword) huffcodes(codeword(index),1)=symbols(index);%返回编码参数info.zeropad=zp;%info.zeropad是添加的比特数info.huffcodes=huffcodes;%info.huffcodes是Huffman码字表info.length=length(vector);%info.length是灰度化图像矩阵长度info.rows=m;%info.rows是灰度化图像行数info.cols=n;%info.cols是灰度化图像列数info.avalen=avawordlen;%

11、info.ratio是平均码长info.ratio=8/avawordlen;%info.ratio是压缩比info.h=H;%info.h是信息熵info.ce=H/avawordlen;%info.ce是计算编码效率%函数frequency计算各符号出现的概率function f=frequency(vector)ifisa(vector,) %确定矩阵是uint8格式 error(f=zeros(1,256);%设置一个256个元素都为0的行向量len=length(vector);%读取输入矩阵元素个数for index=0:1:255 f(index+1)=sum(vector=in

12、dex);%统计输入图像矩阵中0至255各值出现的个数,存入一个行向量中f=f./len;%求各符号值出现的概率%函数addnode添加节点确定符号码字function codeword_new=addnode(codeword_old,item)codeword_new=cell(size(codeword_old);%前一步码字维数作为新细胞型变量的维数,用于存放码字length(codeword_old)%确定符号对应码字 codeword_newindex=item codeword_oldindex;4.3译码程序%huffdecode函数对输入矩阵vector进行Huffman编码

13、,返回解压后的图像数据function vector=huffdecode(zipped,info)ifisa(zipped,)%确定压缩矩阵是uint8格式len=length(zipped);%读取压缩矩阵长度string=repmat(uint8(0),1,len*8);%创建全为0的行向量bitindex=(1:8);lenstring(bitindex+8.*(index-1)=uint8(bitget(zipped(index),bitindex);%读取压缩矩阵中的值并转化为8位二进制按顺序放入string矩阵中%开始解码51);vector=repmat(uint8(0),1,

14、info.length);%创建与灰度化图像行向量等长的行向量vectorindex=1;codeindex=1;code=0;len-1 code=bitset(code,codeindex,string(index);%按位读编码码字 codeindex=codeindex+1;%移位 byte=decode(bitset(code,codeindex),info);%进行码字匹配,读取相对应符号 if byte0%若读取到对应符号则进行下面操作,无符号继续按位读取码字 vector(vectorindex)=byte-1;%将符号表示的灰度值放入容器矩阵中 codeindex=1;%重置

15、 code=0; vectorindex=vectorindex+1;%容器指针移位vector=reshape(vector,info.rows,info.cols);%将构成的灰度矩阵按原图矩阵行列数重构,解码完成%函数decode返回码字对应的符号function byte=decode(code,info)byte=info.huffcodes(code);2.测试和调试运行结果:平均码长L=7.6057;压缩比CR=1.0518;信息熵H=7.5789;编码效率CE=0.9965平均码长L =6.9685;压缩比CR =1.1480;信息熵H =6.9427;编码效率CE =0.99

16、63经过多次测试和调整,最终编码结果正确,解码结果正确,程序运行正确。3.总结感谢李雷达老师教授数字视频技术课程并为我们安排了这次课程设计。通过这次课设,我们更深地熟悉和掌握了MATLAB程序设计方法和灰度图像Huffman的编码解码过程,学会了运用MATLAB平台对图像进行处理和分析。提高我们编程能力的同时,也让我们对编解码算法有了更深入的理解。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。在这次的课程设计中不仅检验了我们所学习的知识,也引发了我们对如何去把握一件事情,如何去做一件事情,如何完成一件事情等问题的思考。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督,提高了团队合作能力,学到了平时在课上学不到的知识,每个人都得到了很大的进步。通过这次数字视频技术课程设计,我们在多方面都有所提高。这次课程设计中,综合运用了本专业所学课程的理论知识。学会了在图像处理过程中,运用编程思维去实现某种功能或效果。在这次设计过程中,体现出自己的能力以及综合运用知识的能力,体会到了学有所用、学以致用的兴奋感和成就感,同时也暴露出了自己平时学习的不足和薄弱环节,进而加以弥补和改正。参考文献:1戴辉,卢益民.数字视频技术M.北京:北京邮电大学出版社,2012.

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2