我使用下面的代码来计算两个rgb图像的欧几里德距离:
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
答案 0 :(得分:2)
您需要单独为每个频道创建直方图
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;