2017-08-22 83 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));  
} 
相關問題