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

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

梯形低通滤波器

梯形低通滤波器(TLPF)的传递函数如下:

H ( u , v ) = { 1 D ( u , v ) < D 0 D ( u , v ) D 1 D 0 D 1 D 0 < D ( u , v ) D 1 0 D ( u , v ) > D 1 (10-1) H(u,v) = \begin{cases} 1 & D(u,v) \lt D_0 \\\\ \frac{D(u,v) - D_1}{D_0-D_1} & D_0 \lt D(u,v) \leq D_1 \\\\ 0 &D(u,v) > D_1 \end{cases} \tag{10-1}

其中, D 0 D_0 称为梯形低通滤波器的截止频率。 D 0 D_0 D 1 D_1 按要求指定 D 0 < D 1 D_0 < D_1 ,它的性能介于理想低通滤波与巴特沃斯低通滤波器之间,对图像具有一定的模糊和振铃效应。

在这里插入图片描述

Python语言实现代码如下:

def trapezoidal_low_pass_kernel(img,D0=5,D1=10):
    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 )

    idx = low_pass < D0
    idx2 = (low_pass >= D0) & (low_pass <= D1)
    idx3 = low_pass > D1

    low_pass[idx] = 1
    low_pass[idx2] = (low_pass[idx2] - D1) / (D1 - D0)
    low_pass[idx3] = 0

    return low_pass

def trapezoidal_low_pass_filter(img,D0=5,D1=15):
    assert img.ndim == 2
    gray = np.float64(img)
    kernel = trapezoidal_low_pass_kernel(img,D0,D1)
    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/102733415