参考matlab中图像局部熵的计算方法,改写为python。为检验将影像局部熵转化为灰度后的正确性,采用鼠标取点检验的方法。并将熵以灰度图像输出保存。
#-*- coding:utf-8 -*-
from numpy import *
from pylab import *
from PIL import Image
I=Image.open('123.jpg').convert('L')
I1=I.resize((100,100)) #实验采样
Im=array(I1)
m,n=Im.shape
Im2=zeros(Im.shape)
k=3
for i in range(k,m-k):
for j in range(k,n-k):
his = zeros(256)
for p in range(i-k,i+k+1):
for q in range(j-k,j+k+1):
his[Im[p,q]]=his[Im[p,q]]+1
his1=his/float(sum(his))
for g in range(0,256):
if his1[g]!=0:
Im2[i,j]=Im2[i,j]-his1[g]*log(his1[g])
Im3=zeros(Im.shape) #Im3为将熵进行归一化处理
Im4=zeros(Im.shape) #Im4为熵转换成灰度图像
Im5=zeros(Im.shape) #Im5为二值图像,阈值为200
maxa=amax(Im2)
mina=amin(Im2)
for i in range(0,m):
for j in range(0,n):
if (maxa-mina)!=0:
Im3[i,j]=(Im2[i,j]-mina)/(maxa-mina)
else:
Im3[i,j]=1
Im4[i,j]=uint(Im3[i,j]*255)
if Im4[i,j]>=200:
Im5[i,j]=1
else:
Im5[i,j]=0
t=imshow(Im4)
plt.colorbar(t)
print 'Please click a point' #鼠标取值
x=ginput(3)
for w in range(0,3):
print w,'times,you clicked:',x[w][0],x[w][1],Im4[x[w][0],x[w][1]]
show()
Im6=Image.fromarray(uint8(Im4))
Im6.save('123_ent.jpg')实验结果如下图所示:上图为原始图像,下图为局部熵。版权声明:本文为nillei原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。