实验一-灰度图像信息熵的相关计算与分析
图像灰度变换实验报告

实验2a 图像的灰度变换一、实验目的:学会用Matlab软件对图像进行运算和灰度变换。
二、实验内容:用+、-、*、/、imabsdiff、imadd、imcomplment、imdivide、imlincomb、immultiply、imsubtract和imadjust等函数生成各类灰度变换图像。
三、实验相关知识1、代数运算两幅图像之间进行点对点的加、减、乘、除运算后得到输出图像。
我们可以分别使用MA TLAB的基本算术符+、-、*、/来执行图像的算术操作,但是在此之前必须将图像转换为适合进行基本操作的双精度类型(命令函数为double())。
为了更方便对图像进行操作,图像处理工具箱中也包含了一个能够实现所有非稀疏数值数据的算术操作的函数集合。
如下所示:imabsdiff:计算两幅图像的绝对差值imadd:两个图像的加法imcomplment:一个图像的补imdivide:两个图像的除法imlincomb:计算两幅图像的线性组合immultiply:两个图像的乘法imsubtract:两个图像的减法使用图像处理工具箱中的图像代数运算函数无需再进行数据类型间的转换,这些函数能够接受uint8和uint16数据,并返回相同格式的图像结果。
代数运算的结果很容易超出数据类型允许的范围。
图像的代数运算函数使用以下截取规则使运算结果符合数据范围的要求:超出数据范围的整型数据将被截取为数据范围的极值,分数结果将被四舍五入。
2、灰度变换点运算也称为灰度变换,是一种通过对图像中的每个像素值进行运算,从而改善图像显示效果的操作。
对于特定变换函数f的灰度变换,用户可以利用MATLAB强大的矩阵运算能力,对图像数据矩阵调用各种MATLAB计算函数进行处理。
需要注意的是由于MATLAB不支持uint8类型数据的矩阵运算,所以首先要将图像数据转换为双精度类型,计算完成后再将其转换为uint8类型(命令为uint8( ))。
编程实现计算图像直方图、图像熵解析

