數字圖像處理與Python實現-圖像降噪-巴特沃斯高通濾波

巴特沃斯高通濾波

n階巴特沃斯高通濾波的傳遞函數如下:

H(u,v)=111+(D(u,v)/D0)2n(7-1) H(u,v) = 1 - \frac{1}{1 + (D(u,v) / D_0)^{2n}} \tag{7-1}

其中,D(u,v)=(uP2)2+(vQ2)2D(u,v) = \sqrt{(u - \frac{P}{2})^2 + (v - \frac{Q}{2})^2},D0D_0是截止頻率,取正數,用來控制曲線的形狀。

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)

程序運行結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章