数字图像处理与Python实现-图像降噪-理想低通滤波

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wujuxKkoolerter/article/details/102733296

理想低通滤波器

理想低通滤波器在以原点为圆心, D 0 D_0 为半径的圆内,通过所有的频率,而在圆外截断所有的频率。其中圆心的频率最低,为变换的直流(DC)分量,函数如下:

H ( u , v ) = { 1 , D ( u , v ) D 0 0 , D ( u , v ) > D 0 (6-1) H(u,v) = \begin{cases} 1 &, D(u,v) \leq D_0 \\ 0 &, D(u,v) \gt D_0 \end{cases} \tag{6-1}

式中的 D ( u , v ) D(u,v) 表达为:

$$
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)

程序运行结果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wujuxKkoolerter/article/details/102733296