#matlab #image-processing
Вопрос:
Я хочу вычислить, на сколько изображение имеет более высокую «энтропию красного канала», чем «энтропия синего канала». Я хотел получить результат в процентах. Но он всегда показывает ноль. Но я проверил случайное одно изображение, и некоторые из них удовлетворяют условию. как я могу устранить эту ошибку? Я использую MATLAB R2015b
folder = 'F:raw-890';
filePattern = fullfile(folder, '*.png');
myFiles = dir(filePattern); % the folder inwhich ur images exists
for k = 1 : length(myFiles)
fullFileName = fullfile(folder, myFiles(k).name);
I= imread(fullFileName);
Red = I(:,:,1);
Green = I(:,:,2);
Blue = I(:,:,3);
%I = I(:); % Vectorization of RGB values
p = imhist(Red); % Histogram
p(p == 0) = [ ];% remove zero entries in p
p = p ./ numel(I); % normalize p so that sum(p) is one.
Er = round(-sum(p.*log2(p)),3);
p = imhist(Blue); % Histogram
p(p == 0) = [ ];% remove zero entries in p
p = p ./ numel(I); % normalize p so that sum(p) is one.
Eb = round(-sum(p.*log2(p)),3);
end
percentage = sum(Er > Eb) / numel(Er) * 100; % Percentage of images with red entropy higher than blue entropy
disp(['Percentage of images with red entropy higher than blue entropy: ' num2str(percentage)])
Комментарии:
1. Вы пытались отладить код? Что это за тип
p
?2. При правильном отступе вы можете сразу определить, в чем проблема:
Er
иEb
перезаписываются новым скалярным значением в каждой итерации цикла, но вы ожидаете, что это будут массивы в конце цикла.