Python中用于快速傅里叶变换的减影掩模

6

我需要在Python中对地图进行傅里叶变换。快速傅里叶变换需要周期性边界条件,但输入的地图不是周期性的。因此,我需要应用一种输入过滤器/权重,逐渐将地图朝向边缘收敛到零。是否有Python库可以做到这一点?


4
有类似于np.hanning、np.hamming、np.bartlett、np.blackman和np.kaiser这样的东西(其中np代表numpy)? - Stefan van der Walt
2个回答

2
我最喜欢的用于调制地图的函数是广义高斯函数(也称为“超高斯函数”),它是高斯函数的指数上升至P次幂。通过将P设置为4或6,您可以获得一个平顶峰,其平滑下降,这对于FFT应用程序非常有用,因为锐利的边缘总是会在共轭空间中产生波纹。
广义高斯函数可在Scipy上使用。以下是一个最简代码(Python 3),用于用广义高斯函数调制2D数组。如前面的评论所述,有数十种同样有效的函数可供选择。
import numpy as np
from scipy.signal import general_gaussian

# A 128x128 array
array =  np.random.rand(128,128)
# Define a general Gaussian in 2D as outer product of the function with itself
window = np.outer(general_gaussian(128,6,50),general_gaussian(128,6,50))
# Multiply
ap_array = window*array

1

这种逐渐减少的过程通常被称为“窗口”。

Scipy有许多窗口函数

您可以使用numpy.expand_dims创建所需的二维窗口。

关于Stefan的评论,显然numpy团队认为包含更多比数组还多的东西是一个错误。我建议在信号处理中仍然使用scipy。请注意,在他们的1.0版本中移动了相当多的函数,因此旧文档已经过时。

最后说明:"滤波器"通常用于在频域中应用的乘法,而不是空间域。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接