【发布时间】:2018-01-30 23:10:03
【问题描述】:
我正在开发一个程序,我试图找到两种 LaB 颜色之间的欧几里德距离。我想知道他们计算两者之间距离的方式是否正确。这是我正在做的事情:
public static void main(String[] args) {
double[] lab = {58.974604845047, 15.037506818771362, -64.0113115310669}; //blue
double[] lab1 = {58.701420307159424, 14.014512300491333, -64.46481943130493};//blue
double distance = euclideanDistance(lab, lab1);
System.out.println("Lab: " + distance);
}
private static double euclideanDistance(double[] lab , double []lab1){
//L = 0 - 100 range
//A = -86.185 - 98.254 range
//B = 107.863 - 94.482 range
double Lmean = (lab[0] + lab1[0]) / 2;
double L = lab[0] - lab1[0];
double A = lab[1] - lab1[1];
double B = lab[2] - lab1[2];
double weightL = 2 + Lmean /100;
double weightA = 4.0;
double weightB = 2 + (107.863 - Lmean) / 100;
return Math.sqrt(weightL * L * L + weightA * A * A + weightB * B * B);
}
【问题讨论】:
-
Wikipedia 说:“ ... L*a*b* 中任意两种颜色之间的相对感知差异可以通过将每种颜色视为三维空间中的一个点来近似(用三个组成部分:L*、a*、b*)并取它们之间的欧几里得距离”——因此我认为这就是你想要做的。如果是,那么它应该是两点之间的简单距离,并且有很多关于它们如何工作的描述(供您检查)。
-
啊好的谢谢@Thomas
标签: java colors euclidean-distance