我写了一个程序来基于颜色和IM使用欧几里德距离算法相互比较两个图像,但是当我运行它并传递两个图像时,我得到一个距离,然后当我传递相同的图像但又绕过我时得到一套完全不同的结果。
这是正常现象还是答案应该相同?
我用来计算欧几里得距离的语句是:
distance = (int) Math.sqrt( (rgb1.getR()-rgb2.getR())^2
+ (rgb1.getG()-rgb2.getG())^2
+ (rgb1.getB()-rgb2.getB())^2
);
最佳答案
查看您发布的代码,看您的RGB值是整数。但是,^
运算符不是幂运算符,而是XOR (exclusive-OR)-按位运算。因此,为了正确计算平方,请使用正则乘法-例如,使用临时变量int deltaR = rgb1.getR()-rgb2.getR();
,然后在公式中编写deltaR*deltaR
而不是^
运算符。您的RGB值可能在0到255的范围内,因此不应有溢出问题。或者,您可以在公式中使用Math.pow(rgb1.getR()-rgb2.getR(),2)
等。