2013-07-22 72 views
2

我使用下面的代碼來計算歐幾里得距離兩個RGB圖像:
計算HSV顏色空間中的兩個圖像的歐氏距離在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色彩空間? 圖像格式爲JPG

回答

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 

使用此功能,您可以計算在HSV空間

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 does im2hsvHist do same事情?再次感謝你 – samdean

+0

@samdean - 兩種解決方案都使用'rgb2hsv'將rgb色彩空間轉換爲hsv色彩空間。你提出的問題只使用hsv色彩空間的「Hue」通道。這相當於在我的函數'im2hsvHist'中運行'ci'循環僅用於'ci = 1' - Hue通道。 – Shai

+0

@samdean歡迎來到stackoverflow。如果它真的回答你的問題,這裏是「接受」答案。您通過點擊旁邊的「V」圖標來「接受」答案。考慮這樣做也是你之前提到的問題http://stackoverflow.com/questions/17724689/a-color-histogram-algorithm-in-matlab。 – Shai