как да се изчисли ентропията на Шанън на байтови биграми

Прочетох файл с изображение в масив като този

A = imread(fileName);

и сега искам да изчисля ентропията на Шанън. Реализацията на ентропията на shannon, открита в 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