Ентропията на случайна променлива може да се изчисли по следната формула:
Където 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