版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
理想低通滤波器
理想低通滤波器在以原点为圆心, 为半径的圆内,通过所有的频率,而在圆外截断所有的频率。其中圆心的频率最低,为变换的直流(DC)分量,函数如下:
式中的 表达为:
$$
D(u,v) = \sqrt{(u - \frac{P}{2})^2+(v - \frac{Q}{2})^2}
\tag{6-2}
$$
理想低通滤波器的过渡非常急剧,会产生振铃现象。
Python实现代码如下:
def low_pass_kernel(img,cut_off):
assert img.ndim == 2
r,c = img.shape[1],img.shape[0]
u = np.arange(r)
v = np.arange(c)
u, v = np.meshgrid(u, v)
low_pass = np.sqrt( (u-r/2)**2 + (v-c/2)**2 )
low_pass[low_pass <= cut_off] = 1
low_pass[low_pass >= cut_off] = 0
return low_pass
def ideal_low_pass_filter(src,D0=15):
assert src.ndim == 2
M,N = src.shape[0],src.shape[1]
kernel = low_pass_kernel(src,D0)
gray = src.copy()
gray = np.float64(gray)
gray_fft = np.fft.fft2(gray)
gray_fftshift = np.fft.fftshift(gray_fft)
dst = np.zeros_like(gray_fftshift)
dst_filtered = kernel * gray_fftshift
dst_ifftshift = np.fft.ifftshift(dst_filtered)
dst_ifft = np.fft.ifft2(dst_ifftshift)
dst = np.abs(np.real(dst_ifft))
dst = np.clip(dst,0,255)
return np.uint8(dst)
程序运行结果: