#TODO visualisieren Sie die von Ihnen annotierten hautfarbenen Pixel in der rg-Ebene
```
%% Output
Annotated 0 skin pixels!
%% Cell type:markdown id: tags:
## Teil 4
* Um eine effiziente Klassifikation in hautfarbene und nicht-hautfarbene Pixel durchzuführen, approximiert man die Ränder des Skin Locus mittels zweier Parabeln ($ax^2 + bx + c$). Wie kann man die Parameter dieser Parabeln sinnvoll bestimmen?
`#TODO`
* Wie kann die Klassifikation in hautfarbene und nicht-hautfarbene Pixel noch effizienter als über die Approximation von Parabeln realisiert werden und was sind Nachteile eines solchen Verfahrens gegenüber den Parabeln?
`#TODO`
* Meist befindet sich die Farbe weiß ($r=g=0.33$) innerhalb des Skin Locus. Wie könnte man vorgehen um solche Flaschklassifikationen zu vermeiden?
`#TODO`
%% Cell type:markdown id: tags:
## Teil 5
Ein anderer Hautfarbenklassifikator ist durch die folgenden Regeln definiert [(Peer et al., 2003, "Human skin color clustering for face detection", EUROCON2003)](https://ieeexplore.ieee.org/abstract/document/1248169):
Implementieren Sie diesen Klassifikator und visualisieren Sie erneut die von ihm als Hautfarbe klassifizierten Pixel in der rg-Ebene, indem Sie die `#TODOs` in der Code-Zelle unter dem Text implementieren.
Führen Sie danach die Code-Zelle darunter aus, um sich die Ergebnisse des Klassifikators auf Gesichtsbildern anzeigen zu lassen.
* Was fällt Ihnen auf?
`#TODO`
* Was sind Vorteile und Nachteile dieses Klassifikators?
`#TODO`
%% Cell type:code id: tags:
``` python
%matplotlib inline
def is_skin(pixel):
#TODO implementieren sie den Klassifikator
return False
skin_pixels_cls = []
for r in range(96, 256, 10):
for g in range(41, 256, 10):
for b in range(21, 256, 10):
pixel = np.array((b, g, r))
if is_skin(pixel):
skin_pixels_cls.append(pixel)
#TODO visualisieren Sie die vom Klassifikator als Hautfarbe beurteilten Pixel (skin_pixels_cls) in der rg-Ebene
```
%% Cell type:code id: tags:
``` python
imgs = [cv.imread(image, cv.IMREAD_COLOR) for image in images]
masks = [np.zeros(img.shape, np.uint8) for img in imgs]
* Was passiert bei der Normierung (Berechnung von r und g) von einem schwarzen Pixel?
#### Teil 2
* Beachten Sie die Reihenfolge der Farbkanäle! Diese ist BGR in OpenCV
* Zur Visualisierung eignet es sich entweder ein Grauwertbild zu erstellen auf dem die entsprechenden Koordinaten weiß gefärbt werden oder die Funktion [scatter](https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.scatter.html) von matplotlib zu verwenden
#### Teil 3
* Welche Punkte des Skin-Locus sollten auf jeden Fall von der Parabel getroffen werden.
* Wie viele Punkte braucht man, um die Parameter der Parabeln eindeutig zu bestimmen.
#### Teil 5
* Beachten Sie wieder die Reihenfolge der Farbkanäle (BGR)