代码语言:javascript复制
from PIL import Image
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
def entropy(signal):
lensig=signal.size
symset=list(set(signal))
propab=[np.size(signal[signal==i])/(1.0*lensig) for i in symset]#每个值的概率
ent=np.sum([p*np.log2(1.0/p) for p in propab])
return ent
colorIm=Image.open('C:/Users/xpp/Desktop/Lena.png')#读取图像
colorIm=np.array(colorIm)
colorIm=Image.fromarray(colorIm)
greyIm=colorIm.convert('L')
greyIm=np.array(greyIm)
N=3
S=greyIm.shape
E=np.array(greyIm)
#以图像左上角为坐标0点
for row in range(S[0]):
for col in range(S[1]):
Left_x=np.max([0,col-N])
Right_x=np.min([S[1],col N])
up_y=np.max([0,row-N])
down_y=np.min([S[0],row N])
region=greyIm[up_y:down_y,Left_x:Right_x].flatten()#返回一维数组
E[row,col]=entropy(region)
plt.subplot(1,3,1)
plt.imshow(colorIm)
plt.subplot(1,3,3)
plt.imshow(greyIm,cmap=plt.cm.gray)
plt.subplot(1,3,3)
plt.imshow(E,cmap=plt.cm.jet)
plt.xlabel('6x6 邻域熵')
plt.colorbar()
plt.show()
算法:局部熵是将图分成一个个区域,分别计算再融合成信息分布图,有点类似heatmap。熵是体系的混乱的程度,越乱越大。图像熵是图像特征的一种统计形式,反映了图像中平均信息量的多少,能够反映图像各像素点的分布复杂程度。熵越大,图像越清晰。