【发布时间】:2020-01-26 18:46:02
【问题描述】:
我正在尝试在 Python 中设计一个高斯陷波滤波器来去除周期性噪声。我尝试实现以下公式:
这里是代码:
import numpy as np
def gaussian_bandpass_filter(image):
image_array = np.array(image)
#Fourier Transform
fourier_transform = np.fft.fftshift(np.fft.fft2(image_array))
#Size of Image
m = np.shape(fourier_transform)[0]
n = np.shape(fourier_transform)[1]
u = np.arange(m)
v = np.arange(n)
# Find the center
u0 = int(m/2)
v0 = int(n/2)
# Bandwidth
D0 = 10
gaussian_filter = np.zeros(np.shape(fourier_transform))
for x in u:
for y in v:
D1 = math.sqrt((x-m/2-u0)**2 + (y-n/2-v0)**2)
D2 = math.sqrt((x-m/2+u0)**2 + (y-n/2+v0)**2)
gaussian_filter[x][y] = 1 - math.exp(-0.5 * D1*D2/(D0**2))
#Apply the filter
fourier_transform = fourier_transform + gaussian_filter
image_array = np.fft.ifft2(np.fft.ifftshift(fourier_transform))
return image_array
这个函数应该对图像应用高斯陷波滤波器并返回过滤后的图像,但它似乎不起作用。我不知道我哪里出了问题(也许我没有正确理解公式?)所以如果有人可以帮助我,我将不胜感激。
编辑:
例如,这里是noisy image。 使用 scipy.ndimage 库中现有的 gaussian_filter 函数,我得到this,这是可以接受的。 但我的函数返回this。 (我正在使用 PIL.Image.fromarray 函数将数组转换为图像)
【问题讨论】:
-
“它不起作用”到底是什么意思?
-
您需要自己制作还是只是想过滤一些图像?
-
@wwii - 我这样做是为了完成一项任务。我必须在不使用预先存在的函数的情况下实现自己的高斯陷波滤波器。
标签: python numpy image-processing gaussian