Initial commit with project files
This commit is contained in:
26
3_Signalorientierte_Bildverarbeitung/ü5/README.md
Normal file
26
3_Signalorientierte_Bildverarbeitung/ü5/README.md
Normal file
@@ -0,0 +1,26 @@
|
||||
# Übung 5: Homomorphe Filterung
|
||||
|
||||
In dem Skript [a.py](a.py) wird das Bild *I*
|
||||
|
||||

|
||||
|
||||
geladen. Das Bild zeigt eine schlecht belichtete Szene, in der Details nicht
|
||||
gut zu erkennen sind. In dieser Übung soll der Kontrast verbessert werden, damit
|
||||
mehr Details erkennbar sind.
|
||||
|
||||
## Aufgabe a)
|
||||
|
||||
|
||||
Wenden Sie die Homomorphe Filterung auf das Bild *I* an, indem Sie folgende Schritte implementieren:
|
||||
|
||||
1. Logarithmieren Sie die Werte in Grauwerte in *I*
|
||||
2. Transformieren Sie *I* in den Frequenzbereich
|
||||
3. Unterdrücken Sie niedrige Frequenzen durch die Funktion H(k,l)<p align="center"><img src="https://latex.codecogs.com/svg.image?H(k,l)=\begin{cases}&space;1,&&space;k=0&space;\&space;\cap&space;\&space;l=0&space;\\&space;\gamma_1&space;-&space;(\gamma_1&space;-&space;\gamma_2)e^{(-\frac{k^2+l^2}{\gamma_3})}&space;&&space;\text{sonst}\end{cases}&space;" title="" /></p>
|
||||
5. Transformieren Sie *I* zurück in den Bildbereich
|
||||
6. Kehren Sie die Logarithmierung aus Schritt 1. durch die Exponentialfunktion um
|
||||
|
||||
Der erste Teil der Aufgabe ist in der Datei [a.py](a.py) zu finden.
|
||||
|
||||
Sie finden die Musterlösung in der Datei [l_a.py](l_a.py).
|
||||
|
||||
**Hinweis:** Arbeiten Sie mit einem Wertebereich zwischen 0 und 1!
|
||||
26
3_Signalorientierte_Bildverarbeitung/ü5/a.py
Normal file
26
3_Signalorientierte_Bildverarbeitung/ü5/a.py
Normal file
@@ -0,0 +1,26 @@
|
||||
import numpy as np
|
||||
import cv2
|
||||
|
||||
''' Bild laden und in den Frequenzraum transformieren '''
|
||||
img = cv2.imread("../../data/car2.png", cv2.IMREAD_GRAYSCALE)
|
||||
img = img.astype(float)
|
||||
i_max, i_min = np.max(img), np.min(img)
|
||||
img = (img - i_min) / (i_max - i_min)
|
||||
|
||||
cv2.imshow("Original", img )
|
||||
|
||||
''' 1. Logarithmieren '''
|
||||
|
||||
''' 2. in den Frequenzbereich transformieren '''
|
||||
|
||||
''' 3. Niedrige mit H(k,l)Frequenzen unterdrücken '''
|
||||
|
||||
''' 4. Rücktransformation '''
|
||||
|
||||
''' 5. Umkehrfunktion der Logarithmierung '''
|
||||
|
||||
''' Ergebnis anzeigen '''
|
||||
i_max, i_min = np.max(img_filtered), np.min(img_filtered)
|
||||
img_filtered = (img_filtered - i_min) / (i_max - i_min)
|
||||
cv2.imshow("Homomorphe Filterung", img_filtered)
|
||||
cv2.waitKey()
|
||||
42
3_Signalorientierte_Bildverarbeitung/ü5/l_a.py
Normal file
42
3_Signalorientierte_Bildverarbeitung/ü5/l_a.py
Normal file
@@ -0,0 +1,42 @@
|
||||
import numpy as np
|
||||
import cv2
|
||||
|
||||
''' Bild laden und in den Frequenzraum transformieren '''
|
||||
img = cv2.imread("../../data/car2.png", cv2.IMREAD_GRAYSCALE)
|
||||
img = img.astype(float)
|
||||
i_max, i_min = np.max(img), np.min(img)
|
||||
img = (img - i_min) / (i_max - i_min)
|
||||
|
||||
cv2.imshow("Original", img )
|
||||
|
||||
''' 1. Logarithmieren '''
|
||||
img_log = np.maximum(img, 1/255) # log(0) ist illegal!
|
||||
img_log = np.log(img_log)
|
||||
|
||||
''' 2. in den Frequenzbereich transformieren '''
|
||||
IMG = np.fft.fft2(img_log)
|
||||
|
||||
''' 3. Niedrige mit H(k,l)Frequenzen unterdrücken '''
|
||||
gamma1, gamma2, gamma3 = 0.5, 0., 4
|
||||
H = np.zeros_like(img_log)
|
||||
for l in range(H.shape[0]):
|
||||
for k in range(H.shape[1]):
|
||||
if k < 1 and l < 1:
|
||||
H[l, k] = 1
|
||||
else:
|
||||
H[l, k] = gamma1 - (gamma1 - gamma2) * np.exp(-(k*k + l*l) / (gamma3 * gamma3))
|
||||
|
||||
IMG = IMG * H
|
||||
|
||||
''' 4. Rücktransformation '''
|
||||
img_filtered = np.fft.ifft2(IMG)
|
||||
img_filtered = img_filtered.astype(float)
|
||||
|
||||
''' 5. Umkehrfunktion der Logarithmierung '''
|
||||
img_filtered = np.exp(img_filtered)
|
||||
|
||||
''' Ergebnis anzeigen '''
|
||||
i_max, i_min = np.max(img_filtered), np.min(img_filtered)
|
||||
img_filtered = (img_filtered - i_min) / (i_max - i_min)
|
||||
cv2.imshow("Homomorphe Filterung", img_filtered)
|
||||
cv2.waitKey()
|
||||
Reference in New Issue
Block a user