【问题标题】:calculating Euclidean distance between two image in matlab在matlab中计算两个图像之间的欧几里得距离
【发布时间】:2016-09-11 23:44:35
【问题描述】:

我想在 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)

【问题讨论】:

标签: image matlab


【解决方案1】:

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

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

检查这个link

您也可以使用 norm 命令

f = norm(hn1-hn2);

这些post1post2 很有用。

【讨论】:

  • 我没有足够的声望给你投票,很抱歉:(。感谢你的大力帮助
  • 在某些特定情况下,两个数组之间的欧几里得距离的结果可以是一个数组?还是应该总是标量?
【解决方案2】:

哦,我不知道从哪里开始,但您应该考虑以下几点:

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

【讨论】:

  • 谢谢。我想写vsumm算法。我必须根据欧几里得距离计算提取样本中连续帧的成对距离。虽然有一个阈值 0.5 ,但当欧几里德距离超过 0.5 时,k 应该增加。
  • 我明白了。在这种情况下,我会投票支持欧几里得距离(因为它是由 k 均值聚类步骤证明的),即使它不是比较直方图的最合适的距离度量。
  • 谢谢。你对这个算法有什么想法吗?我正在写它,它有点难。你有什么指导吗?
  • 亲爱的 kamjagin
    你能回答我在这个链接中提出的其他问题吗:stackoverflow.com/questions/17563980/…
猜你喜欢
  • 2013-07-20
  • 2014-06-08
  • 2023-03-12
  • 2020-06-10
  • 1970-01-01
  • 2018-06-14
  • 2014-03-27
  • 2020-09-25
相关资源
最近更新 更多