Использование энтропийной функции - PullRequest
3 голосов
/ 26 января 2012

Я пытался найти энтропию определенного распределения вероятностей в MATLAB.Для p я попытался сделать

E = -sum(p .* log2(p))

и Echeck = entropy(p)

Разве E и Echeck не должны быть одинаковыми?

Справка Matlab по энтропии говорит, что энтропия определяется как -sum (p. * Log2 (p)), где p содержит счетчики гистограмм, возвращенные из imhist. Но также эта энтропия преобразует любой класс, кроме логического, в uint8для вычисления количества гистограмм, поскольку он на самом деле пытается вычислить энтропию изображения в градациях серого и, следовательно, хочет, чтобы значения пикселей были дискретными.Так что я думаю, что неправильно использовать эту функцию для моих целей?Есть ли хорошая альтернатива?

1 Ответ

3 голосов
/ 26 января 2012

Я использовал open entropy, чтобы проверить код, и есть строка:

if ~islogical(I)
  I = im2uint8(I);
end
p = imhist(I(:));

, что означает, что входной сигнал преобразуется в uint8, а затем функция вычисляет энтропию гистограммы входного сигнала , а не самого входного сигнала.

Это объясняет разницу.

...