【发布时间】:2018-08-31 20:17:29
【问题描述】:
我使用 np.fft.fft2 来获取频域并希望对其应用高通滤波器,但蒙版只是一个数字为零的圆圈,其他数字为 1,因此它对生成的图像有振铃效应转换回来时。
那么我怎样才能像这样创建这个过滤器的平滑版本
【问题讨论】:
我使用 np.fft.fft2 来获取频域并希望对其应用高通滤波器,但蒙版只是一个数字为零的圆圈,其他数字为 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。
【讨论】:
x=[mu1, mu2] 时达到 1 的值,而 OP 显示的滤波器具有更大的通带。我刚刚读到过滤器内部的值为 0,外部为 1(即过滤器被反转),但这一点仍然存在。 +1 为相位滤波器备注,我不确定 OP 在这方面的要求,他将不得不详细说明。
numpy.clip 会有所帮助,因为它可以限制值。而且我相信重新缩放应该是微不足道的。