信息论编码实验二熵的计算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二 熵的计算
一、实验目的
通过本次实验的练习,使学生进一步巩固熵的基本概念,掌握熵的统计方法,培养学生使用编程工具进行分析计算的基本能力。

二、实验仪器与软件
1. PC 机 1台
2. MATLAB7.0环境
三、实验原理
(一)信息熵的基本原理
离散信源数学模型如下(设该信源可能取的符号有n 个):

⎬⎫⎩⎨⎧=⎥⎦⎤⎢⎣⎡)(,),(,),(),( ,, , , , )( 2121n i n i a p a p a p a p a a a a X P X 则该信源的信息熵为
)(log )()(21i n i i
x p x p X H ∑==
H(X)是信源X 中每个事件出现的平均信息量,或者说H(X)表示了信源X 中各符号出现的平均不确定性。

图像的信息熵
设数字图像的灰度级集合为{r 1,r 2,…,r m },其对应的概率分别为p (r 1),p (r 2),…,p (r m ),则图像的信息熵可以定义为:
图像的信息熵表示像素各个灰度级位数的统计平均值,它给出了对此输入灰度级集合进行无失真图像编码时所需要的平均位数的下限。

(二)图像文件的读取
(1)函数imread () MATLAB 通过函数imread 完成图像的读取,该函数语法格式如下:
I = imread(filename,fmt)
用于读取由filename 指定的图像数据到数组A 中,参数fmt 对应于所有图像处理工具所支持的图像文件格式。

如I=imread ('rice.tif');
(2)函数imhist () 显示图像的直方图。

用法:
imhist(I,n) 计算和显示图像I 的直方图,n 为指定的灰度级数目,默认为256。

如果I 是二值图像,那么n 仅有两个值。

[counts,x] = imhist(I) 返回直方图数据向量counts 或相应的色彩值向量x 。

(3)函数size(a) 表示矩阵a 每个维度的长度
如size([1 2 3;4 5 6]),返回[2 3],表示该矩阵有2行3列
(4)find 寻找非零元素下标
如:x = [11 0 33 0 55];
find(x)
ans =
1
3
5
find(x == 0)
ans =
2
4
(5)相关函数
点运算在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。

点运算符有.*、./、.\和.^。

两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵的维参数相同。

sum(X) 求和运算,对矩阵X的所有元素进行求和
for循环
例:for k=1:10
x(k)=k.^2;
end
四、实验内容
(一)对给出的图像信息,读取该图像信息,并通过统计该图像的像素值情况,计算各个像素值出现的概率,得到该图像的信息熵。

(二)多个信源比较
对多个不同图像源进行(一)操作,从物理意义上对这些图像的信源熵结果进行比较分析,得出结论。

五、实验结果(利用所学知识,完成实验内容,并将实验过程和实验步骤和结果写在报告中)
I = imread('cameraman.tif');
imhist(I);
[counts,x] = imhist(I) ;
A=size(I);
Total=A(1,1)*A(1,2);
B=find(counts);
m=size(B);
T=m(1,1)*m(1,2);
S=0;
for i=1:1:T
P=counts(B(i,1),1)/Total;
S=S-P*log2(P);
end
disp('S=')
disp(S)
S=7.0097
图1 求cameraman.tif的信息熵和灰度分布图
I = imread('lenal.jpg');
imhist(I);
[counts,x] = imhist(I) ;
A=size(I);
Total=A(1,1)*A(1,2);
B=find(counts);
m=size(B);
T=m(1,1)*m(1,2);
S=0;
for i=1:1:T
P=counts(B(i,1),1)/Total;
S=S-P*log2(P);
end
disp('S=')
disp(S)
S=7.4070
图2 求lena1.jpg的信息熵和灰度分布图I = imread('lena2.jpg');
imhist(I);
[counts,x] = imhist(I) ;
A=size(I);
Total=A(1,1)*A(1,2);
B=find(counts);
m=size(B);
T=m(1,1)*m(1,2);
S=0;
for i=1:1:T
P=counts(B(i,1),1)/Total;
S=S-P*log2(P);
end
disp('S=')
disp(S)
S=7.4450
图3 求lena1.jpg的信息熵和灰度分布图
六、实验小结(对本次实验结果进行分析和总结)
本次实验顺利完成。

在这次实验中我进一步巩固了熵的基本概念,也尝试学习并掌握了熵的统计方法,开始有了使用编程工具进行分析计算的基本能力。

因为课上已经学过很多熵的基本概念,有了很充足的理论知识,所以在操作实验的时候就显得得心应手,没有遇到什么特别的难题,实验完成的很成功也很
顺利。

相关文档
最新文档