数字图像处理实验报告——图像常用格式及显示武汉大学2016.041 实验内容本实验报告主要介绍主要内容1. 理解灰度映射原理;2. 掌握灰度映射计算方法;3. 理解图像直方图的定义;4. 理解图像直方图的作用;5. 理解图像熵的定义及作用;6. 掌握图像直方图计算方法;7. 掌握图像熵的计算方法;8. 进一步熟悉图像文件256色、24位真彩色BMP图像格式;9. 进一步熟悉Visual C++ 6.0编程界面,及使用方法;10. 熟悉Visual C++中绘图函数方法;11. 编程完成计算图像几种灰度映射;12. 编程实现计算图像直方图、图像熵;13. 编程绘制图像直方图;14. 根据不通灰度映射处理观察图像直方图变化;15. 总结实验过程(实验报告):编程、调试、结果、分析、结论。
主要目的1. 建立相关实验环境:从指定服务器指定位置拷贝实验相关材料,包括:实验要求,实例程序,示例图像,VC++6.0程序,实验相关幻灯片;2. 使用实验一建立的简单多文档应用程序框架及、图像夺取和显示功能,进一步熟悉图像的格式及显示,熟悉图像的组织和存储方式。
3. 编写图像线性灰度映射:4. 编写图像直方图统计程序:5. 观察图像直方图主要函数说明1.void CZhangyanImageView::OnProcessZhifangtu()函数目的:在用户界面中添加直方图处理,并添加函数在.cpp文件中函数参数说明:建立直方图处理函数2.void CZhangyanImageView::OnProcessLinetran()函数目的:在用户界面中添加灰度变换处理,并添加函数在.cpp文件中函数参数说明:建立灰度变换处理函数主要代码注释1.灰度变换函数代码CZhangyanImageDoc* pDoc = GetDocument();//定义引用doc的指针ASSERT_V ALID(pDoc);unsigned char * pBits=pDoc->m_pBits;//把文件中的m_pBits赋予pBitsint nWidth=pDoc->imageWidth;int nHeight=pDoc->imageHeight;//定义整形的image图片宽和高int nValue=0;double dValue=0.0;long lTotal=0;long lTotalD=0;long lTotalL=0;int ab=100,bb=255,a=0,b=255;//定义原图像的灰度值0-255范围,定义处理后图像灰度值100-255范围if(pBits==NULL) return ;//遍历完成则返回for(int i=0;i<nHeight;i++){lTotalL=nWidth*i;//统计出宽*当前高for(int j=0;j<nWidth;j++){lTotalD=lTotalL+j;//统计出第几个像素nValue=*(pBits+lTotalD);// 采用int nValue= *(m_pBits imageWidth * i+j )公式获得图像点灰度值dValue=ab+1.0*(bb-ab)/(b-a)*(nValue-a);//套用灰度变换公式pBits[lTotalD]=int(dValue);}}//对图像进行遍历与灰度处理Invalidate();//强制显示改变了的图像2.直方图生成函数m_bShow=TRUE;CZhangyanImageDoc* pDoc = GetDocument();//定义引用doc的指针ASSERT_V ALID(pDoc);unsigned char * pBits=pDoc->m_pBits; //把文件中的m_pBits图像指针赋予pBitsint nWidth=pDoc->imageWidth;int nHeight=pDoc->imageHeight; //定义整形的image图片宽和高int nValue=0;long lTotal=0;long lTotalD=0;long lTotalL=0;dMax=0;dMaxG=0;dMaxB=0;//数据初始化赋值存储图像灰度像素的计数if(pBits==NULL) return ;if(pDoc->m_nColorBits==8) //对图像进行是否是8彩色的判断{for(int k=0;k<256;k++){m_lValue[k]=0;m_dValue[k]=0.0;}for(int i=0;i<nHeight;i++){lTotalL=nWidth*i;for(int j=0;j<nWidth;j++){lTotalD=lTotalL+j;nValue=*(pBits+lTotalD);//统计灰度值m_lValue[nValue]=m_lValue[nValue]+1;//加1 }}lTotal=nWidth*nHeight;for(INT k=0;k<256;k++){m_dValue[k]=1.0*m_lValue[k]/lTotal;if(dMax<m_dValue[k]) dMax=m_dValue[k];}}//对图像进行遍历并统计直方图数据long nValueG=0;long nValueB=0;//统计R G Bif(pDoc->m_nColorBits==24) //对图像进行是否是24彩色的判断{for(int k=0;k<256;k++){m_lValue[k]=0;m_dValue[k]=0.0;m_lValueG[k]=0;m_dValueG[k]=0.0;m_lValueB[k]=0;m_dValueB[k]=0.0;//}for(int i=0;i<nHeight;i++){lTotalL=nWidth*i;for(int j=0;j<nWidth;j++){lTotalD=(lTotalL+j)*3;nValue=*(pBits+lTotalD);m_lValue[nValue]=m_lValue[nValue]+1;nValueG=*(pBits+lTotalD+1);m_lValueG[nValueG]=m_lValueG[nValueG]+1;nValueB=*(pBits+lTotalD+2);m_lValueB[nValueB]=m_lValueB[nValueB]+1;}}lTotal=nWidth*nHeight;for(int k=0;k<256;k++){m_dValue[k]=1.0*m_lValue[k]/lTotal;if(dMax<m_dValue[k]) dMax=m_dValue[k];m_dValueG[k]=1.0*m_lValueG[k]/lTotal;if(dMaxG<m_dValueG[k]) dMaxG=m_dValueG[k];m_dValueB[k]=1.0*m_lValueB[k]/lTotal;if(dMaxB<m_dValueB[k]) dMaxB=m_dValueB[k];}}//对图像进行遍历并统计直方图数据Invalidate();/强制显示改变了的图像3.变量声明void DrawGraph(CDC * pDC);//绘制直方图函数long m_lValue[256];//红色分量灰度统计double m_dValue[256];// 红色分量灰度频数long m_lValueG[256]; //绿色分量灰度统计double m_dValueG[256]; // 绿色分量灰度频数long m_lValueB[256]; //蓝色分量灰度统计double m_dValueB[256]; //蓝色分量灰度频数double dMax,dMaxG,dMaxB;//红、绿、蓝频数最大值BOOL m_bShow;//是否显示直方图4.图形绘制CZhangyanImageDoc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// CCCJImageDoc* pDoc 在各人的程序中不一样unsigned char * pBits=pDoc->m_pBits;int X0=0+5;int Y0=510;int WX=768+3,HY=500;int H=375;int W=256;CPen cyPen(PS_SOLID,2,RGB(255,255,0));CPen * oldPen=pDC->SelectObject(&cyPen);pDC->MoveTo(X0,Y0);pDC->LineTo(X0+WX,Y0);pDC->MoveTo(X0,Y0);pDC->LineTo(X0,Y0-HY);pDC->MoveTo(X0,Y0-HY);pDC->LineTo(X0+WX,Y0-HY);pDC->MoveTo(X0+WX,Y0);pDC->LineTo(X0+WX,Y0-HY);pDC->SelectObject(&oldPen);//设置直方图的区域{CPen redPen(PS_SOLID,1,RGB(255,0,0));oldPen=pDC->SelectObject(&redPen);for(int i=0;i<256;i++){int x0,y0,x1,y1;double dy;x0=X0+i*3;y0=Y0;x1=X0+i*3;dy=Y0-1.0*H*m_dValue[i]/dMax;y1=int(dy+0.5);pDC->MoveTo(x0,y0);pDC->LineTo(x1,y1); //进行绘图操作}pDC->SelectObject(oldPen);//以下略去对于24位的解释1.1灰度变换结果图灰度变换结果1.2图像直方图图读取图像直方图2实验日志2.1实验中遇到问题较于上次试验,本次试验显得轻车熟路许多,内容与调试也比较简单,感觉编写实验报告中遇到的最大困难就是对代码的阐述。
信息论编码实验二熵的计算

