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)),如香农的熵所定义。
图像的熵定义如下:
在哪里
是灰度级数(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)
最后我们应用这个公式来计算熵:
entropy = -np.sum(glcm*np.log2(glcm + (glcm==0)))
# yields 10.704625483788325
Run Code Online (Sandbox Code Playgroud)