# Übung 4: Filterkern Ein Filterkern ist eine n-dimensionale Matrix, mit der üblicherweise eine lokale und lineare Operation auf Pixel im Eingangsbild angewendet wird. In dieser Übung sollen Aufgaben mit Filterkernen manuell und mit Python gelößt werden. ## Aufgabe a) Separierung Unter Umständen ist ein 2-dimensionaler Filterkern separierbar, d.h. er durch zwei 1-dimensonale Filterkerne dargestellt werden. Nehmen Sie die bereits separierten Filterkerne

und erstellen den ursprünglichen Filterken, sowohl "von Hand" als auch in einem Python Skript. Betrachten und separieren Sie zusätzlich den Filterkern

wenn möglich (manuell und in Python)! Die Lösung findet sich in der Datei [l_a.py](l_a.py). ## Aufgabe b) Stellen Sie sich vor, Sie wenden die separierten oder nicht separierten Filterkerne auf ein durchschnittliches Bild an. Wie viele Rechenoperationen pro Pixel führen Sie im Durchschnitt pro Pixel aus, wenn sie - einen separierten 3x3 Filterkern - einen nicht separierten 3x3 Filterkern verwenden. Die Musterlösung befindet sich in der Datei [l_b.md](l_b.md). ## Aufgabe c) Laden Sie ein beliebiges Bild ein und verwenden Sie die OpenCV-Methode *cv2.filter2D()* um Schärfefilter, Mittelwert-Filter und Kantenfilter auf das Bild anzuwenden. Die Musterlösung befindet sich in der Datei [l_c.py](l_c.py). ## Aufgabe d) Modifizieren Sie die Aufgabe c), indem Sie nur den Mittelwert-Filter verwenden und diesen vergrößern. Verwenden Sie verschiedene Boundary Optionen durch das Argument *borderType* in der Funktion *cv2.filter2D()* und betrachten Sie das Ergebnis. Vergleichen Sie die verschiedenen Optionen *cv2.BORDER_REFLECT*, *cv2.BORDER_REPLICATE* und *cv2.BORDER_CONSTANT*. Visualisieren Sie weiterhin die Optionen, indem Sie einen Rand mit der Funktion *cv2.copyMakeBorder()* zu dem Bild hinzufügen. Die Musterlösung befindet sich in der Datei [l_d.py](l_d.py).