实验二 熵的计算一、实验目的通过本次实验的练习,使学生进一步巩固熵的基本概念,掌握熵的统计方法,培养学生使用编程工具进行分析计算的基本能力。
二、实验仪器与软件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 ix 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 =135find(x == 0)ans =24(5)相关函数点运算在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。
信息熵的计算及实现

认知实习报告题目 __信息熵的计算及实现_________ _ (院)系数理系 ___________ 专业 _______信息与计算科学__________________ 班级_ _ 学号_ 20081001 _学生姓名 _ _导师姓名_ ___ ________完成日期 ________2011年12月23日___________信息熵的计算及实现信息与计算科学专业:指 导 教 师:摘要:信息的销毁是一个不可逆过程,一般而言,当一种信息出现概率更高的时候,表明它被传播得更广泛,或者说,被引用的程度更高。
我们可以认为,从信息传播的角度来看,信息熵可以表示信息的价值。
这样我们就有一个衡量信息价值高低的标准,可以做出关于知识流通问题的更多推论。
本文讨论了一维几种熵的计算方法:离散信源的熵、图像熵的一维熵和二维熵、基于信息熵的Web 页面主题信息计算方法,并给出一定的理论分析和数值实验以及数值实验结果。
关键字:离散信源的熵、图像熵、Web 页面主题信息1 引言信息论之父 C. E. Shannon 在 1948 年发表的论文“通信的数学理论( AMathematical Theory of Communication )”中, Shannon 指出,任何信息都存在冗余,冗余大小与信息中每个符号(数字、字母或单词)的出现概率或者说不确定性有关。
Shannon 借鉴了热力学的概念,把信息中排除了冗余后的平均信息量称为“信息熵”,并给出了计算信息熵的数学表达式。
2 问题提出信源的平均不定度。
在信息论中信源输出是随机量,因而其不定度可以用概率分布来度量。
记 H(X)=H(P1,P2,…,Pn)=P(xi)logP(xi),这里P(xi),i =1,2,…,n 为信源取第i 个符号的概率。
P(xi)=1,H(X)称为信源的信息熵。
2.1 离散信源的熵利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。
灰度直方图结合信息熵对图像检测的研究

