Digital Signal Processing Reference
In-Depth Information
12.3 Colorimetrische
Farbr aume
36 // class Lab_ColorSpace (continued)
37
38
// CIELab → XYZ
Programm 12.11
Implementierung der Klasse
Lab ColorSpace zur Reprasenta-
tion des L a b -Farbraums ( Fort-
setzung ). Die Konvertierung vom
L a b -Farbraum nach CIEXYZ
(Gl. 12.51) ist durch die Methode
toCIEXYZ() und die zugehorige
Hilfsfunktion f2() realisiert. Die
Methoden fromRGB() und toRGB()
fuhren die Konvertierung von L a b
nach sRGB in 2 Schritten uber den
CIEXYZ-Farbraum durch.
public float[] toCIEXYZ(float[] Lab) {
39
double yy = ( Lab[0] + 16 ) / 116;
40
float X = (float) (Xref * f2(Lab[1] / 500 + yy));
41
float Y = (float) (Yref * f2(yy));
42
float Z = (float) (Zref * f2(yy - Lab[2] / 200));
43
return new float[] {X,Y,Z};
44
}
45
46
47
double f2 (double c) {
double c3 = Math.pow(c, 3.0);
48
if (c3 > 0.008856)
49
return c3;
50
else
51
return (c - 16.0 / 116) / 7.787;
52
}
53
54
55
// sRGB → CIELab
public float[] fromRGB(float[] sRGB) {
56
ColorSpace sRGBcs = ColorSpace.getInstance(CS_sRGB);
57
float[] XYZ = sRGBcs.toCIEXYZ(sRGB);
58
return this.fromCIEXYZ(XYZ);
59
}
60
61
62
// CIELab → sRGB
public float[] toRGB(float[] Lab) {
63
float[] XYZ = this.toCIEXYZ(Lab);
64
ColorSpace sRGBcs = ColorSpace.getInstance(CS_CIEXYZ);
65
return sRGBcs.fromCIEXYZ(XYZ);
66
}
67
68
69 } // end of class Lab_ColorSpace
Mit diesen Profildaten kann ein Farbraumobjekt erzeugt werden,
mit dem aus den Bilddaten des Scanners entsprechende Farbwerte in
CIEXYZ oder sRGB umgerechnet werden, wie folgendes Beispiel zeigt:
1 ICC_ColorSpace scannerCS =
2 new ICC_ColorSpace(ICC_ProfileRGB.getInstance("scanner.icc"
));
3 float[] RGBColor = scannerCS.toRGB(scannerColor);
4 float[] XYZColor = scannerCS.toCIEXYZ(scannerColor);
Genauso kann naturlich uber den durch das ICC-Profil definierten Far-
braum ein sRGB-Pixel in den Farbraum des Scanners oder des Monitors
umgerechnet werden.
Search WWH ::




Custom Search