2013-07-22 6 views
2

я использую следующий код для вычисления евклидова расстояния для двух RgB изображений:
рассчитать евклидово расстояния двух изображений в ВПГЕ цветового пространства в MATLAB

Im1 = imread(filename1); 
Im1 = rgb2gray(Im1); 
hn1 = imhist(Im1)./numel(Im1); 
Im2 = imread(filename2); 
Im2 = rgb2gray(Im2); 
hn2 = imhist(Im2)./numel(Im2); 
f = norm(hn1-hn2); 

, и это дает мне правильный ответ
но теперь я хотите использовать код для двух изображений в режиме цветового режима hsv, но он не работает на нем
вызывают все вышеуказанные коды в 2d-пространстве, в то время как hsv равно 1d
есть ли какой-либо конкретный код для вычисления евклидова расстояния двух изображений в hsv цветовое пространство? формат изображения Jpeg

ответ

2

Вам нужно создать гистограмму для каждого канала seperatetly

function hst = im2hsvHist(img) 
% 
% computes three channels histogram in HSV color space 
% 
n = 256; % number of bins per hist (per channel) 
hsvImg = rgb2hsv(img); 
hst = zeros(n,3); 
for ci = 1:3 
    hst(:,ci) = imhist(hsvImg(:,:,ci) , n); 
end 
hst = hst(:) ./ n; % to 3*n vector, normalize by n and not 3n 

С помощью этой функции можно вычислить изображение на расстояние изображения в ВПГ пространстве

Im1 = imread(filename1); 
hst1 = im2hsvHist(Im1); 
Im2 = imread(filename2); 
hst2 = im2hsvDist(Im2); 
f = norm(hst1 - hst2); 

стащить заглянуть в векторную версию im2hsvHist:

n = 256;
hsvImg = rgb2hsv (img);
hst = hist (reshape (hsvImg, [], 3), 255); % вместо цикла!
hst = hst (:)/n;

+0

большое спасибо. это так полезно. могу ли я задать другой вопрос о первой части ((im2hsvHist)). У меня есть изображения в rgb, я конвертирую их в hsv по коду, который я упомянул в этом вопросе: http://stackoverflow.com/questions/17724689/a-color-histogram-algorithm-in-matlab делает im2hsvHist делать то же самое вещь? еще раз спасибо – samdean

+0

@samdean - оба решения используют 'rgb2hsv' для преобразования цветового пространства rgb в цветовое пространство hsv. В заданном вами вопросе используется только канал «Hue» цветового пространства hsv. Это эквивалентно запуску цикла 'ci' в моей функции' im2hsvHist' только для 'ci = 1' - канала Hue. – Shai

+0

@samdean Добро пожаловать в stackoverflow. Здесь принято «принимать» ответ, если он действительно отвечает на ваш вопрос. Вы «принимаете» ответ, нажав на значок «V» рядом с ним. Подумайте об этом и по вопросу http://stackoverflow.com/questions/17724689/a-color-histogram-algorithm-in-matlab, о котором вы говорили ранее. – Shai

 Смежные вопросы

  • Нет связанных вопросов^_^