java – 欧几里德距离返回奇怪的结果
作者:互联网
我正在编写一个程序来比较两个图像相互比较基于颜色和我使用欧几里德距离算法然而当我运行它并传入两个图像我得到一个距离,然后当我传入相同的图像,但反过来我得到一组完全不同的结果.
这是正常的还是答案应该是一样的?
我用来计算欧氏距离的陈述是:
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)等.
标签:euclidean-distance,image-comparison,java 来源: https://codeday.me/bug/20190723/1513560.html