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()
