1

我想在 Matlab 中计算两个图像之间的欧几里得距离。我找到了一些例子,我已经尝试过了,但它们不正确。
这个欧几里得距离的结果应该在我达到不同解决方案的两种不同方式0之间。 第一个算法给了我一个 4 位数的数字,例如像这样的其他数字,通过另一种方式,我得到了这样的数字,有 什么问题? 1
20000.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)
4

2 回答 2

4

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

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

检查这个链接

也可以使用norm命令

f = norm(hn1-hn2);

这些post1post2可能很有用。

于 2013-07-09T17:59:32.770 回答
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:请尽量在您的问题的表述中更清楚 - 这有点难以解码:)。如果您会提到该应用程序 - 我可以提供一些额外的指示。:)

于 2013-07-09T18:04:46.737 回答