私はそれがピクセルのランダム性であることを学びました。しかし、このランダム性が数学的にどのように計算されているかを手伝ってください。また、画像が異なればエントロピーも異なります。
img
から直接シャノンエントロピーを計算することもできます。ただしてください:
_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
は、2次元グレースケール画像img
の周辺分布です。 bins
は、8ビットイメージの場合は256に設定されます。次に、ゼロに等しい確率を除外し、最後に、 シャノンのエントロピー で定義されているように、残りの要素np.multiply(marg, np.log2(marg))
を合計する必要があります。
画像のエントロピーは次のように定義されます。
どこ - はグレーレベルの数(8ビット画像の場合は256)、 は、ピクセルがグレーレベルを持つ確率です 、および は対数関数のベースです。
画像のエントロピーは、画像のGLCMから抽出されたエントロピー特徴とはかなり異なることに注意してください。詳細については、 この投稿 をご覧ください。
あなたの要求に従って、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