① 如何用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的結果為