且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

计算matlab中hsv颜色空间中两个图像的欧氏距离

更新时间:2023-01-27 11:07:57

您需要单独为每个频道创建直方图

You need to create a histogram for each channel 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空间成像距离

Using this function you can compute the image to image distance in hsv space

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;

n = 256;
hsvImg = rgb2hsv( img );
hst = hist( reshape(hsvImg, [], 3), 255 ); % instead of loop!
hst = hst(:) / n;