2013-07-09 63 views
1

我想计算Matlab中两个图像之间的欧几里得距离。我找到了一些例子,我试过但他们不正确。
这个欧几里得距离的结果应该在01之间,但有两种不同的方法可以达到不同的解决方案。
第一个算法给我一个4位数的数字,如2000和其他这样的数字,并通过其他方式我达到了数字,如0.007
它有什么问题?计算matlab中两个图像之间的欧几里德距离

这是我提到的那些算法之一:

Im1 = imread('1.jpeg'); 
Im2 = imread('2.jpeg'); 

Im1 = rgb2gray(Im1); 
Im2 = rgb2gray(Im2); 

hn1 = imhist(Im1)./numel(Im1); 
hn2 = imhist(Im2)./numel(Im2); 

% Calculate the Euclidean distance 
f = sum((hn1 - hn2).^2) 
+0

非常类似的问题可以在这里找到:http://stackoverflow.com/questions/5475815/comparing-two-image-using-histogram?rq=1 – NKN

回答

3

的最后一行代码需要开方命令:

f = sum(sqrt(hn1-hn2).^2); 

检查这个link

您还可以使用规范命令

f = norm(hn1-hn2); 

这些post1post2可能会有用。

+0

我没有足够的声望投票给你,我很抱歉:(。谢谢你的大力帮助,为我提供了一个百万分之一 – deansam

+0

在某些特定情况下,2个数组之间的欧氏距离的结果可以是一个数组?或者它应该总是标量? – Christina

1

哦,我不知道从哪里开始,但这里有一些事情有关,你应该想:

1:你是正确的正常化直方图。你希望他们有单元L1范数:

hn1 = imhist(Im1); 
hn2 = imhist(Im2); 
hn1 = hn1/numel(hn1); 
hn2 = hn2/numel(hn2); 

2(什么是两个分布之间的欧几里得距离真)以直方图之间的L2距离并没有真正意义。你应该看看L1或Chi-2距离,或者使用相交内核。 L1是

f=norm(hn1-hn2,1); 

3:如果你真的希望它是L2欧氏距离,最后一行应

f=norm(hn1-hn2); 

但你应该相当L2-正常化直方图:

hn1 = imhist(Im1); 
hn2 = imhist(Im2); 
hn1 = hn1/norm(hn1); 
hn2 = hn2/norm(hn2); 

4:请在表达你的问题时尽量做得更清楚 - 解码有点困难:)。如果你会提到应用程序 - 我可以给出一些额外的指针。 :)

+0

非常感谢您的帮助: ) – deansam

+0

谢谢。我想写一个vsumm算法。我必须根据欧几里德距离计算提取样本中连续帧的成对距离,即 。虽然阈值为0.5,但当欧几里德距离超过0.5时,k应该增加。 – deansam

+0

我明白了。在这种情况下,即使它不是用于比较直方图的最合适的距离度量,我也会投票坚持欧氏距离(因为它通过k均值聚类步骤证明)。 – kamjagin

相关问题