115 lines
2.8 KiB
Python
115 lines
2.8 KiB
Python
|
import cv2
|
||
|
import numpy as np
|
||
|
import scipy.ndimage as ndi
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
# customized imshow function
|
||
|
|
||
|
|
||
|
def imshow(img, cap=None):
|
||
|
if np.amax(img) > 255:
|
||
|
img = img / (np.amax(img)) * 255
|
||
|
img.astype(np.uint8)
|
||
|
fig = plt.figure(figsize=(4, 4))
|
||
|
if cap is not None:
|
||
|
plt.title(cap)
|
||
|
plt.imshow(img, cmap="gray")
|
||
|
plt.axis("off")
|
||
|
plt.show()
|
||
|
|
||
|
|
||
|
def apply(img, ker):
|
||
|
return np.abs(np.fft.ifft2(np.fft.fftshift(np.fft.fft2(img)) * ker).real)
|
||
|
|
||
|
################################################################
|
||
|
|
||
|
# Ideal LowPass Filter kernel
|
||
|
|
||
|
|
||
|
def ilpf(m, n, r):
|
||
|
a = np.tile(np.arange(-n / 2, n / 2), (m, 1))
|
||
|
b = np.tile(np.arange(-m / 2, m / 2), (n, 1)).T
|
||
|
return (a * a + b * b < r * r).astype(np.uint8)
|
||
|
|
||
|
# Print ILPF Result
|
||
|
|
||
|
|
||
|
def apply_ilpf(img, r):
|
||
|
row, col = img.shape
|
||
|
imshow(img(*ilpf(row, col, r)), 'Ideal LowPass Filter\nwith r = ' + str(r))
|
||
|
|
||
|
|
||
|
img = cv2.imread("C:/Users/NGPD/Desktop/2.jpg", cv2.IMREAD_GRAYSCALE)
|
||
|
imshow(img, 'Loaded Image')
|
||
|
apply_ilpf(img, 5)
|
||
|
apply_ilpf(img, 15)
|
||
|
apply_ilpf(img, 30)
|
||
|
apply_ilpf(img, 80)
|
||
|
|
||
|
################################################################
|
||
|
|
||
|
# Butterworth LPF kernel
|
||
|
|
||
|
|
||
|
def blpf(m, n, N, r):
|
||
|
a = np.tile(np.arange(-n / 2, n / 2), (m, 1))
|
||
|
b = np.tile(np.arange(-m / 2, m / 2), (n, 1)).T
|
||
|
return (1 / (1 + ((a * a + b * b) / (r * r))**N))
|
||
|
|
||
|
# Print BLPF Result
|
||
|
|
||
|
|
||
|
def apply_blpf(img, N, r):
|
||
|
row, col = img.shape
|
||
|
imshow(img(*blpf(row, col, N, r)),
|
||
|
'Butterworth LowPass Filter\nwith r = ' + str(r) + ' and n = ' + str(N))
|
||
|
|
||
|
|
||
|
img = cv2.imread("C:/Users/NGPD/Desktop/2.jpg", cv2.IMREAD_GRAYSCALE)
|
||
|
imshow(img, 'Loaded Image')
|
||
|
n = 2
|
||
|
apply_blpf(img, n, 5)
|
||
|
apply_blpf(img, n, 15)
|
||
|
apply_blpf(img, n, 30)
|
||
|
apply_blpf(img, n, 80)
|
||
|
|
||
|
################################################################
|
||
|
|
||
|
# Gaussian LPF kernel
|
||
|
|
||
|
|
||
|
def glpf(m, n, r):
|
||
|
a = np.tile(np.arange(-n / 2, n / 2), (m, 1))
|
||
|
b = np.tile(np.arange(-m / 2, m / 2), (n, 1)).T
|
||
|
return np.exp(-(a * a + b * b) / (2 * r * r))
|
||
|
|
||
|
# Print GLPF Result
|
||
|
|
||
|
|
||
|
def apply_glpf(img, r):
|
||
|
row, col = img.shape
|
||
|
imshow(img(*glpf(row, col, r)), 'Gaussian LowPass Filter\nwith r = ' + str(r))
|
||
|
|
||
|
|
||
|
img = cv2.imread("C:/Users/NGPD/Desktop/2.jpg", cv2.IMREAD_GRAYSCALE)
|
||
|
imshow(img, 'Loaded Image')
|
||
|
apply_glpf(img, 5)
|
||
|
apply_glpf(img, 15)
|
||
|
apply_glpf(img, 30)
|
||
|
apply_glpf(img, 80)
|
||
|
|
||
|
################################################################
|
||
|
|
||
|
img = cv2.imread("C:/Users/NGPD/Desktop/2.jpg", cv2.IMREAD_GRAYSCALE)
|
||
|
|
||
|
m, n = img.shape
|
||
|
a = np.tile(np.arange(-n / 2, n / 2), (m, 1))
|
||
|
b = np.tile(np.arange(-m / 2, m / 2), (n, 1)).T
|
||
|
lap = img(*-(a * a + b * b))
|
||
|
if np.amax(lap) > 255:
|
||
|
lap = lap / (np.amax(lap)) * 255
|
||
|
|
||
|
imshow(img, 'Loaded Image')
|
||
|
imshow(lap, 'Laplacian Filter')
|
||
|
imshow(img - lap, 'g(x, y)')
|