Что такое энтропия изображения и как оно рассчитывается? - PullRequest
0 голосов
/ 13 мая 2018

Я узнал, что это случайность пикселей.Но, пожалуйста, помогите с математическим расчетом этой случайности.А также как разные изображения будут иметь разную энтропию.

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

Вы также можете рассчитать энтропию Шеннона прямо из вашего 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 - это предельное распределение двухмерного изображения в градациях серого img.bins установлено в 256 для 8-битного изображения.Затем вам нужно отфильтровать вероятности, равные нулю, и, наконец, суммировать по оставшимся элементам np.multiply(marg, np.log2(marg)), как определено Энтропия Шеннона .

0 голосов
/ 13 мая 2018

Энтропия изображения определяется следующим образом:

entropy

где n - количество уровней серого (256 для 8-битных изображений), 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
...