如何编写求图像的熵的Matlab程序

如何编写求图像的熵的Matlab程序,第1张

图像的熵,在型纯许多场合下都有应用,也可以有多种编写程序的方法,下面介绍作者编写的一个图像熵的函数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 entr=yentropy(a)

a=uint8(a)%把输入矩阵a强制转化成为一个字节类型的变量矩阵,

%可以差不多理解是double转unsigned int。所以取值0~255

[m n l]=size(a)%可以从这看出a是一个三维数组,你可以理解是长*宽*高

entr=0%设定一个初始变量,方便循环调用

for k=1:1%开始进入循环,但是只是循环一次。这里其实可以删除。毕竟只循环一次,完全可以当成顺序执行

hi=zeros(1,256)%hi是一个1*256的二维数组

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%下面是一个双层子循环,循环次数由m,即a的长度决定%

% 以及n,即a的宽决定 %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:m

for j=1:n

hi(a(i,j,k)+1)=hi(a(i,j,k)+1)+1%该循环主要使矩阵a(i,j,k)在k初始时,i,j各兄拆长、宽+1后差迟给hi矩阵重新赋值

end

end

hi=sort(hi,'descend')%调用sort排序函数,进行降序排序

hi=hi./m./n %这里只是数值上的一点变换,大概是归一化

en=0.0 %再次定义一个新变量

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%以下是循环判断程序,查询hi(i)向量上的数是否满足大于0 %

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

for i=1:256

if hi(i)>0

en=en-hi(i).*log2(hi(i))%满足进行赋值

else

i=257%如果出现小于0的情况,直接跳出循环。

end

end

entr=entr+en%变量entr加上en的累加和

end

entr=entr/l

这是第一个程序说明,你先看看。

%%%%%%%%%%%%应该是图像处理的程羡庆枣序%%%%%%%%%%%

img=imread('normal1.jpg')%读取normal1.jpg图像

[M,N]=size(img) %获得图像像素长、宽

temp=zeros(M,N) %重新根据像素的长宽,定义一个同等维数的零矩阵

figure,imshow(img) %画normal1.jpg图像

%%%%%%%%%%%%%

%进入循环程序%

for m=1:M %首先按行扫描

for n=1:N%按列扫描

if img(m,n)==0%发现图像出现灰度值为0的时候

i=1 %使变量i=0

else

i=img(m,n)%否则i等于该图像的灰度值

end

temp(i)=temp(i)+1%然后temp累加,但是你这个程序写得有点问题,

%temp是列累加,还是行累加。另外i必须是整型变量。否则赋值出错

%其次灰度不为0,这个程序也会出错

end

end

temp=temp./(M*N)%取一下平均

EntropyResult=0%只是一个简单赋值0

for i=1:length(temp)%单写length(temp)=N

if temp(i)==0 %以下也是一个相当简单的矩阵判断是否是0的程序了

EntropyResult=EntropyResult

else

EntropyResult=EntropyResult-temp(i)*log2(temp(i))

end

end

EntropyResult


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

原文地址:https://54852.com/yw/12351533.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存