2017-08-22 6 views
0

Ich arbeite an einem Programm, wo ich versuche, den euklidischen Abstand zwischen zwei LaB Farben zu finden. Ich habe mich gefragt, ob ich den Abstand zwischen den beiden richtig berechnen kann. Hier ist, was ich tue:Berechnung der Entfernung zwischen zwei LaB Farben 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

[Wikipedia] (https://en.wikipedia.org/wiki/Lab_color_space) sagt: "... die relative Wahrnehmungsunterschiede zwischen zwei beliebigen Farben in L \ * a * b \ * angenähert werden kann indem wir jede Farbe als einen Punkt in einem dreidimensionalen Raum behandeln (mit drei Komponenten: L \ *, a \ *, b \ *) und den euklidischen Abstand zwischen ihnen nehmen "- also nehme ich an, dass Sie das versuchen . Wenn ja, dann sollte es eine einfache Entfernung zwischen zwei Punkten sein und es gibt viele Beschreibungen darüber, wie diese funktionieren (für Sie zu überprüfen). – Thomas

+0

ah in Ordnung danke @Thomas – ProgrammingCuber

Antwort

1

Also für jedermann neugierig zu sehen, ob es einen kleinen Unterschied zwischen euklidischen Abstand zwischen zwei ist Lab-Werte gibt es nicht. Wie bereits erwähnt von wiki

... die relativen Wahrnehmungsunterschiede zwischen zwei beliebigen Farben in Lab * kann durch Behandeln jede Farbe als ein Punkt in einem dreidimensionalen Raum angenähert wird (mit drei Komponenten: L, a, b *) und den euklidischen Abstand zwischen ihnen nehmen

Die Lösung für dieses Problem wäre dies.

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));  
} 
Verwandte Themen