Python关于图像熵的计算

这是自己最近一个项目所用到的。苦于网上只有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

输出结果即为图像的信息熵

其中要注意的是读取图像一定要是灰度图。


你可能感兴趣的:(python,opencv)