Взаимная информация, расхождение по шкале Кульбака Лейблера между двумя цветными изображениями

#matlab #image-processing #entropy #probability-density

#matlab #обработка изображений #энтропия #плотность вероятности

Вопрос:

Я работаю над проектом по классификации изображений с использованием взаимной информации. Это требует от меня использования распределения вероятностей цветного изображения, либо я хочу вычислить взаимную информацию, либо расхождение Кулбека Лейблера в Matlab. Кто-нибудь может мне помочь в этом? Я вычислил энтропию цветного изображения как:

 I = imread('s1.png');
% rgb_columns = reshape(rgb, [], 3);

% %Change RGB matrices to a single matrix of color indices.
% %Removes the third dimension from the pixel intensity matrix.
Color_ind=double(I(:,:,1)).*256^2 double(I(:,:,2).*256) double(I(:,:,3));      
disp(size(Color_ind));     

% Finding unique elements in the matrix and find their length
unique_ind=unique(Color_ind);
unique_len=length(unique_ind);

%Pre-allocate space for the vector that will hold the number of entries
%for each unique color
color_count_prob=zeros(unique_len,1);

%Count the number of each occurrence of each unique color index in the 
%original matrix.
for i = 1:unique_len
  color_count_prob(i)=(length(find(unique_ind(i)==Color_ind)))/(2073600);
end
en_sum=0;
for i = 1:unique_len
  en_sum = en_sum   log2(color_count_prob(i));
end
en = -en_sum;
  

Комментарии:

1. Опубликуйте некоторый код и покажите нам, что вы пробовали. Добро пожаловать в stack overflow

2. Я выполнил вычисление энтропии изображения, но я не понимаю, как вычислить взаимную информацию и расхождение KL, поскольку для этого требуется pdf изображения. Как определить распределение вероятностей цветного изображения?

3. энтропия = сумма (pi * log2(pi)). Но вы, кажется, вычисляете это как сумму (log2 (pi))

4. как я могу использовать scipy, чтобы получить генератор распределения вероятностей с минимальным расхождением KL в python?

Ответ №1:

Для вычисления цветного изображения в формате PDF:

Сначала вам нужно преобразовать изображение в оттенки серого. Если вы настаиваете на том, чтобы оставаться в режиме RGB (или любом другом цветном режиме), вам придется сгенерировать 3 PDF-файла (по одному для каждого цветового канала) — я бы не советовал делать это для целей Kullback Liebler или взаимной информации, подойдет изображение в оттенках серого.

Во-вторых, вам нужно рассчитать распределение каждого изображения. Для этого вам нужно будет сгладить ваше изображение (преобразовать из 2D-массива в 1D-массив). Как только вы выровняете изображение, вы должны отсортировать значения. После сортировки их следует нормализовать (вы можете этого не делать, но я бы рекомендовал). После этого вы можете вывести гистограмму для изображения.

И чтобы измерить расхождение Кулбека Либлера, вам нужно:

  1. Измерьте энтропию на гистограммах вашего изображения. Это будет число.
  2. Просто вычтите значения из первого шага, и это даст вам значение расхождения Кулбека Либлера для этих двух изображений.