巴特沃斯高通濾波
n階巴特沃斯高通濾波的傳遞函數如下:
其中,,是截止頻率,取正數,用來控制曲線的形狀。
Python語言實現如下:
def butterworth_low_pass_kernel(img,cut_off,butterworth_order=1):
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 )
denom = 1.0 + (low_pass / cut_off)**(2 * butterworth_order)
low_pass = 1.0 / denom
return low_pass
def butterworth_high_pass_kernel(src,D0=5,n=1):
assert src.ndim == 2
kernel = 1 - butterworth_low_pass_kernel(src,D0,n)
gray = np.float64(src)
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)
程序運行結果: