Initial commit with project files

This commit is contained in:
2025-06-27 14:34:11 +02:00
commit 7ea3207e63
310 changed files with 9331 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
# Übung 4: Notch-Filter im Frequenzraum
In dem Skript [a.py](a.py) wird das Bild von Lena eingeladen.
Gleichzeitig wird ein gestörtes Bild von Lena eingeladen.
Dem Bild wurde ein Raster überlagert.
Original | Gestört
---|---
![](../../data/lena.png) | ![](../../data/lena_raster.png)
## Aufgabe a)
Das Raster soll unter Benutzung des Frequenzbereiches auf einfache Weise für
den subjektiven Eindruck entfernt werden.
Gehen Sie dabei wie folgt vor:
1. Transformieren Sie die Bilder in den Frequenzbereich und betrachten Sie charakteristische
Unterschiede.
2. Maskieren Sie die gestörten Bereiche aus, in dem Sie geeigente Bereiche der Matrix auf Null
setzen. Die Zentren der Störungen liegen etwa bei (nach fftshift):
- [85, 85]
- [255, 85]
- [425, 85]
- [85, 255]
- [255, 425]
- [425, 255]
- [85, 425]
- [425, 425]
3. Transformieren Sie das Bild in den Ortsbereich zurück.
Sie finden die Musterlösung in der Datei [l_a.py](l_a.py).

View File

@@ -0,0 +1,36 @@
import cv2
import numpy as np
raster = cv2.imread("../../data/lena_raster.png", cv2.IMREAD_GRAYSCALE)
normal = cv2.imread("../../data/lena.png", cv2.IMREAD_GRAYSCALE)
''' FFT '''
RASTER = np.fft.fftshift(np.fft.fft2(raster))
RASTER_magnitude = np.abs(RASTER)
RASTER_angle = np.angle(RASTER)
NORMAL = np.fft.fftshift(np.fft.fft2(normal))
NORMAL_magnitude = np.abs(NORMAL)
NORMAL_angle = np.angle(NORMAL)
''' Maskieren '''
centroids = [
[85, 85],
[255, 85],
[425, 85],
[85, 255],
[255, 425],
[425, 255],
[85, 425],
[425, 425]
]
''' Bild anzeigen '''
cv2.imshow("raster", raster)
cv2.imshow("normal", normal)
cv2.imshow("RASTER_magnitude", 255 * RASTER_magnitude / np.max(RASTER_magnitude))
cv2.imshow("NORMAL_magnitude", 255 * NORMAL_magnitude / np.max(NORMAL_magnitude))
cv2.waitKey()

View File

@@ -0,0 +1,46 @@
import cv2
import numpy as np
raster = cv2.imread("../../data/lena_raster.png", cv2.IMREAD_GRAYSCALE)
normal = cv2.imread("../../data/lena.png", cv2.IMREAD_GRAYSCALE)
''' FFT '''
RASTER = np.fft.fftshift(np.fft.fft2(raster))
RASTER_magnitude = np.abs(RASTER)
RASTER_angle = np.angle(RASTER)
NORMAL = np.fft.fftshift(np.fft.fft2(normal))
NORMAL_magnitude = np.abs(NORMAL)
NORMAL_angle = np.angle(NORMAL)
''' Bild anzeigen '''
cv2.imshow("raster", raster)
cv2.imshow("normal", normal)
cv2.imshow("RASTER_magnitude", 255 * RASTER_magnitude / np.max(RASTER_magnitude))
cv2.imshow("NORMAL_magnitude", 255 * NORMAL_magnitude / np.max(NORMAL_magnitude))
''' Maskieren '''
centroids = [
[85, 85],
[255, 85],
[425, 85],
[85, 255],
[255, 425],
[425, 255],
[85, 425],
[425, 425]
]
s = 10
for x, y in centroids:
RASTER[np.maximum(0, y - s):y + s, np.maximum(0, x - s):x + s] = 0
FILTERED_magnitude = np.abs(RASTER)
''' Inverse fft '''
filtered = np.fft.ifft2(np.fft.ifftshift(RASTER)).astype(np.uint8)
''' Lösung anzeigen '''
cv2.imshow("FILTERED_magnitude", 255 * FILTERED_magnitude / np.max(FILTERED_magnitude))
cv2.imshow("filtered", filtered)
cv2.waitKey()