2017-08-22 80 views
0

我正在研究一个程序,我试图找到两个LaB颜色之间的欧几里得距离。我想知道他们的方式,我计算两者之间的距离是正确的。下面是我在做什么:计算两个LaB颜色之间的距离Java

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); 
} 
+0

[维基百科(https://en.wikipedia.org/wiki/Lab_color_space)表示:“...以L \任何两种颜色之间的相对感知差异* A * B \ *可以近似通过将每种颜色视为三维空间中的一个点(具有三个分量:L \ *,a \ *,b \ *)并将它们之间的欧几里德距离对待“ - 因此我假设您正在尝试做的是。如果是的话,那么它应该是两点之间的简单距离,并且有很多关于这些工作如何工作的描述(供您检查)。 – Thomas

+0

啊好的谢谢@Thomas – ProgrammingCuber

回答

1

因此,对于任何人好奇,想看看有没有两者之间的欧氏距离稍有差别Lab值不存在。 L,A,B:由wiki

指出...在实验室*任何两种颜色之间的相对感知差异可以通过在三维空间中处理的每种颜色的点(具有三个分量来近似*),并采取他们之间的欧几里德距离

解决这个问题就是这个。

private double euclideanDistance(double[] lab , double []lab1){ 
    double L = lab[0] - lab1[0]; 
    double A = lab[1] - lab1[1]; 
    double B = lab[2] - lab1[2]; 
    return Math.sqrt((L * L) + (A * A) + (B * B));  
} 
相关问题