Разница между историей и имистом в матлабе
В чем разница между hist
а также imhist
функции в Matlab? У меня есть матрица значений уровней цвета, загруженных из изображения с imread
и нужно посчитать значение энтропии изображения с помощью гистограммы.
Когда используешь imhist
результирующая матрица содержит нули во всех местах, кроме последнего (нижний правый), которое содержит некоторое большое значение (несколько тысяч или около того). Поскольку этот вывод кажется неправильным, я попытался использовать вместо imhist
и получающиеся значения намного лучше, матрица выполняется с правильными значениями вместо нулей.
Однако, согласно документам, imhist
должно быть лучше в этом случае и hist
должен дать странные результаты..
К сожалению, я не очень хорош в Matlab, поэтому не могу дать вам лучшее описание проблемы. Я могу добавить другую информацию в будущем.
Поэтому я попытаюсь лучше объяснить мою проблему. У меня есть изображение, для которого я должен подсчитать энтропию и несколько других значений (сколько байт потребуется, чтобы сохранить это изображение,..). Я написал эту функцию, и она работает довольно хорошо
function [entropy, bytes_image, bytes_coding] = entropy_single_pixels(im)
im = double(im);
histg = hist(im);
histg(histg==0) = [];
nzhist = histg ./ numel(im);
entropy = -sum(nzhist.*log2(nzhist));
bytes_image = (entropy*(numel(im))/8);
bytes_coding = 2*numel(unique(im));
fprintf('ENTROPY_VALUE:%s\n',num2str(entropy));
fprintf('BYTES_IMAGE:%s\n',num2str(bytes_image));
fprintf('BYTES_CODING:%s\n',num2str(bytes_coding));
end
Тогда я должен считать то же самое, но я должен сделать "пары" из пикселей, которые находятся ниже друг друга. Таким образом, у меня есть только половина строк и одинаковое количество столбцов. Мне нужно выразить каждую уникальную пару пикселей как отдельное число, поэтому я умножил первый на 1000 и добавил к нему второй... Впоследствии мне нужно применить ту же функцию, что и в первом примере, но это время, когда я получаю странные цифры от imhist
функция. При использовании Hist, кажется, все в порядке, но я действительно не думаю, что поведение правильное, так что это должно быть где-то моя ошибка. Я на самом деле очень хорошо понимаю, что я хочу сделать, или, по крайней мере, я на это надеюсь, но, к сожалению, Matlab делает все это довольно сложно для меня:)
2 ответа
Гистограмма - вычисление гистограммы (количество появлений каждого пикселя) в цветном изображении.........
imhist - вычислить гистограмму в двухмерном изображении.
Использование im2double
вместо double
если вы хотите использовать imhist
, imhist
Функция ожидает, что данные двойной или одинарной точности находятся в диапазоне данных [0,1], поэтому вы видите все в последнем бункере гистограммы.