灰度直方图结合信息熵对图像检测的研究作者:吴宪君来源:《消费电子·理论版》2013年第11期摘要:灰度直方图能直观显示相同灰度的像素之间在空间分布上的差异,间接反映图像特征。
为了提高检索准确率引入信息熵投票的方法进行图像检测实验。
在特定的训练集的样本数的各光照强度的分别率条件下,均能得到较好的识别率,数据库60%被分配到训练集。
关键词:灰度直方图;信息熵;图像检测中图分类号:TP391.41 文献标识码:A 文章编号:1674-7712 (2013) 22-0000-01一、引言许多的面向非交互式生物识别应用和安全人-机接口脸识别系统在处理人脸图像采用预处理方法。
当图像照明变化,人物姿势和面部表情变化情况下准确率降低。
为尝试解决这个问题的方法,在特征提取步骤Turk和Pentland提出特征脸的方法,它根据一组人脸训练图像构造主元子空间[1]。
Belhumeur的FisherFace方法等回归面部表情和封闭信号稀疏表示融合信息以不同类型的传感器替代脸识别方法来得到系统鲁棒性[2]。
二、交互信息交互信息,这是信息理论中的一个基本概念[3],是1,2个随机变量X和Y之间的依赖。
基于这两个变量之间的共享信息,如果他们是离散,则它被定义为:其中p(x,y)联合概率分布函数(PDF)的变量,px(x)和py(y)是X和Y的概率密度函数分别在图像的PDF文件中估计精度,在0至1的概率值范围可把图像分为不同数量相同的宽度的区域。
强度的图像直方图与不同数量的影响标签。
三、交互算法在单侧照明的情况下,假定每个识别图像被垂直分成左右两个子图像(图1a),SL和SR。
图1(a)图1(b)图1两部分图像一半的亮面对比另一边更暗,它直接影响灰度直方图的像素强度分布。
但是如果不做这种分离,将只表示从一个正面照明图像不同的强度分布。
那么交互信息在大数量的训练集中未知的图像和图像进一步比较时则得到不可靠的结果。
同时,将图像划分成两个子图像有助于每一方可进行对光强分布的一般形状局部分析,而受制它的位置产生对轴的高度依赖。
图像的熵值

end
end
end
P(2:1+Depth,:)=P(2:1+Depth,:)/N_pixels;
for i=1:N_grays
for j=1:Depth
if P(1+j,i)~=0
function result=imgentropy(img)
%img必须为灰度图像(2-D)
%written by hangbing6174,CUMT
%
[M,N]=size(img);
imax=ceil(max(max(img)));
temp=zeros(1,imax);
%对图像的灰度值在[0,imax]上做统计
for m=1:M;
for n=1:N;
if img(m,n)==imax;
i=imax+1;
else
i=fix(img(m,n))+1;
end
temp(i)=temp(i)+1;
logp(i)=log2(p(i));
entropele=-p(i)*logp(i);
entropy=entropy+entropele;
end
end
entropy
%图像的熵
%图像初始化
clear
clc
end
end
result=resul;
以上代码保存为m文件就是一个熵的计算函数了。
%求每一个符号的出现概率
P=zeros(1+Depth,N_grays);%第一行是序号,第2到1+Depth行每行对应一个颜色
信息熵与图像熵的计算

