как рассчитать энтропию Шеннона байтовых биграмм

Я прочитал файл изображения в такой массив

A = imread(fileName);

и теперь я хочу рассчитать энтропию Шеннона. Реализация энтропии Шеннона, найденная в maltab, представляет собой анализ энтропии на уровне байтов, который считает, что файл состоит из 256 уровней байтов.

wentropy(x,'shannon')

Но мне нужно выполнить анализ энтропии биграмм, который должен будет просмотреть файл, состоящий из 65536 уровней. Может ли кто-нибудь предложить мне хороший способ сделать это.


person crowso    schedule 12.11.2012    source источник
comment
Я заинтересован. Можете ли вы определить математику немного лучше?   -  person Acorbe    schedule 12.11.2012


Ответы (2)


Энтропию случайной величины можно рассчитать по следующей формуле: введите здесь описание изображения

Где p(x) это Prob(X=x).

Учитывая набор n наблюдений (x1, x2, .... xn), вы затем вычисляете P(X=x) для диапазона всех значений x (в вашем случае это будет между (0 and 65535), а затем суммируете все значения. Самый простой способ сделать это - использовать hist

byteLevel = 65536
% count the observations

observationHist = hist(observations, byteLevel);
% convert to a probability
probXVal = observationHist ./ sum(observationHist);  

% compute the entropy
entropy = - sum( probXVal .* log2(probXVal) );

На файловом обмене есть несколько реализаций этого, которые стоит проверить.

Примечание: откуда вы взяли, что wentropy использует 256-байтовые уровни? Я не вижу этого нигде в доках? Помните, что в Matlab пиксели цветного изображения имеют 3 канала (R, G, B), каждый из которых требует 8 бит (или 256 байтовых уровней?).

Кроме того, поскольку каждый канал связан между [0 256), вы можете создать сопоставление между P(R=r,G=g,B=b) и P(X=x) следующим образом:

data = imageData(:,:,1);
data = data + (imgData(:,:,2) * 256);
data = data + (imgData(:,:,3) * 256 * 256);

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

person slayton    schedule 12.11.2012
comment
Хороший! таким образом, вы вычисляете своего рода избыточность изображения с хроматической точки зрения, верно? Дело в том, почему 65536? @Crowso, ты работаешь с одним общим цветовым каналом шириной 16 бит? - person Acorbe; 12.11.2012
comment
@Acorbe, да, энтропия - это мера неопределенности или информации, содержащейся в случайной величине. Если случайная величина дает результаты с высоким уровнем неопределенности, она имеет большую энтропию. Точно так же, если неопределенность низка, энтропия также низка. - person slayton; 12.11.2012
comment
Теперь у вас есть бит 16M. Может ли пользователь иметь 6-битное/цветное изображение? - person Acorbe; 12.11.2012
comment
@Acorbe да, это правильно, что X может принимать значения между [0, 2^24). Не совсем понятно, что на самом деле хочет сделать ОП. - person slayton; 12.11.2012

Преобразуйте цветное изображение с уровнями «65536» в серое изображение с уровнями «256» и рассмотрите оценку энтропии.

person SACn    schedule 05.03.2017