gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:35:39 31 4
gpt4 key购买 nike

我使用下面的代码计算两个 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 颜色模式下使用两个图像的代码,但它不会工作
因为上面所有的代码都在二维空间中,而 hsv 是一维的
是否有计算 hsv 颜色空间中两个图像的欧氏距离的特定代码?图片格式为jpeg

最佳答案

您需要为每个 channel 单独创建一个直方图

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;

关于matlab - 在matlab中计算hsv颜色空间中两个图像的欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17781345/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com