我写了一个程序来基于颜色和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)等。

09-26 04:19