web-dev-qa-db-ja.com

画像のエントロピーとは何ですか?どのように計算されますか?

私はそれがピクセルのランダム性であることを学びました。しかし、このランダム性が数学的にどのように計算されているかを手伝ってください。また、画像が異なればエントロピーも異なります。

4
Gagan Gayari

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))を合計する必要があります。

6
Alejandro G.

画像のエントロピーは次のように定義されます。

entropy

どこ - n はグレーレベルの数(8ビット画像の場合は256)、 probability は、ピクセルがグレーレベルを持つ確率です intensity 、および base は対数関数のベースです。

画像のエントロピーは、画像のGLCMから抽出されたエントロピー特徴とはかなり異なることに注意してください。詳細については、 この投稿 をご覧ください。

あなたの要求に従って、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
3
Tonechas