图像的熵是多少,如何计算?

Gag*_*ari 3 statistics image-processing entropy

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

小智 6

您也可以直接从中计算Shannon熵img。做就是了:

import skimage    
entropy = skimage.measure.shannon_entropy(img)
Run Code Online (Sandbox Code Playgroud)

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

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)))
Run Code Online (Sandbox Code Playgroud)

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

  • @mLstudent33`导入skimage.measure` (5认同)

Ton*_*has 5

图像的熵定义如下:

熵

在哪里 n 是灰度级数(8 位图像为 256), 可能性 是像素具有灰度级的概率 强度, 和 根据 是对数函数的底。

请注意,图像的熵与从图像的 GLCM(灰度共生矩阵)中提取的熵特征有很大不同。看看这篇文章以了解更多信息。

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

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

import numpy as np
from skimage.feature import greycomatrix
Run Code Online (Sandbox Code Playgroud)

然后我们读取图像:

img = io.imread('https://i.stack.imgur.com/07DZW.png')
Run Code Online (Sandbox Code Playgroud)

狮子

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

glcm = np.squeeze(greycomatrix(img, distances=[1], 
                               angles=[0], symmetric=True, 
                               normed=True))
Run Code Online (Sandbox Code Playgroud)

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

熵

在哪里 皮杰 代表 GLCM 的条目。

如果我们设置 根据到 2,结果以位表示。

entropy = -np.sum(glcm*np.log2(glcm + (glcm==0)))
# yields 10.704625483788325
Run Code Online (Sandbox Code Playgroud)