这是自己最近一个项目所用到的。苦于网上只有C++版本。所以自己动手改写了下。
首先先在这里简单介绍下图像熵。图像熵即一幅图像的信息熵。信息熵简单来说就是把信息进行了量化。通过熵的大小表示信息的混乱程度。一般情况下,图像中包涵的信息量多,熵值越大。
网上更多的是基于C++和opencv做的信息熵计算。参考这篇文章。我用python进行了改写。
import cv2
import numpy as np
tmp = []
for i in range(256):
tmp.append(0)
val = 0
k = 0
res = 0
image = cv2.imread('C:/Users/shaw/Desktop/new/result/stand/squat_0.5_5_1.png',0)
img = np.array(image)
for i in range(len(img)):
for j in range(len(img[i])):
val = img[i][j]
tmp[val] = float(tmp[val] + 1)
k = float(k + 1)
for i in range(len(tmp)):
tmp[i] = float(tmp[i] / k)
for i in range(len(tmp)):
if(tmp[i] == 0):
res = res
else:
res = float(res - tmp[i] * (math.log(tmp[i]) / math.log(2.0)))
print res
输出结果即为图像的信息熵
其中要注意的是读取图像一定要是灰度图。