实验一信息熵与图像熵计算正确.docx
- 文档编号:26276241
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:49
- 大小:932.80KB
实验一信息熵与图像熵计算正确.docx
《实验一信息熵与图像熵计算正确.docx》由会员分享,可在线阅读,更多相关《实验一信息熵与图像熵计算正确.docx(49页珍藏版)》请在冰豆网上搜索。
实验一信息熵与图像熵计算正确
实验一信息熵与图像熵计算(2学时)
一、实验目的
1.复习MATLAB的基本命令,熟悉MATLAB下的基本函数;
2.复习信息熵基本定义,能够自学图像熵定义和基本概念。
二、实验内容
1.能够写出MATLAB源代码,求信源的信息熵;
2.根据图像熵基本知识,综合设计出MATLAB程序,求出给定图像的图像熵。
三、实验仪器、设备
1.计算机-系统最低配置256M内存、P4CPU;
2.MATLAB编程软件。
四实验流程图
五实验数据及结果分析
四、实验原理
1.MATLAB中数据类型、矩阵运算、图像文件输入与输出知识复习。
2.利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。
自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。
所发出的消息不同,它们所含有的信息量也就不同。
任何一个消息的自信息量都代表不了信源所包含的平均自信息量。
不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量:
1()1()[log]()log()iniipaiHEpapaX
信息熵的意义:
信源的信息熵H是从整个信源的统计特性来考虑的。
它是从平均意义上来表征信源的总体特性的。
对于某特定的信源,其信息熵只有一个。
不同的信源因统计特性不同,其熵也不同。
3.学习图像熵基本概念,能够求出图像一维熵和二维熵。
图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。
图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为:
2550logiiippH
图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。
选择图像的邻域灰度均值作为灰度2
分布的空间特征量,与图像的像素灰度组成特征二元组,记为(i,j),其中i表示像素的灰度值(0<=i<=255),j表示邻域灰度(0<=j<=255),
2(,)/ijpfijN
上式能反应某像素位置上的灰度值与其周围像素灰度分布的综合特征,其中f(i,j)为特征二元组(i,j)出现的频数,N为图像的尺度,定义离散的图像二维熵为:
2550logijijippH
构造的图像二维熵可以在图像所包含信息量的前提下,突出反映图像中像素位置的灰度信息和像素邻域内灰度分布的综合特征。
五、实验步骤
1.求解信息熵过程:
(1)输入一个离散信源,并检查该信源是否是完备集;
(2)去除信源中符号分布概率为零的元素;
(3)根据平均信息量公式,求出离散信源的熵。
2.图像熵计算过程:
(1)输入一幅图像,并将其转换成灰度图像;
(2)统计出图像中每个灰度阶象素概率;
(3)统计出图像中相邻两象素的灰度阶联合分布矩阵;
(4)根据图像熵和二阶熵公式,计算出一幅图像的熵。
六、实验报告要求
1.按照本节内容后实验报告形式书写;
2.实验总结和心得要详细,可以根据自己实验情况,写出建议。
七、实验注意事项
1.MATLAB语言课下多复习,尽量采用模块化编程方法,通过函数调用形式运行程序。
2.仔细理解、体会图像熵的概念,能够将其联合熵的概念理解透彻。
八、思考题
举例说明图像熵、信息熵在现实中有何实践指导意义?
附录1:
实验报告样式:
实验报告
班级:
姓名:
学号:
组别:
同组人:
课程名称:
实验室:
实验时间:
(使用实验报告纸的,以上内容可按照实验报告纸格式填写)
实验一信息熵与图像熵计算3
一、实验目的:
二、实验内容与原理:
三、实验器材(设备、元器件、软件工具、平台):
四、实验步骤:
五、程序流程图:
六、实验数据及结果分析:
七、实验结论:
八、思考题:
九、编程、调试过程中遇到的问题及解决方法:
十、其他:
实验总结、心得体会及对本实验方法、手段及过程的改进建议等。
附录2:
图像一维二维熵程序:
closeall;clc;
I=imread('11.bmp');
img=rgb2gray(I);
imview(I),imview(img);
[ix,iy]=size(img);
P1=imhist(img)/(ix*iy);
temp=double(img);
temp=[temp,temp(:
1)];
CoefficientMat=zeros(256,256);
forx=1:
ix
fory=1:
iy
i=temp(x,y);j=temp(x,y+1);
CoefficientMat(i+1,j+1)=CoefficientMat(i+1,j+1)+1;
end
end
P2=CoefficientMat./(ix*iy);
H1=0;H2=0;
fori=1:
256
ifP1(i)~=0
H1=H1-P1(i)*log2(P1(i));
end
forj=1:
256
ifP2(i,j)~=0
H2=H2-P2(i,j)*log2(P2(i,j));
end
end
end
H2=H2/2;
sprintf('1ordimageentropyis:
%d',H1)
sprintf('2ordimageentropyis:
%d',H2)
实验二香农编码(2个学时)
一、实验目的
1.了解香农编码的基本原理及其特点;
2.熟悉掌握香农编码的方法和步骤;
3.掌握MATLAB编写香农编码的程序。
二、实验内容
1.根据香农编码的方法和步骤,用香农编码编写程序;
2.用编写的源程序验证书中例题的正确性。
三、实验仪器、设备
1.计算机-系统最低配置256M内存、P4CPU;
2.MATLAB编程软件。
四、实验原理
1.香农编码原理:
香农第一定理指出了平均码长与信源之间的关系,同时也指出了可以通过编
码使平均码长达到极限值,这是一个很重要的极限定理。
香农第一定理指出,选
择每个码字的长度iK满足下式:
I(Xi)KI(Xi)1,i
就可以得到这种码,这种编码方法就是香农编码。
2.香农编码算法:
1.将信源消息符号按其出现的概率大小依次排列:
12nP(X)P(X),,P(X)
2.确定满足下列不等式整数码长iK;
log2p()log2()1iiixKpx
3.为了编成唯一可译码,计算第i个消息的累加概率;
1
1
()
i
ik
k
ppx
4.将累加概率iP变成二进制数;
5.取iP
二进制数的小数点后iK位即为该消息符号的二进制码字。
五、实验步骤
1.根据实验原理,设计香农编码程序;
2.输入一组信源消息符号概率,可以求香农编码、平均码长和编码效率。
六、实验报告要求
5
1.按照本节内容后实验报告形式书写;
2.实验总结和心得要详细,可以根据自己情况写出建议。
七、实验注意事项
1.香农编码是符号概率大的用短表示,小长程序中香农编码是符号概率大的用短表示,小长程序中香农编码是符号概率大的用短表示,小长程序中需要对概率进行排序,此我们调用MATLABMATLABMATLABMATLABMATLAB的库函数;
2.最后需要注意的是,求得码字依次与排序符号概率对应;
3.向无穷方取最小正整数位ceilceilceil函数。
八、思考题
举例说明香农编码在现实中有际作用,列一个子并简要说明?
附录1:
实验报告样式:
实验报告
班级:
姓名:
学号:
组别:
同组人:
课程名称:
实验室:
实验时间:
(使用实验报告纸的,以上内容可按照实验报告纸格式填写)
实验二香农编码
一、实验目的:
二、实验内容与原理:
三、实验器材(设备、元器件、软件工具、平台):
四、实验步骤:
五、程序流程图:
六、实验数据及结果分析:
七、实验结论:
八、思考题:
九、编程、调试过程中遇到的问题及解决方法:
十、其他:
实验总结、心得体会及对本实验方法、手段及过程的改进建议等。
附录2:
香农编码程序:
closeall;
clc;
n=input('输入信源符号个数:
');
p=zeros(1,n);
fori=1:
n
p(1,i)=input('输入信源符号概率:
');
end
ifsum(p)<1||sum(p)>1
error('输入概率不符合概率分布')
end
6
y=fliplr(sort(p));
D=zeros(n,4);
D(:
1)=y';
fori=2:
n
D(1,2)=0;
D(i,2)=D(i-1,1)+D(i-1,2);
end
fori=1:
n
D(i,3)=-log2(D(i,1));
D(i,4)=ceil(D(i,3));
end
D
A=D(:
2)';
B=D(:
4)';
Code_length=0;
forj=1:
n
Code_length=Code_length+p(j)*D(j,4);
end
H=0;
forj=1:
n
H=H+p(j)*log2(1/p(j));
end
forj=1:
n
fprintf('输入信源符号概率为%f的码字为:
',p(1,j));
C=deczbin(A(j),B(j));
disp(C)
end
Efficiency=H/(Code_length)
fprintf('平均码长:
\n');
disp(Code_length)
fprintf('\n香农编码效率:
\n');
disp(Efficiency)
A:
累加概率;B:
码子长度。
:
码子长度。
function[C]=deczbin(A,B)
C=zeros(1,B);temp=A;
fori=1:
B
temp=temp*2;
iftemp>1
temp=temp-1;
C(1,i)=1;
else
C(1,i)=0;
end
end
7
实验三费诺编码(2学时)
一、实验目的
掌握费诺编码方法的基本步骤及优缺点。
二、实验内容
对于给定的信源的概率分布,按照费诺编码的方法进行计算机实现。
三、实验仪器、设备
1.计算机-系统最低配置256M内存、P4CPU;
2.MATLAB编程软件。
四、实验原理
1.费诺编码原理:
费诺编码就是通过使编码中各个句号出现的概率大致相等,实现概率均匀化,
从而减少冗余度,提高编码效率。
凡是能载荷一定的信息量,且码字的平均长度
最短,可分离的变长码的码字集合称为最佳变长码。
在编N进制码时首先将信
源消息符号按其出现的额概率一次又小到大排列开来,并将排列好的心愿符号按
概率值分N大组,使N组的概率之和近似相同,并对各组赋予一个N进制码元
0、1...N-1。
之后再针对每一个大组内的心愿符号做如上处理,即再分为概率相
同的N组,赋予N进制码元。
如此重复,直到每组只剩下一个心愿符号为止。
此时每个信源符号所对应的码字即为费诺码。
针对同一个心愿,费诺码比香农码
平均码长小,消息出书速率大,编码效率高。
费诺编码是一种信源编码,它编码
后的费诺码要比香农码的平均码长小,消息传输速率大,编码效率高。
但它属于
概率匹配编码它不是最佳的编码方法。
2.费诺编码算法:
(1)将信源消息符号按其出现的概率大小依次排列:
12()()...()nPXPXPX
(2)将依次排列的信源符号按概率值分为两大组,使两个组的概率之和近
似相同,并对各组赋予一个二进制码元“0”和“1”;
(3)将每一大组的信源符号再分成两组,使划分后的两个组的概率之和近
似相同,并对各组赋予一个二进制符号“0”和“1”;
(4)如此重复,直至每个组只剩下一个信源符号为止;
(5)信源符号所对应的码子即为费诺码。
五、实验步骤
1.根据实验原理,设计费诺编码程序;
2.输入一组信源消息符号概率,可以求费诺编码,平均码长和编码效率。
8
六、实验报告要求
1.按照本节内容后实验报告形式书写;
2.实验总结和心得要详细,可以根据自己情况写出建议。
七、实验注意事项
1.MATLAB1.MATLAB1.MATLAB1.MATLAB1.MATLAB语言课下多复习,尽量采用模块化编程方法通过函数调形式语言课下多复习,尽量采用模块化编程方法通过函数调形式语言课下多复习,尽量采用模块化编程方法通过函数调形式语言课下多复习,尽量采用模块化编程方法通过函数调形式运行程序;
2.仔细理解、体会费诺编码。
八、思考题
举例说明费诺编码在现实中际应用,列举一个例子并简要说明?
附录1:
实验报告样式:
实验报告
班级:
姓名:
学号:
组别:
同组人:
课程名称:
实验室:
实验时间:
(使用实验报告纸的,以上内容可按照实验报告纸格式填写)
实验三费诺编码
一、实验目的:
二、实验内容与原理:
三、实验器材(设备、元器件、软件工具、平台):
四、实验步骤:
五、程序流程图:
六、实验数据及结果分析:
七、实验结论:
八、思考题:
九、编程、调试过程中遇到的问题及解决方法:
十、其他:
实验总结、心得体会及对本实验方法、手段及过程的改进建议等。
附录2:
费诺编程程序:
clc;
clearall;
N=input('输入信源符号的个数:
');s=0;
l=0;H=0;
fori=1:
N
fprintf('第%d个',i);
p(i)=input('p=');
if(p(i)<=0)||(p(i)>=1)
error('不符合分布概率');
end
s=s+p(i);
9
H=H+(-p(i)*log2(p(i)));
end
if(s<=0.999999||s>=1.000001)
error('不符合分布概率')
end
fori=1:
N-1
forj=i+1:
N
ifp(i)
m=p(j);
p(j)=p(i);
p(i)=m;
end
end
end
x=f1(1,N,p,1);
fori=1:
N
L(i)=length(find(x(i,:
)));
l=l+p(i)*L(i);
end
n=H/l;
fprintf('按概率降序排列的码子:
\n');
disp(x)
fprintf('平均码长:
\n');
disp(l)
fprintf('编码效率:
\n');
disp(n)
functionx=f1(i,j,p,r)
globalx;
x=char(x);
if(j<=i)
return;
else
q=0;
fort=i:
j
q=p(t)+q;
y(t)=q;
end
fort=i:
j
v(t)=abs(y(t)-(q-y(t)));
end
fort=i:
j
if(v(t)==min(v))
fork=i:
t
x(k,r)='0';
10
end
fork=(t+1):
j
x(k,r)='1';
end
d=t;
f1(i,d,p,r+1);
f2(d+1,j,p,r+1);
f1(d+1,j,p,r+1);
f2(i,d,p,r+1);
else
end
end
end
return;
functionx=f2(i,j,p,r)
globalx;
x=char(x);
if(j<=i)
return;
else
q=0;
fort=i:
j
q=p(t)+q;y(t-i+1)=q;
end
fort=1:
j-(i-1)
v(t)=abs(y(t)-(q-y(t)));
end
fort=1:
j-(i-1)
if(v(t)==min(v))
d=t+i-1;
fork=i:
d
x(k,r)='0';
end
fork=(d+1):
j
x(k,r)='1';
end
f2(d+1,j,p,r+1);
f1(i,d,p,r+1);
f2(i,d,p,r+1);
f1(d+1,j,p,r+1);
else
end
end
end
11
实验四哈夫曼编码(2学时)
一、实验目的
1.掌握哈夫曼编码原理;
2.熟练掌握哈夫曼树的生成方法;
3.学会利用MATLABMATLABMATLABMATLABMATLAB实现哈夫曼编码;
4.提高独立进行算法编程的能力。
二、实验内容
1.用MATLABMATLABMATLABMATLABMATLAB实现哈夫曼哈夫曼编码算法程序;
2.要求程序输出显示所有的码字以及编效率;
3.设计简单的输入界面(可以是文字提示信息),程序运行时用设计简单的输入界面(可以是文字提示信息),程序运行时用设计简单的输入界面(可以是文字提示信息),程序运行时用设计简单的输入界面(可以是文字提示信息),程序运行时用设计简单的输入界面(可以是文字提示信息),程序运行时用户输入代表信源符号概率的向量;要对用进行合法性检查户输入代表信源符号概率的向量;要对用进行合法性检查;
4.(选做)随机生成一幅图像,随机生成一幅图像,实现哈夫曼图像编码,比较前后图像编码,比较前后图片大小。
三、实验仪器设备
1.计算机-系统最低配置256M内存、P4CPUCPUCPU;
2.MATLABMATLABMATLABMATLABMATLAB编程软件。
编程软件。
四、实验原理
1.二进制哈夫曼编码的基本原理及算法
(1)把信源符号集中的所有按概率从大到小排队把信源符号集中的所有按概率从大到小排队;
(2)取概率最小的两个符号作为片叶子合并(缩减)到一节点取概率最小的两个符号作为片叶子合并(缩减)到一节点;
(3)视此节点为新符号,其概率等于被合并(缩减)的两个之和参视此节点为新符号,其概率等于被合并(缩减)的两个之和参与概率排队;
(4)重复
(2)(3)
(2)(3)两步骤,直至全部符号都被合并(缩减)到根两步骤,直至全部符号都被合并(缩减)到根;
(5)从根出发,对各分枝标记从根出发,对各分枝标记从根出发,对各分枝标记0和1。
从根到叶的路径就给出了各个码字。
从根到叶的路径就给出了各个码字编码和长。
2.哈夫曼树的编码原理
(1)程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行程序的输入:
以一维数组形式要进行哈夫曼哈夫曼哈夫曼编码的信源符号编码的信源符号编码的信源符号编码的信源符号编码的信源符号编码的信源符号编码的信源符号编码的信源符号概率,在运行该程序前显示文字提信息所要输入的矢量;概率,在运行该程序前显示文字提信息所要输入的矢量;概率,在运行该程序前显示文字提信息所要输入的矢量;概率,在运行该程序前显示文字提信息所要输入的矢量;然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在然后对输入的概率矢量进行合法性判断,原则为:
如果中存在小于0的项,则输入不合法提示重新;如果概率矢量求和大于1,则输入也不合法,提示重新。
(2)在输入的概率矩阵p正确的前提条件下,对p进行排序,并用矩阵L记录p排序之前各元素的顺,然后将概率数组p的前两项,即概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后概率最小的两个数加和,得到新一组序列重复以上过程后得到一个记录概率加和过程的矩阵p以及每次排序之前概率顺的矩阵;
12
(3)新生成一个n-1行n列,并且每个元素含有n个字符的空白矩阵,然后进行哈夫曼编码。
五、实验步骤
1.输入一个离散信源,并检查该是否完备集;
2.使用哈夫曼编码原理进行哈夫曼程序编写;
3.输出离散信源中每个符号的哈夫曼编码及平均码长和编码效率,并与手工,并与手工运算的结果进行比较。
六、实验报告要求
1.按照本节内容后实验报告形式书写;
2.实验总结和心得要详细,可以根据自己情况写出建议。
七、实验注意事项
1.比较大小在MATLABMATLABMATLABMATLABMATLAB中,调用的是sort函数;
2.仔细理解、体会哈夫曼编码思想。
八、思考题
比较香农编码、费诺哈夫曼并说出他们的优缺点?
附录1:
实验报告样式:
实验报告
班级:
姓名:
学号:
组别:
同组人:
课程名称:
实验室:
实验时间:
(使用实验报告纸的,以上内容可按照实验报告纸格式填写)
实验四哈夫曼编码
一、实验目的:
二、实验内容与原理:
三、实验器材(设备、元器件、软件工具、平台):
四、实验步骤:
五、程序流程图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 信息 图像 计算 正确