Matlab实现代码如下:
(1)图像的熵
function shang = ssshang(X)
[m,n,t]=size(X); I3 = double(X)+1; %灰度从0到256
s(256) = 0;
for i = 1:m
for j = 1:n
va = I3(i,j); %获取灰度
s(va) = s(va)+1; %值为va的点的个数
end
end
p = s./(m*n);
en = 0.;
for i = 1:256
if p(i)~=0
en = en+p(i)*log2(p(i));%概率取对数(以2为底)再乘以概率 最后连加取反
end
end
shang = -en;
(2)局部熵
clear all;
close all;
clc;
img=imread('lena.jpg');
[m n]=size(img);
w=3; %模板半径 模板大小为9*9
imgn=zeros(m,n);
for i=1+w:m-w
for j=1+w:n-w
Hist=zeros(1,256);
for p=i-w:i+w
for q=j-w:j+w
Hist(img(p,q)+1)=Hist(img(p,q)+1)+1; %统计局部直方图
end
end
Hist=Hist/sum(Hist); %部分人称之为‘归一化直方图’
for k=1:256
if Hist(k)~=0
imgn(i,j)=imgn(i,j)+Hist(k)*log(1/Hist(k)); %局部熵
end
end
end
end
imshow(imgn,[])
%用matlab 自带函数实现
imgn1=entropyfilt(img); %系统的局部熵函数
figure;
imshow(imgn1,[])
熵的一些知识
熵越大,无序程度越高。
图像处理中,根据图像的各个像素点的灰度分布的有序性,定义图像的局部熵,其反映了图像信息的丰富程度。
事件发生的概率越小, 其包含的信息量就越大, 其不确定性的程度就越高, 按照乘法的含义: 事件的不确定性乘以其发生的概率, 代表事物具体表现出来的不确定量。