42 lines
1.2 KiB
Python
42 lines
1.2 KiB
Python
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() |