什么是图像的熵以及如何计算?

时间:2018-05-13 05:41:48

标签: image-processing statistics entropy

我了解到它是像素的随机性。但请帮助我们如何以数学方式计算这种随机性。以及不同的图像将如何具有不同的熵。

2 个答案:

答案 0 :(得分:2)

您也可以直接从img计算Shannon熵。只要做:

import skimage    
entropy = skimage.measure.shannon_entropy(img)

如果您想查看背后的数学公式:

import numpy as np
marg = np.histogramdd(np.ravel(img), bins = 256)[0]/img.size
marg = list(filter(lambda p: p > 0, np.ravel(marg)))
entropy = -np.sum(np.multiply(marg, np.log2(marg)))

首先,marg是二维灰度图像img的边缘分布。对于8位图像,bins设置为256。然后,您需要过滤出等于零的概率,并最终对Shannon's entropy定义的其余元素np.multiply(marg, np.log2(marg))求和。

答案 1 :(得分:1)

图像的熵定义如下:

entropy

其中n是灰度级数(8位图像为256),probability是像素具有灰度级intensitybase的概率是对数函数的基础。

请注意,图像的熵与从图像的GLCM中提取的熵特征有很大不同。请查看this post了解详情。

根据您的要求,我附上了如何计算GLCM熵的示例:

首先我们导入必要的模块:

import numpy as np
from skimage.feature import greycomatrix

然后我们阅读图片:

img = io.imread('https://i.stack.imgur.com/07DZW.png')

lion

上图中的GLCM(对应于右边的像素)计算如下:

glcm = np.squeeze(greycomatrix(img, distances=[1], 
                               angles=[0], symmetric=True, 
                               normed=True))

最后我们应用这个公式来计算熵:

entropy

其中pij代表GLCM的条目。

如果我们将base设置为2,则结果以表示。

entropy = -np.sum(glcm*np.log2(glcm + (glcm==0)))
# yields 10.704625483788325