信息论大作业2课件Word文档格式.docx
- 文档编号:20184936
- 上传时间:2023-01-17
- 格式:DOCX
- 页数:20
- 大小:596.11KB
信息论大作业2课件Word文档格式.docx
《信息论大作业2课件Word文档格式.docx》由会员分享,可在线阅读,更多相关《信息论大作业2课件Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
s5=0111
2、算术编码是一种无损数据压缩方法,也是一种熵编码的方法。
和其它熵编码方法不同的地方在于,其他的熵编码方法通常是把输入的消息分割为符号,对每个符号进行编码。
而算术编码是直接把整个输入的消息编码为一个数,一个满足(0.0
≤
n
<
1.0)的小数n。
所以用两个基本的参数:
符号的概率和它的编码间隔。
信源符号的概率决定压缩编码的效率,也决定编码过程中信源符号的间隔,而这些间隔包含在0到1之间。
算术编码的算法思想如下:
(1)
对一组信源符号按照符号的概率从大到小排序,将[0,1)设为当前分析区间。
按信源符号的概率序列在当前分析区间划分比例间隔。
(2)检索“输入消息序列”,锁定当前消息符号(初次检索的话就是第一个消息符号)。
找到当前符号在当前分析区间的比例间隔,将此间隔作为新的当前分析区间。
并把当前分析区间的起点(即左端点)指示的数“补加”到编码输出数里。
当前消息符号指针后移。
(3)仍然按照信源符号的概率序列在当前分析区间划分比例间隔。
然后重复第
二步。
直到“输入消息序列”检索完毕为止。
(4)最后的编码输出数就是编码好的数据。
3、LZ编码原理简介:
1965年苏联数学家Kolmogolov提出利用信源序列的结构特性来编码。
而两位以色列研究者J.Ziv和A.Lempel独辟蹊径,完全脱离Huffman及算术编码的设计思路,创造出了一系列比Huffman编码更有效,比算术编码更快捷的通用压缩算法。
将这些算法统称为LZ系列算法。
Ziv和Lempel于1977年提出了LZ77算法[Ziv&
Lempel(1977)]。
1984年,二人又提出了改进算法,后被命名为LZ78[Ziv&
Lempel(1978)]。
1984年,T.A.Welch提出了LZ78算法的一个变种,即LZW算法[Welch(1984)]。
1990年后,T.C.Bell等人又陆续提出了许多LZ系列算法的变体或改进版本[Bell等(1990)]。
LZ系列算法用一种巧妙的方式将字典技术应用于通用数据压缩领域,而且,可以从理论上证明LZ系列算法同样可以逼近信息熵的极限。
以LZ78算法为例:
设信源符号集A={a1,a2,…,aK}共K个符号,设输入信源符号序列为u=(u1,u2,…,uL)编码是将此序列分成不同的段。
分段的规范为:
尽可能取最少个相连的信源符号,并保证各段都不相同。
开始时,先取一个符号作为第一段,然后继续分段。
若出现与前面相同的符号时,就再取紧跟后面的一个符号一起组成一个段,使之与前面的段不同。
这些分段构成字典。
当字典达到一定大小后,再分段时就应查看有否与字典中的短语相同,若有重复就添加符号,以便与字典中短语不同,直至信源序列结束。
编码的码字由段号加一个符号组成。
设u构成的字典中的短语共有M(u)个。
若编码为二元码,段号所需码长n=「logM(u)「(注:
代表上取整符号),每个符号需要的码长为「logK「。
单符号的码字段号为0,非单字符的码字段号为除最后一个符号外字典中相同短语的段号。
LZ编码的编码方法非常简捷,译码也很简单,可以一边译码一边建立字典,只要传输字典的大小,无需传输字典本身。
当编码的信源序列增长时,编码效率会提高,平均码长会逼近信源熵。
三、实验结果
(1)对该图片求霍夫曼编码
由第一次实验,该图片的熵为11号的熵
>
Hx(A)
ans=
7.0427
计算得编码效率熵除以码长0.9367
(2)对该图片求算术编码
编码效率0.9999
(3)对该图片求lz编码
编码效率0.9845
四、结果分析
由以上各编码的编码效率分析,不难看出,对于霍夫曼编码,算术编码,lz编码,对该图片的编码效率最高的是霍夫曼编码,霍夫曼编码效率相比较之下较低,lz编码在运行的时候耗时较长,个人认为不太实用。
哈夫曼编码所形成的码字不是唯一的,但编码效率是唯一的在对最小的两个概率符号赋值时,可以规定为大的为“1”、小的为“0”,反之也可以。
如果两个符号的出现概率相等时,排列时无论哪个在前都是可以的,所以哈夫曼所构造的码字不是唯一的,对于同一个信息源,无论上述的前后顺序如何排列,它的平均码长是不会改变的,所以编码效率是唯一的。
(2)只有当信息源各符号出现的概率很不平均的时候,哈夫曼编码的效果才明显。
(3)哈夫曼编码必须精确地统计出原始文件中每个符号的出现频率,如果没有这些精确的统计,将达不到预期的压缩效果。
霍夫曼编码通常要经过两遍操作,第一遍进行统计,第二遍产生编码,所以编码速度相对慢。
另外实现的电路复杂,各种长度的编码的译码过程也是比较复杂的,因此解压缩的过程也比较慢。
(4)哈夫曼编码只能用整数来表示单个符号而不能用小数,这很大程度上限制了压缩效果。
(5)哈夫曼所有位都是合在一起的,如果改动其中一位就可以使其数据变得面目全非
算术编码与霍夫曼编码的比较:
从实验的结果中可以发现,霍夫曼编码和算术编码都有着非常高的编码效率.算术编码比霍夫曼编码的编码效率略高一些。
但是,在网上搜集的资料,有如下介绍:
在算术编码和哈夫曼编码之间有很大的相似性--实际上,哈夫曼编码只是算术编码的一个特例--但是由于算术编码将整个消息翻译成一个表示为基数b,而不是将消息中的每个符号翻译成一系列的以b为基数的数字,它通常比哈夫曼编码更能达到最优熵编码。
Lz编码:
由于程序的限制,本次实验只对一张很小的图片经行了LZ编码,由结果可以看出,相较于前两种的编码,LZ编码的效率非常低。
但是本实验效率低下的原因并不能说明此编码是比较差的,因为20×
20的图像所产生的序列非常短,随着序列长长度的不断增加,LZ编码的效率也会不断提高。
总体来说,霍夫曼编码最适合实际应用。
五、实验感悟
通过本次试验,我们掌握了三种编码的原理和方法,更重要的是掌握了MATLAB图形界面GUI的使用方法。
刚开始做实验时感觉GUI很难,毕竟从前谁也没有接触过这方面的知识,但经过查阅资料以及在做实验的过程中的不断摸索,终于终做出了完整的GUI,比较完满的完成了这次实验。
六、程序代码
1、霍夫曼
functionvarargout=huffman(varargin)
%HUFFMANM-fileforhuffman.fig
%HUFFMAN,byitself,createsanewHUFFMANorraisestheexisting
%singleton*.
%
%H=HUFFMANreturnsthehandletoanewHUFFMANorthehandleto
%theexistingsingleton*.
%HUFFMAN('
CALLBACK'
hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinHUFFMAN.Mwiththegiveninputarguments.
Property'
'
Value'
...)createsanewHUFFMANorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforehuffman_OpeningFunctiongetscalled.An
%unrecognizedpropertynameorinvalidvaluemakespropertyapplication
%stop.Allinputsarepassedtohuffman_OpeningFcnviavarargin.
%*SeeGUIOptionsonGUIDE'
sToolsmenu.Choose"
GUIallowsonlyone
%instancetorun(singleton)"
.
%Seealso:
GUIDE,GUIDATA,GUIHANDLES
%Copyright2002-2003TheMathWorks,Inc.
%Edittheabovetexttomodifytheresponsetohelphuffman
%LastModifiedbyGUIDEv2.507-Oct-201120:
57:
31
%Begininitializationcode-DONOTEDIT
gui_Singleton=1;
gui_State=struct('
gui_Name'
mfilename,...
'
gui_Singleton'
gui_Singleton,...
gui_OpeningFcn'
@huffman_OpeningFcn,...
gui_OutputFcn'
@huffman_OutputFcn,...
gui_LayoutFcn'
[],...
gui_Callback'
[]);
ifnargin&
&
ischar(varargin{1})
gui_State.gui_Callback=str2func(varargin{1});
end
ifnargout
[varargout{1:
nargout}]=gui_mainfcn(gui_State,varargin{:
});
else
gui_mainfcn(gui_State,varargin{:
%Endinitializationcode-DONOTEDIT
%---Executesjustbeforehuffmanismadevisible.
functionhuffman_OpeningFcn(hObject,eventdata,handles,varargin)
%Thisfunctionhasnooutputargs,seeOutputFcn.
%hObjecthandletofigure
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%varargincommandlineargumentstohuffman(seeVARARGIN)
%Choosedefaultcommandlineoutputforhuffman
handles.output=hObject;
%Updatehandlesstructure
guidata(hObject,handles);
%UIWAITmakeshuffmanwaitforuserresponse(seeUIRESUME)
%uiwait(handles.figure1);
%---Outputsfromthisfunctionarereturnedtothecommandline.
functionvarargout=huffman_OutputFcn(hObject,eventdata,handles)
%varargoutcellarrayforreturningoutputargs(seeVARARGOUT);
%Getdefaultcommandlineoutputfromhandlesstructure
varargout{1}=handles.output;
%---Executesonbuttonpressinpushbutton1.
functionpushbutton1_Callback(hObject,eventdata,handles)
globalhead
[filename,pathname]=uigetfile('
11.jpg'
___'
);
head=strcat(pathname,filename);
a=imread(head);
axes(handles.axes1);
imshow(head);
a=rgb2gray(a);
%_¶
Á
È
ë
º
ó
×
Î
ª
.jpgµ
Ä
Í
¼
Æ
¬
_²
¢
½
¨
ä
»
Ò
¶
Ö
µ
¾
Ø
Õ
¡
£
________________
[m,n]=size(a);
%___mÎ
Ð
Ê
ý
nÎ
_____
p=zeros(1,256);
%_½
¸
ö
1*256µ
Ó
Ã
Ú
·
Å
¿
Â
__________________
fork=0:
255
p(k+1)=length(find(a==k))/(m*n);
%__Ç
²
«
p¾
____________________________________
iflength(find(p<
0))~=0
error('
Notaprob,negative,component'
ifabs(sum(p)-1)>
10e-10
Notaprob,vector,componentdonotaddto1'
n=length(p);
q=p;
m=zeros(n-1,n);
fori=1:
n-1
[q,l]=sort(q);
m(i,:
)=[l(1:
n-i+1),zeros(1,i-1)];
q=[q
(1)+q
(2),q(3:
n),1];
c(i,:
)=blanks(n*n);
c(n-1,n)='
1'
;
c(n-1,2*n)='
0'
fori=2:
c(n-i,1:
n-1)=c(n-i+1,n*(find(m(n-i+1,:
)==1))-(n-2):
n*(find(m(n-i+1,:
)==1)));
c(n-i,n)='
c(n-i,n+1:
2*n-1)=c(n-i,1:
n-1);
c(n-i,2*n)='
forj=1:
i-1
c(n-i,(j+1)*n+1:
(j+2)*n)=c(n-i+1,n*(find(m(n-i+1,:
)==j+1)-1)+1:
n*find(m(n-i+1,:
)==j+1));
end
n
h(i,1:
n)=c(1,n*(find(m(1,:
)==i)-1)+1:
find(m(1,:
)==i)*n);
ll(i)=length(find(abs(h(i,:
))~=32));
l=sum(p.*ll);
fiden=fopen('
encode.txt'
w'
fwrite(fiden,h);
fclose(fiden);
set(handles.edit2,'
string'
l);
set(handles.edit1,'
h);
%hObjecthandletopushbutton1(seeGCBO)
%---Executesonbuttonpressinpushbutton2.
functionpushbutton2_Callback(hObject,eventdata,handles)
%hObjecthandletopushbutton2(seeGCBO)
close
functionedit1_Callback(hObject,eventdata,handles)
%hObjecthandletoedit1(seeGCBO)
%Hints:
get(hObject,'
String'
)returnscontentsofedit1astext
%str2double(get(hObject,'
))returnscontentsofedit1asadouble
%---Executesduringobjectcreation,aftersettingallproperties.
functionedit1_CreateFcn(hObject,eventdata,handles)
%handlesempty-handlesnotcreateduntilafterallCreateFcnscalled
%Hint:
editcontrolsusuallyhaveawhitebackgroundonWindows.
%SeeISPCandCOMPUTER.
ifispc
set(hObject,'
BackgroundColor'
white'
get(0,'
defaultUicontrolBackgroundColor'
));
functionedit2_Callback(hObject,eventdata,handles)
%hObjecthandletoedit2(seeGCBO)
)returnscontentsofedit2astext
))returnscontentsofedit2asadouble
functionedit2_CreateFcn(hObject,eventdata,handles)
%handlesempty-handles
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息论 作业 课件