Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matlab中计算hsv颜色空间中两幅图像的欧氏距离_Matlab_Image Processing_Hsv_Euclidean Distance - Fatal编程技术网

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

在matlab中计算hsv颜色空间中两幅图像的欧氏距离,matlab,image-processing,hsv,euclidean-distance,Matlab,Image Processing,Hsv,Euclidean Distance,我使用下面的代码计算两幅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为

我使用下面的代码计算两幅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为1d时,上述所有代码都在2d空间中
在hsv颜色空间中计算两幅图像的欧几里德距离是否有特定的代码?
图像格式为jpeg

您需要分别为每个通道创建直方图

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(重塑(hsvImg,[],3),255);%而不是循环
hst=hst(:)/n


谢谢。那太有帮助了。我可以再问一个关于第一部分((im2hsvHist))的问题吗。我有rgb格式的图像,我用我在这个问题中提到的代码将它们转换成hsv:im2hsvHist做同样的事情吗?非常感谢。again@samdean-两种解决方案都使用
rgb2hsv
将rgb颜色空间转换为hsv颜色空间。您标注尺寸的问题仅使用hsv颜色空间的“色调”通道。这相当于在我的函数
im2hsvhit
中仅为色调通道
ci=1
运行
ci
循环。@samdean欢迎使用stackoverflow。这里的习惯是“接受”一个答案,以防它真的回答了你的问题。您可以通过单击答案旁边的“V”图标来“接受”答案。考虑一下你之前提到的问题。对不起,我有点天真。所以,如果我用你的代码而不是我的代码也没关系,因为我觉得这样更好。大约256个,这是每个历史(每个通道)的存储单元数,正如你在文章中看到的,我正试图编写它的代码,它提到颜色直方图的量化被设置为16个颜色存储单元,所以我应该将16个设置为n还是不相关?谢谢,我知道我应该按v键,我会的。但我想如果我按下按钮,问题将被锁定,我不能向你提问(即上面的评论)。我想问最后一个问题,然后按v键。按v键后锁定问题是否正确?