Digital Signal Processing Reference
In-Depth Information
12
Farbbilder
static int HSVtoRGB (float h, float s, float v) {
1
// h, s, v ∈
[0
,
1]
Programm 12.7
HSV-RGB Konvertierung zur Um-
rechnung eines einzelnen Farbtupels
(Java-Methode). Die Methode ent-
spricht bzgl. Parametern, Ruckgabe-
wert und Ergebnissen der Standard-
Java-Methode
Color.HSBtoRGB()
.
2
float rr = 0, gg = 0, bb = 0;
3
// h
←
(6
· h
)mod6
float hh = (6 * h) % 6;
4
// c
1
←h
int
c1 = (int) hh;
5
float c2 = hh - c1;
6
float x = (1 - s) * v;
7
float y = (1 - (s * c2)) * v;
8
float z = (1 - (s * (1 - c2))) * v;
9
switch (c1) {
10
case 0: rr=v; gg=z; bb=x; break;
11
case 1: rr=y; gg=v; bb=x; break;
12
case 2: rr=x; gg=v; bb=z; break;
13
case 3: rr=x; gg=y; bb=v; break;
14
case 4: rr=z; gg=x; bb=v; break;
15
case 5: rr=v; gg=x; bb=y; break;
16
}
17
int N = 256;
18
int r = Math.min(Math.round(rr*N),N-1);
19
int g = Math.min(Math.round(gg*N),N-1);
20
int b = Math.min(Math.round(bb*N),N-1);
21
// create
int
-packed RGB-color:
22
int rgb = ((r&0xff)<<16) | ((g&0xff)<<8) | b&0xff;
23
return rgb;
24
}
25
Abbildung 12.13
HSV-Komponenten fur das
Testbild aus Abb. 12.2. Die
dunklen Bereiche in
h
HSV
ent-
sprechen roten und gelben Far-
ben mit
Hue
-Winkel nahe null.
h
HSV
s
HSV
v
HSV
RGB
→
HLS
Die Berechnung des
Hue
-Werts
H
HLS
fur das HLS-Modell ist identisch
zu HSV (Gl. 12.13-12.15), d. h.
H
HLS
=
H
HSV
.
(12.20)
Die ubrigen Werte fur
L
HLS
und
S
HLS
werden wie folgt berechnet (fur
C
high
,
C
low
,
C
rng
siehe Gl. 12.12):