信息熵与图像熵的计算信息熵是信息论中一个重要的概念,用来衡量信源中包含的信息量。
而图像熵是在图像处理中引入的概念,用来衡量图像中的信息量。
1.信息熵的概念信息熵是用来度量一个信源的平均信息量的,也可以看作是随机变量的不确定性的度量。
信息熵的计算公式如下:H(X) = -Σ(p(x) * log2(p(x)))其中,X表示一个离散型的信源,p(x)表示X取值为x的概率。
计算信息熵的步骤如下:1)统计信源中每个离散值出现的概率;2)根据计算出的概率值,计算每个离散值的信息量;3)将每个离散值的信息量相加,即可以得到信源的信息熵。
2.图像熵的概念图像熵是用来衡量图像中信息量的一个指标。
在图像处理中,图像熵用来描述图像的纹理复杂程度,即图像中包含的信息量。
图像熵的计算公式如下:H(I) = -Σ(p(i) * log2(p(i)))其中,I表示一个图像,p(i)表示图像中像素值为i的概率。
计算图像熵的步骤如下:1)统计图像中每个像素值出现的概率;2)根据计算出的概率值,计算每个像素值的信息量;3)将每个像素值的信息量相加,即可以得到图像的熵。
3.信息熵与图像熵的比较信息熵和图像熵的计算方法相似,但是在具体的应用场景中存在一些差别。
首先,信息熵是用来度量信源的不确定性,所以信源可以是任意类型的数据,包括离散型信源和连续型信源。
而图像熵是针对图像数据的一种度量,因此信源是离散型的。
其次,图像熵主要用来衡量图像的纹理复杂程度,所以在计算图像熵时,通常会将图像转化为灰度图像。
这样做的目的是忽略图像的颜色信息,只关注亮度信息,因为在大多数场景下,图像的颜色信息对于图像的信息量没有太大的贡献。
此外,信息熵和图像熵的计算结果都是一个非负数,越大表示信息量越大,越小表示信息量越少。
当信息熵或图像熵为0时,表示信源或图像中只有一个确定的值,没有任何信息的不确定性。
总结来说,信息熵和图像熵都是衡量信息量的一种指标,用来描述数据的不确定性或者纹理复杂程度。
图像熵计算及分割

