Digital Signal Processing Reference
In-Depth Information
12
Farbbilder
1
import java.awt.Color;
2
...
3
float[] hsv = new float[3];
4
int red = 128, green = 255, blue = 0;
5
hsv = Color.RGBtoHSB (red, green, blue, hsv);
6
float h = hsv[0];
7
float s = hsv[1];
8
float v = hsv[2];
9
...
Eine mogliche Realisierung der Java-Methode
RGBtoHSB()
unter Ver-
wendung der Definitionen in Gl. 12.11-12.15 ist in Prog. 12.6 gezeigt.
HSV
→
RGB
Zur Umrechnung eines HSV-Tupels (
H
HSV
,S
HSV
,V
HSV
), wobei
H
HSV
,
S
HSV
und
V
HSV
∈
[0
,
1], in entsprechende (
R, G, B
)-Farbwerte wird
zunachst wiederum der zugehorige Farbsektor
H
=(6
·
H
HSV
) mod 6
(12.16)
H
<
6) und daraus die Zwischenwerte
ermittelt (0
≤
H
c
1
=
x
=(1
−
S
HSV
)
·
v
c
2
=
H
−
c
1
y
=(1
−
(
S
HSV
·
c
2
))
·
V
HSV
(12.17)
z
=(1
−
(
S
HSV
·
(1
−
c
2
)))
·
V
HSV
Die normalisierten RGB-Werte
R
,G
,B
∈
[0
,
1] werden dann in Ab-
hangigkeit von
c
1
aus
v
=
V
HSV
,
x
,
y
und
z
wie folgt zugeordnet:
9
⎧
⎨
(
v, z, x
)w n
c
1
=0
(
y, v, x
)w n
c
1
=1
(
x, v, z
)w n
c
1
=2
(
x, y, v
)w n
c
1
=3
(
z, x, v
)w n
c
1
=4
(
v, x, y
)w n
c
1
=5
(
R
,G
,B
)
←
(12.18)
⎩
Die Skalierung der RGB-Komponenten auf einen ganzzahligen Wertebe-
reich [0
,N
−
1] (typischerweise
N
= 256) erfolgt abschließend durch
min
round(
N
1
R
)
,N
R
←
·
−
min
round(
N
1
G
)
,N
G
←
·
−
(12.19)
min
round(
N
1
B
)
,N
B
←
·
−
9
Die hier verwendeten Bezeichnungen
x
,
y
,
z
stehen in keinem Zusammen-
hang zum CIEXYZ-Farbraum (Abschn. 12.3.1).