
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)