今天给各位分享matlab图像信息熵的知识,其中也会对matlab计算图像熵进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
(1)先用Hist函数对x(n)的赋值范围进行分块,比如赋值范围在0~10的对应第
一块,10~20的第二块,以此类推。这之前需要对x(n)做一些归一化处理
(2)统计每一块的数据个数,并求出相应的概率
(3)用信息熵公式求解
以上求解方法获得的虽然是近似的信息熵,但是一般认为,这么做是没有问题的
求一维序列的信息熵的matlab程序代码如下:(已写成调用的函数形式)
测试程序:
fs=12000;
N=12000;
T=1/fs;
t=(0:N-1)*T;
ff=104;
sig=0.5*(1+sin(2*pi*ff*t)).*sin(2*pi*3000*t)+rand(1,length(t));
Hx=yyshang(sig,10)
function entr=yentropy(a)
a=uint8(a); %这里a为8位的单色图像或24为的RGB彩色图像
[m n l]=size(a);
entr=0;
for k=1:l
hi=zeros(1,256);
for i=1:m
for j=1:n
hi(a(i,j,k)+1)=hi(a(i,j,k)+1)+1; %求每种值的在图像中出现的次数
end
end
hi=sort(hi,'descend');
hi=hi./m./n; %求概率
en=0.0;
for i=1:256
if hi(i)0
en=en-hi(i).*log2(hi(i)); %概率不为0 累加求熵
else
i=257; %否则停止
end
end
entr=entr+en;
end
entr=entr/l; %当l=1时a为单色图像;
当l=3时a为彩色图像,三个页面的熵平均.
%计算一副图像的熵
%随机生成图像
A=floor(rand(8,8).*255);
[M,N]=size(A);
temp=zeros(1,256);
%对图像的灰度值在[0,255]上做统计
for
m=1:M;
for
n=1:N;
if
A(m,n)==0;
i=1;
else
i=A(m,n);
end
temp(i)=temp(i)+1;
end
end
temp=temp./(M*N);
%由熵的定义做计算
result=0;
for
i=1:length(temp)
if
temp(i)==0;
result=result;
else
result=result-temp(i)*log2(temp(i));
end
end
result
%计算联合熵
%随机生成图像
A=floor(rand(8,8).*255);
B=floor(rand(8,8).*255);
[M,N]=size(A);
temp=zeros(256,256);
%对图像的灰度值成对地做统计
for
m=1:M;
for
n=1:N;
if
A(m,n)==0;
i=1;
else
i=A(m,n);
end
if
B(m,n)==0;
j=1;
else
j=B(m,n);
end
temp(i,j)=temp(i,j)+1;
end
end
temp=temp./(M*N);
%由熵的定义做计算
result=0;
for
i=1:size(temp,1)
for
j=1:size(temp,2)
if
temp(i,j)==0;
result=result;
else
result=result-temp(i,j)*log2(temp(i,j));
end
end
end
result
%输入
x=[
3.69 3.71 3.65 3.87
3.71 4.07 3.87 4.42
4.30 3.75 3.63 4.43
4.08 3.78 3.65 4.49
3.93 3.87 4.37 4.47
4.18 3.96 3.72 4.46
];
% 函数shang.m, 实现用熵值法求各指标(列)的权重及各数据行的得分
% x为原始数据矩阵, 一行代表一个组, 每列对应一个成分指标
% s返回各行得分, w返回各列权重
[n,m]=size(x); % n=响应面/实验组数, m=成分指标
%% 数据的归一化处理
[X,ps]=mapminmax(x',0,1);
ps.ymin=0.002; % 归一化后的最小值
ps.ymax=0.996; % 归一化后的最大值
ps.yrange=ps.ymax-ps.ymin; % 归一化后的极差,若不调整该值, 则逆运算会出错
X=mapminmax(x',ps);
% mapminmax('reverse',xx,ps); % 反归一化, 回到原数据
X=X'; % X为归一化后的数据
%% 计算第j个指标下,第i个记录占该指标的比重p(i,j)
for i=1:n
for j=1:m
p(i,j)=X(i,j)/sum(X(:,j));
end
end
%% 计算第j个指标的熵值e(j)
k=1/log(n);
for j=1:m
e(j)=-k*sum(p(:,j).*log(p(:,j)));
end
d=ones(1,m)-e; % 计算信息熵冗余度
w=d./sum(d) % 求权值w
y(:,1)=x(:,1)*w(1)+x(:,2)*w(2);%输出
y
%---------------------------------
%求一幅数字图像的熵值
%---------------------------------
I=imread('lena.bmp');
%I=double(I);
[C,R]=size(I); %求图像的规格
Img_size=C*R; %图像像素点的总个数
L=256; %图像的灰度级
H_img=0;
nk=zeros(L,1);
for i=1:C
for j=1:R
Img_level=I(i,j)+1; %获取图像的灰度级
nk(Img_level)=nk(Img_level)+1; %统计每个灰度级像素的点数
end
end
for k=1:L
Ps(k)=nk(k)/Img_size; %计算每一个灰度级像素点所占的概率
if Ps(k)~=0; %去掉概率为0的像素点
H_img=-Ps(k)*log2(Ps(k))+H_img; %求熵值的公式
end
end
H_img
%entropy(I)
你说的对。
应该除。
p(i,j) = x(i,j) / ∑i,jx(i,j) 是对的。
概率,起码加起来应该等于1.
让你乘起来的【p(i,j) = x(i,j)∑i,jx(i,j) 】,是和你开玩笑吧。。。
关于matlab图像信息熵和matlab计算图像熵的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件至举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签: #matlab图像信息熵
相关文章