我想在Matlab中计算两个图像之间的欧几里德距离。我找到了一些例子,我尝试过但是不正确
欧几里德距离的结果应该在0
和1
之间,但我有两种不同的方式可以达到不同的解决方案。
第一个算法给我一个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)
答案 0 :(得分:4)
答案 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:请在设计问题时尽量清楚 - 解码有点困难:)。如果您已经提到了应用程序 - 我可以给出一些额外的指示。 :)