我了解到它是像素的随机性。但请帮助我们如何以数学方式计算这种随机性。以及不同的图像将如何具有不同的熵。
答案 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)
图像的熵定义如下:
其中是灰度级数(8位图像为256),是像素具有灰度级和的概率是对数函数的基础。
请注意,图像的熵与从图像的GLCM中提取的熵特征有很大不同。请查看this post了解详情。
根据您的要求,我附上了如何计算GLCM熵的示例:
首先我们导入必要的模块:
import numpy as np
from skimage.feature import greycomatrix
然后我们阅读图片:
img = io.imread('https://i.stack.imgur.com/07DZW.png')
上图中的GLCM(对应于右边的像素)计算如下:
glcm = np.squeeze(greycomatrix(img, distances=[1],
angles=[0], symmetric=True,
normed=True))
最后我们应用这个公式来计算熵:
entropy = -np.sum(glcm*np.log2(glcm + (glcm==0)))
# yields 10.704625483788325