# Übung 2:  Lokale Bildoperationen

Lokale Bildoperationen berechnen den Pixelwert des Ausgangspixels aus der lokalen Umgebung des Eingangspixels. Die 
Berechnungsvorschrift ist dabei für jedes Pixel gleich.

In dieser Übung werden einige Beispiele für lokale Bildoperationen behandelt. Dabei werden unter anderem
  - Faltung
  - Gradienten 
  - Rangfolgefilter
  - Hochpass, Tiefpass, Bandpass
verwendet.

## Aufgabe a)
Das Bild zeigt ***I_in*** zwei sich schneidende Linien (eine horizontalen und eine vertikale) auf hellem
Hintergrund (außerhalb des eingezeichneten Rasters sind die Flächen wie angedeutet störungsfrei
fortgeführt). Es soll nun die Horizontale extrahiert und in binärer Form dargestellt werden, so dass
sich das Binärbild ***I_out*** ergibt. Im folgenden sind 
die Bilder visualisiert und als Matrix dargestellt. 

<p align="center">
<img src="./data/cross1.png" />
</p>

```python
 I_in = [
    [200, 200, 100, 200, 200],
    [200, 200, 100, 200, 200],
    [100, 100, 100, 100, 100],
    [200, 200, 100, 200, 200],
    [200, 200, 100, 200, 200],
 ]
```

<p align="center">
<img src="./data/cross2.png" />
</p>

```python
 I_out = [
    [  0,   0,   0,   0,   0],
    [  0,   0,   0,   0,   0],
    [255, 255, 255, 255, 255],
    [  0,   0,   0,   0,   0],
    [  0,   0,   0,   0,   0],
 ]
```

Für die Aufgabe stehen die folgenden Operationen zur Verfügung:

 - Hochpassfilter mit 3x3 Faltungskern
   
    ```python
    [
       [ -1,  -1,  -1 ],
       [ -1,   8,  -1 ],
       [ -1,  -1,  -1 ]
    ]
    ```
 - Kantenfilter mit 3x3 Faltungskern
   
    ```python
    [
       [  1,  0,  -1 ],
       [  1,  0,  -1 ],
       [  1,  0,  -1 ]
    ]
    ```
 - Kantenfilter mit 3x3 Faltungskern
   
    ```python
    [
       [  -1,  -1,  -1 ],
       [   0,   0,   0 ],
       [   1,   1,   1 ]
    ]
    ```
 - Punktoperation: Betragsbildung
 - Punktoperation: Schwellwertoperation, Punkte mit einer Intensität *I_xy* < 128 werden auf *I_xy* = 0 gesetzt, ansonsten zu 255
 - Median-Filter der Größe 3x3
    
Wählen Sie 4 der 6 Operationen und wenden Sie sie auf die das Bild an. Jede Operation darf dabei nur einmal verwendet werden.
Visualisieren Sie jeden Zwischenschritt.
Die Aufgabe soll in der Datei [a.py](a.py) bearbeitet werden! Die entsprechende Lösung finden Sie in [l_a.py](l_a.py).

**Hinweis:** Mehrere Lösungswege sind möglich! 


## Aufgabe b)
Gegeben ist das Bild [edge_01.png](data/edge_01.png). Es zeigt zwei aneinander grenzende graue Flächen die mit Rauschen
versetzt sind. Ziel ist es, das Bild so zu filtern, dass die Kante als weichgezeichnete Linie auf
schwarzem Untergrund resultiert, wie in Bild [edge_02.png](data/edge_02.png) beispielhaft dargestellt ist.

*edge_01.png*:  

<p align="center">
<img src="./data/edge_01.png" />
</p>

*edge_02.png*:  
<p align="center">
<img src="./data/edge_02.png" />
</p>

Für die Bearbeitung können Sie sich verschiedener Filter bedienen. Beispiele dafür können sein
 - Hochpass, Tiefpass, Bandpass
 - Diverse Richtungsfilter
 - Rangfolgefilter wie Minimum, Maximum, Median

Die Aufgabe soll in der Datei [b.py](b.py) bearbeitet werden! Die entsprechende Lösung finden Sie in [l_b.py](l_b.py).
