熵、图像熵的意义及计算方法

参考:http://blog.csdn.net/daoqinglin/article/details/6906413

http://www.360doc.com/content/17/1215/15/50936292_713342097.shtml

 

Autofocusing of ISAR image based on entropy minimization

 

X LiG LiuJ Ni - 《IEEE Transactions on Aerospace & Electronic Systems》

 

一 熵

熵(entropy)指的是体系的混乱的程度,它在控制论、概率论、数论、天体物理、生命科学等领域都有重要应用,在不同的学科中也有引申出的更为具体的 定义,是各领域十分重要的参量。熵由鲁道夫·克劳修斯(Rudolf Clausius)提出,并应用在热力学中。后来在,克劳德·艾尔伍德·香农(Claude Elwood Shannon)第一次将熵的概念引入到信息论中来。

二 信息熵

利用信息论中信息熵概念,求出任意一个离散信源的熵(平均自信息量)。自信息是一个随机变量,它是指某一信源发出某一消息所含有的信息量。一条信息的信息量和它的不确定性有着直接的关系。所发出的消息不同,它们所含有的信息量也就不同。任何一个消息的自信息量都代表不了信源所包含的平均自信息量。不能作为整个信源的信息测度,因此定义自信息量的数学期望为信源的平均自信息量:

 

信息熵的意义:信源的信息熵H是从整个信源的统计特性来考虑的。它是从平均意义上来表征信源的总体特性的。对于某特定的信源,其信息熵只有一个。不同的信源因统计特性不同,其熵也不同。信息熵一般用符号H表示,单位是比特。变量的不确定性越大,熵也就越大。

三 图像熵

1、一维熵

 

   图像熵是一种特征的统计形式,它反映了图像中平均信息量的多少。图像的一维熵表示图像中灰度分布的聚集特征所包含的信息量,令Pi 表示图像中灰度值为i的像素所占的比例,则定义灰度图像的一元灰度熵为:

 

 

其中Pi是某个灰度在该图像中出现的概率,可由灰度直方图获得。

2、二维熵

图像的一维熵可以表示图像灰度分布的聚集特征,却不能反映图像灰度分布的空间特征,为了表征这种空间特征,可以在一维熵的基础上引入能够反映灰度分布空间特征的特征量来组成图像的二维熵。选择图像的邻域灰度均值作为灰度分布的空间特征量,与图像的像素灰度组成特征二元组,记为( i, j ),其中i 表示像素的灰度值(0 <= i <= 255),j 表示邻域灰度均值(0 <= j <= 255):

                                     

上式能反应某像素位置上的灰度值与其周围像素灰度分布的综合特征,其中f(i, j)为特征二元组(i, j)出现的频数,N 为图像的尺度。

四 复图像

 

 

 

 

源码

  1. 1.求一元灰度熵  
  2. %方法一  
  3. [M,N]=size(im);  
  4. temp=zeros(1,256);  
  5.    
  6. %对图像的灰度值在[0,255]上做统计  
  7. for m=1:M;  
  8.     for  n=1:N;  
  9.         if im(m,n)==0;  
  10.             i=1;  
  11.         else  
  12.             i=im(m,n)+1;  
  13.         end  
  14.         temp(i)=temp(i)+1;  
  15.     end  
  16. end  
  17. temp=temp./(M*N);  
  18.    
  19. %由熵的定义做计算  
  20. result=0;  
  21.    
  22. for  i=1:length(temp)  
  23.     if temp(i)==0;  
  24.         result=result;  
  25.     else  
  26.         result=result-temp(i)*log2(temp(i));  
  27.     end  
  28. end  
  29.   
  30. %方法二  
  31. %求熵值entropy  
  32. im=rgb2gray(imread('mubiao.bmp'));  
  33. [count,x]=imhist(im);  
  34. total=sum(count);  
  35. entropy=0;  
  36. for i=1:256  
  37.     p(i)=count(i)/total;  
  38.     if p(i)~=0  
  39.         logp(i)=log2(p(i));  
  40.         entropele=-p(i)*logp(i);  
  41.         entropy=entropy+entropele;  
  42.     end  
  43. end  
  44.   
  45. 2.求二维熵  
  46.   
  47. %随机生成图像  
  48. A=floor(rand(8,8).*255);  
  49.    
  50. [M,N]=size(A);  
  51. temp=zeros(256,256);  
  52.  
  53. %均值滤波器,实现计算邻域灰度均值
  54.  h=fspecial('average') ;%默认3*3
  55. y=filter2(h,A) ;
  56.   
  57. %对图像的灰度值和邻域均值在[0,255]上做统计  
  58. for m=1:M;  
  59.     for  n=1:N;  
  60.         if A(m,n)==0;  
  61.             i=1;  
  62.         else  
  63.             i=A(m,n)+1;  
  64.         end
  65.         j = ceil(y(m,n));
  66.         temp(i,j)=temp(i,j)+1;  
  67.     end  
  68. end  
  69. temp=temp./(M*N);  
  70.    
  71. %由熵的定义做计算  
  72. result=0;  
  73.    
  74. for  i=1:size(temp,1)  
  75.     for j=1:size(temp,2)
  76.         if temp(i,j)==0;  
  77.               result=result;  
  78.         else  
  79.               result=result-temp(i,j)*log2(temp(i,j));  
  80.         end
  81.     end  
  82. end  
  83.   
  84.    
  85. 3.计算联合熵  
  86.    
  87. %随机生成图像  
  88. A=floor(rand(8,8).*255);  
  89. B=floor(rand(8,8).*255);  
  90.    
  91. [M,N]=size(A);  
  92. temp=zeros(256,256);  
  93.    
  94. %对图像的灰度值成对地做统计  
  95. for m=1:M;  
  96.     for n=1:N;  
  97.    
  98.         if  A(m,n)==0;  
  99.             i=1;  
  100.         else  
  101.             i=A(m,n);  
  102.         end  
  103.    
  104.         if B(m,n)==0;  
  105.             j=1;  
  106.         else  
  107.             j=B(m,n);  
  108.         end  
  109.    
  110.         temp(i,j)=temp(i,j)+1;  
  111.     end  
  112. end  
  113. temp=temp./(M*N);  
  114.    
  115. %由熵的定义做计算  
  116. result=0;  
  117.    
  118. for  i=1:size(temp,1)  
  119.     for j=1:size(temp,2)  
  120.         if temp(i,j)==0;  
  121.         result=result;  
  122.         else  
  123.         result=result-temp(i,j)*log2(temp(i,j));  
  124.         end  
  125.     end  
  126. end  

六 Matlab的计算熵的函数

 

 

Matlab中的这2个函数分别是计算熵的,entropy计算全局熵,entropyfilt计算局部熵

给定一个灰度图I, entropy(I)的计算方法是,将I直方图化到0-255的bin中,L1规范化,再用 –sum(p*log2(p))来计算整理熵,即

Curhist = Hist(I, 0:255);

Curhist = curhist / sum(curhist);

E = -sum(curhist .* log2(curhist));

 

entropyfilt选取以各像素点为中心的的n*n(默认n=9)的区域进行熵计算,计算方法同上。该方法可以表示纹理

调用方法如下:

E = entropy(I)

J = entropyfilt(I)
J = entropyfilt(I,NHOOD

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值