【问题标题】:How can I create a this smooth version of High Pass filter in frequency domain like this我怎样才能像这样在频域中创建一个平滑版本的高通滤波器
【发布时间】:2018-08-31 20:17:29
【问题描述】:

我使用 np.fft.fft2 来获取频域并希望对其应用高通滤波器,但蒙版只是一个数字为零的圆圈,其他数字为 1,因此它对生成的图像有振铃效应转换回来时。

那么我怎样才能像这样创建这个过滤器的平滑版本

【问题讨论】:

    标签: python filter fft


    【解决方案1】:

    您可以使用一些函数来生成二维高斯分布:

    def gaussian_2d(x, y, mu1, mu2, sig):
        return np.exp(- (np.power(x - mu1, 2) + np.power(x - mu2, 2)) / (2 * np.power(sig, 2)))
    
    def gen_gaussian_2d_filter(size, radius):
        grid = [[0] * size for _ in range(size)]
        for i in range(size):
            for j in range(size):
                grid[i][j] = gaussian_2d(i, j, size/2, size/2, radius)
        return np.array(grid)
    

    您想要在该图像中使用的过滤器似乎有 radius ~ size/10 但当然您可以可视化过滤器并对其进行调整。此外,剪辑功能可能会有所帮助,因为您可能希望保留所有低频信息,请参阅numpy.clip

    【讨论】:

    • 不过,这只会产生一个“1”值(假设圆圈是传递的内容)。最好只使用移动均值滤波器(即矩形窗口)并将其与上述二元滤波器在两个维度上进行卷积。
    • 为什么这只会产生一个“1”?此外,矩形窗口可以很好地近似于滤波器,但它不是径向对称的,因此它不仅是频率上的滤波器,而且是相位上的滤波器。
    • 因为你的高斯函数只会在x=[mu1, mu2] 时达到 1 的值,而 OP 显示的滤波器具有更大的通带。我刚刚读到过滤器内部的值为 0,外部为 1(即过滤器被反转),但这一点仍然存在。 +1 为相位滤波器备注,我不确定 OP 在这方面的要求,他将不得不详细说明。
    • 这就是为什么我说numpy.clip 会有所帮助,因为它可以限制值。而且我相信重新缩放应该是微不足道的。
    猜你喜欢
    • 2017-08-11
    • 2019-06-14
    • 2017-09-02
    • 1970-01-01
    • 2011-04-27
    • 2017-07-06
    • 2022-10-24
    • 1970-01-01
    • 2022-11-04
    相关资源
    最近更新 更多