求关于熵的MATLAB代码……

求关于熵的MATLAB代码……,第1张

p = imhist(Y(:))

p(p==0) = [ ]

p = p ./ numel(Y)

H1 = -sum(p.*log2(p))

在这里Y是指的输出图像。H指的是信息熵

求图像的熵,在许多场合下都有应用,也可以有多种编写程序的方法,下面介绍作者编写的一个图像熵的函数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为彩色图像,三个页面的熵平均

%求近似熵函数function resultapen=APEN(input_signal,input_m,input_r)%input_signal为要求近似熵的序列,input_m为给定的模式的维数,input_r为相似容限x=input_signalm=input_mr=input_r[input_row,input_col]=size(x)%输入的信号序列一般为1行n列n=input_col%信号的点数

rownum=n-m+1%构造的m维矢量的行数signalmatrix=zeros(rownum,m)%构造信号矩阵for i=1:1:rownumfor j=1:1:msignalmatrix(i,j)=x(i+j-1) endendsumC=0

for ii=1:1:rownumnnum=0 for jj=1:1:rownumU=zeros(m,1)%存放d=0 for kk=1:1:m U(kk,1)=abs(signalmatrix(ii,kk)-signalmatrix(jj,kk)) endd=max(U)%X(i)与X(j)的距离的最大值if d<r nnum=nnum+1%如果距离小于阈值,则个数+1; endendC=(nnum-1)/(rownum-1) if C>0sumC=sumC+log(C) endendresultapen=sumC/rownumreturn


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12120397.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存