求RGB文件三通道分量的熵
使用python语言,1、画图较方便 2、矩阵运算较方便
显示图像
import cv2
#读取RGB图像
image_path="C:\\Users\\86183\\Desktop\\大三下\\test.rgb"
f=open(image_path,"rb")
data=f.read()
f.close()
data=[int(x) for x in data]
#注意存储为BGR格式,读取为256,256
data=np.array(data).reshape((256,256,3)).astype(np.uint8)
cv2.imshow("data",data)
cv2.waitKey()
注意使用命令行pip install opencv-python 再直接调用cv2库,才可显示图像。原cv库无imshow函数
)]
计算单个像素值熵
#计算熵
#输入为0-255像素值的概率分布,输出为每一种像素值的信息熵序列。
def single_entropy(P):
e=np.zeros((256,1))
#由于如果P存在0时,np.log(P)计算报错,将原序列中的0去除
i_nzero=np.nonzero(P)
P=P[i_nzero]
e1=-(P*(np.log(P)))/np.log(2)
#将数组中原数组非0部分的计算值填充
e[i_nzero[0],0]=e1
return e
计算通道分量熵
def sum_entropy(single_e):
e=np.sum(single_e)
return e
主要函数
#读取RGB图像
image_path="C:\\Users\\86183\\Desktop\\大三下\\test.rgb"
f=open(image_path,"rb")
data=f.read()
f.close()
data=[int(x) for x in data]
#注意存储为BGR格式,读取为256*256
data=np.array(data).reshape((256*256,3)).astype(np.uint8)
cv2.imshow("data",data)
cv2.waitKey()
B=data[:,0]
G=data[:,1]
R=data[:,2]
n_B=np.zeros((256,1))
n_G=np.zeros((256,1))
n_R=np.zeros((256,1))
for i in range(256*256):
n_B[B[i]]+=1;
n_G[G[i]]+=1;
n_R[R[i]]+=1;
P_B=n_B/(256*256)
P_G=n_G/(256*256)
P_R=n_R/(256*256)
single_b_e=single_entropy(P_B)
single_g_e=single_entropy(P_G)
single_r_e=single_entropy(P_R)
sum_b_e=sum_entropy(single_b_e)
plt.plot(single_b_e,'b')
plt.plot(single_g_e,'g')
plt.plot(single_r_e,'r')
plt.show()
(single_b_e,'b')
plt.plot(single_g_e,'g')
plt.plot(single_r_e,'r')
plt.show()