用matlab计算两个图像之间的欧氏距离

时间:2013-07-09 17:42:16

标签: image matlab

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

这是我提到的算法之一:

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)

2 个答案:

答案 0 :(得分:4)

最后一行代码需要一个sqrt命令:

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

检查此link

您还可以使用规范命令

f = norm(hn1-hn2);

这些post1post2可能很有用。

答案 1 :(得分: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:请在设计问题时尽量清楚 - 解码有点困难:)。如果您已经提到了应用程序 - 我可以给出一些额外的指示。 :)