Энтропию случайной величины можно рассчитать по следующей формуле: ![введите здесь описание изображения](https://i.stack.imgur.com/YEHYS.png)
Где 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