图像熵计算及分割一、实验目的1.复习MATLAB 的基本命令,熟悉MATLAB 下的基本函数。
2.复习信息熵基本定义, 能够理解图像熵定义和基本概念。
3. 了解图像分割算法,并利用最小交叉熵,大津算法实现图像分割二、实验仪器、设备1.计算机。
2.Matlab 软件。
三、实验内容与原理1. 内容:1).能够写出MATLAB 源代码,求信源的信息熵。
2).根据图像熵基本知识,综合设计出MATLAB 程序,求出给定图像的图像熵。
2. 原理:信息熵:利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。
自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。
一条信息的信息量和它的不确定性有着直接的关系。
所发出的消息不同,它们所含有的信息量也就不同。
任何一个消息的自信息量都代表不了信源所包含的平均自信息量。
不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量:信息熵的意义:信源的信息熵H是从整个信源的统计特性来考虑的。
它是从平均意义上来表征信源的总体特性的。
对于某特定的信源,其信息熵只有一个。
不同的信源因统计特性不同,其熵也不同。
信息熵一般用符号H表示,单位是比特。
变量的不确定性越大,熵也就越大。
图像熵:1).一元灰度熵图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。
图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi 表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为:其中Pi是某个灰度在该图像中出现的概率,可由灰度直方图获得。
2).二维熵图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。
选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为( i, j ),其中i 表示像素的灰度值(0 <= i <= 255),j 表示邻域灰度均值(0 <= j <= 255):上式能反映某像素位置上的灰度值与其周围像素灰度分布的综合特征,其中f(i, j)为特征二元组(i, j)出现的频数,N 为图像的尺度,定义离散的图像二维熵为:构造的图像二维熵可以在图像所包含信息量的前提下,突出反映图像中像素位置的灰度信息和像素邻域内灰度分布的综合特征3) 最小交叉熵图像分割假设存在两个分布:那么可以使用交叉熵来衡量两个分布之间的距离(用分布Q代替分布P),数学表达为:该方法被看做是在没有先验获得时对最大熵方法的扩展.在使用最小交叉熵进行图像分割时,实际上就是将原始图像f(x,y)灰度值设定一个阈值t 然后使得原始图像二值化g(x,y),数学表达为:我们需要做的就是通过一些合理的假设求解出这三个参数: 根据灰度守恒准则可以得到:易得其中, 12,N N 代表着目标和前景内的像素个数,结合交叉熵公式可得:该等式可以优化为:则阈值为:在实验过程中只需要遍历所有的灰度值,然后求出在不同灰度值下的()t η,选择最小的t 即为选定的阈值. 4)大津算法大津算法的主要流程和最小交叉熵的过程类似,在此不加以赘述,但大津算法最终确定分割阈值是基于类内方差最大的思想,即2201()m a x ()B B k L k k δδ*≤≤-=求得的分割阈值k其中:2P 等与上面公式类似五.实验代码数据及结果分析1) 求信源的信息熵function entropy = information_entropy(T) %T 是信源集 if(sum(T)~=1)fprintf('%s','信源不是完备集'); elselog_t = -log2(T); entropy = T*log_t';endend程序运行结果:2) 求图像的一维和二维信息熵代码:function gray_entropy(I)% I为输入的图片imshow(I);%三维图像转化为灰度图像if(size(I,3)~=1)I=rgb2gray(I);end%存放概率值probability = zeros(256,1);area = size(I,1)*size(I,2);entropy1 = 0;for i=1:256probability(i)=double(sum(sum(I==i-1)))/area;% plot(probability);if probability(i)==0entropy1 = entropy1;elseentropy1 = entropy1 - probability(i)*log2(probability(i));endendx = 0:255;%绘制概率分布直方图bar(x,probability);%hist(probability*area,10);%plot(probability);fprintf(num2str(entropy1));fprintf('\n');% imshow(probability);[row,rol] = size(I);%考虑边界值故对图像进行了扩充new_I1 = [zeros(1,rol);I;zeros(1,rol)];new_I2 = [zeros(row+2,1),new_I1,zeros(row+2,1)];gray_mid = zeros(256,256);for m=2:row+1for n=2:rol+1i_now = new_I2(m,n);%考虑周围四个点的平均值,边界补零j_ave = (new_I2(m-1,n)+new_I2(m+1,n)+new_I2(m,n+1)+new_I2(m,n-1))/4;gray_mid(i_now+1,j_ave+1) = gray_mid(i_now+1,j_ave+1)+1;endend% imshow(gray_mid);gray_pro = double(gray_mid)./(row*rol);entropy2 = 0;for k=1:size(gray_pro,1)for j=1:size(gray_pro,2)if gray_pro(k,j) == 0entropy2 = entropy2;elseentropy2 = entropy2 - gray_pro(k,j)*log2(gray_pro(k,j));endendendfprintf(num2str(entropy2));end天空:一维图像熵:7.3867二维图像熵:7.3859树木:一维图像熵:7.2273二维图像熵:9.4255水面:一维图像熵:7.3406二维图像熵:8.0287建筑:一维图像熵:7.3371二维图像熵:7.49482)图像分割算法:实验图像(数据来自/Research/Projects/CS/vision/bsds/)最小交叉熵法:function [ILow, IHigh, threshold] = minCEP(I)%I输入图像%ILow, IHigh, threshold返回了前景背景和阈值%该部分代码来自于网上,自己进行了修改并加了注释%部分代码与我对论文理解有出入,已经标注出来%将彩色图片换为灰度图像if(size(I,3)>=1)I = rgb2gray(I);endBW = I>0;h = imhist(I);% 不考虑非图像部分,故将灰度值为0的部分置为空集h(1) = [];% 求出了图像灰度值的概率hn = h/sum(sum(BW));sizeH = length(hn);%整幅图像的平均熵imEntropy = sum((1:sizeH) .* hn' .* log(1:sizeH));%为了获得最优的t,采取遍历手段,然后取得最小值,即为最小交叉阈值for t = 1:sizeH%Low range imagelowValue = 1;lowSum = sum(hn(1:t));% 求平均值if lowSum > 0lowValue = sum((1:t) .* hn(1:t)') / lowSum;end% High range imagehighValue = 1;highSum = sum(hn(t+1:sizeH));%求平均值if highSum > 0highValue = sum((t+1:sizeH) .* hn(t+1:sizeH)') / highSum;end% Entropy of low rangelowEntropy = sum((1:t) .* hn(1:t)' * log(lowValue));% Entropy of high rangehighEntropy = sum((t+1:sizeH) .* hn(t+1:sizeH)' ...* log(highValue));%交叉熵计算方法与原文有一定出入% Cross EntropyCE(t)= imEntropy - lowEntropy - highEntropy;end[~, threshold] = min(CE);ILow = zeros(size(I));IHigh = zeros(size(I));% 为什么不是进行了二值化处理% ILow(I<threshold) = I(I<threshold);% IHigh(I>threshold) = I(I>threshold);% ILow = uint8(ILow);ILow(I>threshold) = sum(sum(I(find(I>threshold))))/sum(sum(I>threshold));ILow(I<=threshold) =sum(sum(I(find(I<=threshold))))/sum(sum(I<=threshold));ILow = uint8(ILow);IHigh = uint8(IHigh);end阈值为:84大津算法T = graythresh(b);B = im2bw(b,T);阈值为0.4501*256=115.23) 实验结果分析:1 对于二维图像熵,从二维灰度图像直方图可以看出,当灰度值的范围越广,灰度的概率越接近的情况下,此时二维图像灰度值自由度更高,图像的二维熵越大,从所给的图像的直方图来说,显然树的二维灰度直方图中灰度值的范围更广,所以熵最大;天空的灰度范围最小,所以熵值最小;建筑和水面的二维直方图中灰度值的范围接近,但是显然水的概率值更加接近,故水的熵要大于建筑;2 对于图像分割二值化来说,确定阈值是关键;如何确定阈值,在现今的图像分割技术中,熵的方法是很重要的一种研究方向,包括一维最大熵,最小交叉熵,最大交叉熵,Shannon 熵,Tsallis熵,Renyi熵等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一
灰度图像信息熵的相关计算与分析
一、实验目的
1、复习信息熵,条件熵,联合熵,互信息,相对熵的基本定义, 掌握其计算方法,学习互信息与相对熵的区别之处并比较两者的有效性,加深对所学理论理论知识的理解。
2、掌握图像的的基本处理方法,了解图像的编码原理。
3、学习使用matlab ,掌握matlab 的编程。
4、通过对比分析,。
在解决问题的过程中,锻炼自身对问题的研究能力。
二、实验内容与要求
1、计算灰度图像的信息熵,条件熵,联合熵,互信息,相对熵,并比较互信息和相对熵在判别两幅图像的联系与区别。
2、利用matlab 编程计算,并书写完整实验报告。
三、实验原理
1、信息熵
离散随机变量X 的熵H(X)为: ()()log ()
x H X p x p x χ
∈=-∑
图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。
图像的一 维熵表示图像中灰度分布的聚集特征所包含的信息量,将图像的灰度值进行数学统计,便可得到每个灰度值出现的次数及概率,则定义灰度图像的一元灰度熵为:
255
log i
i
i H p p
==-∑
利用信息熵的计算公式便可计算图像的信息熵,求出任意一个离散信源的熵(平均自信息量)。
自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。
所发出的消息不同,它们所含有的信息量也就不同。
任何一个消息的自信息量都代表不了信源所包含的平均自信息量。
信息熵的意义:信源的信息熵H 是从整个信源的统计特性来考虑的。
它是从平均意义上来表征信源的总体特性的。
对于某特定的信源,其信息熵只有一个。
不同的信源因统计特性不同,其熵也不同。
图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。
选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为( i, j ),其中i 表示像素的灰度值(0255)i ≤≤,j 表示邻域灰度(0255)j ≤≤,
2
(,)/ij P f i j N
=
上式能反应某像素位置上的灰度值与其周围像素灰度分布的综合特征,其中 f(i, j)为特征二元组(i, j)出现的频数,N 为图像的尺度,定义离散的图像二维熵为:
255
0log ij ij
i H p p ==∑
构造的图像二维熵可以在图像所包含信息量的前提下,突出反映图像中像素位置的灰度信息和像素邻域内灰度分布的综合特征。
2、联合熵
离散型随机变量(X,Y )的联合分布函数为
(,)p x y ,其联合熵(,)H X Y :
(,)(,)log (,)
x y H X Y P x y P x y χγ
∈∈=-∑∑
3、条件熵
若(,)~(,)X Y p x y ,则条件熵(/)H Y X 为:
(/)()(/)
x X
H Y X p x H Y X x ∈==∑
()(/)log (/)
x X
y Y
p x p y x p y x ∈∈=-∑∑
(,)log (/)
x X y Y
p x y p y x ∈∈=-∑∑
log (/)E p Y X =-
4、相对熵
相对熵是对两种分布之间的偏移的测量,在统计学中,以概率比的对数的期望形式出现。
相对熵是两个概率分布P 和Q 差别的非对称性的度量。
是用来度量使用基于Q 的编码来编码来自P 的样本平均所需的额外的比特个数。
典型情况下,P 表示数据的真实分布,Q 表示数据的理论分布,模型分布,或P 的近似分布。
相对熵的定义如下: p(x) 和 q(x)之间相关熵为
()(//)()log
()x X
p x D p q P x q x ∈=∑
()log
()p p X E q X =
5、互信息
互信息是一个随机变量包含另一个随机变量多少的一个量度,是一个随机变量由另一个随机变量的信息其不确定性的减少。
互信息的定义如下:两个随机变量X 和Y ,联合概率分布函数p(x, y),边缘概率分布函数为p(x)和p(y),互信息为联合分布和分布乘积之间的相对熵。
(,)(;)(,)log
()()x X y Y
p x y I X Y p x y p x p y ∈∈=∑∑
互信息是一有用的信息度量,指两个事件集合之间的相关性,互信息的值越大(小),相关程度越高(低)。
相对熵是两个概率分布差别的非对称性的度量,是用来度量使用基于一个的编码来编码来自另一个的样本平均所需的额外的比特个数,相对熵的值越大(小),非对称性的量度越大(小),侧面反映相关程度的低(高)。
两者都可以用来衡量两幅图像的相关程度,但是也有区别。
四、实验步骤
1) 输入一幅图像,并将其转换成灰度图像。
2) 统计出图像中每个灰度阶象素概率。
3) 统计出图像中相邻两象素的灰度阶联合分布矩阵。
4) 计算出每幅图像的熵和成对图像的条件熵,联合熵,互信息,相对熵 5)分析实验结果。
五、实验结果及分析
图一对比图对比图与图一相同部分
3)结果分析:
从原始图像可以看出图1分别与图2,图3,图4的差别原来越大。
从计算结果上看,它们的互信息的值越来越小、相对熵的值越来越大,与实际相符,结果正确。
回顾互信息与相对熵的定义,我们可以了解到互信息是一种有用的信息度量,它是指两个事件集合之间的相关性,因此互信息越大,二者的相似程度就越高。
而相对熵基于熵来定义,其直观意义是用p进行编码平均比q多的比特数,也就是p与q的差距,p与q差距越大相对熵就越大。
用两者不同的信息去衡量相同的信息,会产生较大的误差。
所以在衡量两个随机变量的相关程度时,互信息要比相对熵有优势,效果会更好一些。
六、心得体会
本次大作业我们首先对之前学过的知识复习一下,加深对信息熵、联合熵、互信息、条件熵以及相对熵的理解。
对于KL散度,虽然老师上课有专门讲解过,但是具体操作的时候还是概念不太清晰,为此我们参考网络已有的资料又重新学习了一下。
在图像的选择方面,我们刚开始决定用一组图像来计算,但是一组图像并不能完全说明互信息与相对熵之间的对比关系,最后经过讨论我们决定采用多组图像进行对比。
整个作业过程中程序仍然是大问题,我们不断的对程序进行修改,时间主要耗费在程序编写与数据的分析。
最后还是依靠大家一起合作,顺利完成了此次作业。