① 如何用matlab计算已知图像的熵
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为彩色图像,三个页面的熵平均.
② matlab中如何计算两组数据的互信息,或者如何计算联合熵,为什么我算出来都是负值 求解!!急
L(i,j)=mm(i)*mm2(j); 这一条意味着两个变量相互独立,最终答案肯定为0,
m=[78.3 13.2 4.32 4.32 72 24.5 33.9 679 143 20 26.7 46.9 230 159.8 128 215.6 139 139 70.2 129.6 ];
m = mapminmax(m,0,1);
m2=[78.61 96.98 81.86 82.91 81.35 83.95 78.76 85.72 83.98 84.47 84.73 76.14 124.69 124.69 124.69 623.47 124.69 124.69 18.75 630.02 ];
m2 = mapminmax(m2,0,1);
Y=hist3([m',m2'])/100;
mm=sum(Y,1);
mm2=sum(Y,2);
mm2=mm2';
%
% mm=hist(m)/10;
% mm
mm(mm==0) = [ ];
% mm
Hm = -sum(mm.*log2(mm));
Hm
mm2(mm2==0) = [ ];
mm2
Hm2 = -sum(mm2.*log2(mm2));
Hm2
Y=reshape(Y,1,100);
Y(Y==0)=[];
Hab=-sum(sum(Y.*log2(Y)));
disp('Hab信源联合熵为:');
Hab
%计算a和b的互信息
mi =( Hm+Hm2)-Hab;
mi
③ 如何编写求图像的熵的Matlab程序
求图像的熵,在许多场合下都有应用,也可以有多种编写程序的方法,下面介绍作者编写的一个图像熵的函数yentropy(),可以直接调用。可以用于求图像的局部熵,也可以求其整体熵。
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为彩色图像,三个页面的熵平均
④ 信息熵的问题-MATLAB
有一个明显的问题,
temp+=1+a(i)(j);
在MATLAB中与C语言不同,是没有 '+=' 这个运算符的。
应该改成 temp=temp+1+a(i)(j);
⑤ matlab中使用matlab自带信息熵entropy函数, 出现错误 Undefined command/function 'Entropy' ,版本为7.
你的问题也太简洁了,不懂
⑥ 如何用matlab软件计算一幅图像信息的熵以及两幅图像间的联合熵
%计算一副图像的熵
%随机生成图像
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
⑦ matlab中的entropy函数是如何实现的
(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)
⑧ 熵函数的matlab编程,函数见图片。
没弄明白 , 你给的输入参数是Pij , Xij ?
是否目的是求这样的一个函数?
function [R]=shang( P , X) % P,X为 i行,j列的数据?
如果是以上目的,那很简单的
另:想知道你什么专业的,数学 还是其他?
⑨ matlab求振动信号信息熵
题主给出的用matlab求振动信号信息熵的代码有下列几个问题:
1、shannon=-sum(x.*log2(x)),该代码不能写在for循环中,因为sum是求和命令,其要求x为数值向量
2、循环语句中 x=b(i)/sum(b) ,该代码最后的得到结果是一个x数值,并没有得到一组数值向量,所以该循环应这样来写
for i=1:3072
x(ⅰ)=b(i)/sum(b);
end
3、为了帮你理解,你可运行下列代码,就可以发现,他们的区别。
A=1:10;
for i=1:10,x=A(i)/sum(A);end,x
for i=1:10,x(i)=A(i)/sum(A);end,x
⑩ 如何matlab求解直方图的偏度 峰值 能量 熵
正态分布的信息熵H=-∫P(x)lnP(x) dx 其中第一个积分部分就是∫P(x)dx=1 , 第二积分部分就是E(x-u)^2=σ2 所以H的结果为