23.1 傅里叶变换
目标
本小节我们将要学习:
• 使用 OpenCV 对图像进行傅里叶变换
• 使用 Numpy 中 FFT(快速傅里叶变换)函数
• 傅里叶变换的一些用处
• 我们将要学习的函数有:cv2.dft(),cv2.idft() 等
原理
傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离
散傅里叶变换 (DFT) 分析图像的频域特性。实现 DFT 的一个快速算法被称为
快速傅里叶变换(FFT)。关于傅里叶变换的细节知识可以在任意一本图像处
理或信号处理的书中找到。请查看本小节中更多资源部分。
对于一个正弦信号:x (t) = A sin (2πft), 它的频率为 f,如果把这个信号
转到它的频域表示,我们会在频率 f 中看到一个峰值。如果我们的信号是由采
样产生的离散信号好组成,我们会得到类似的频谱图,只不过前面是连续的,
现在是离散。你可以把图像想象成沿着两个方向采集的信号。所以对图像同时
进行 X 方向和 Y 方向的傅里叶变换,我们就会得到这幅图像的频域表示(频谱
图)。
更直观一点,对于一个正弦信号,如果它的幅度变化非常快,我们可以说
他是高频信号,如果变化非常慢,我们称之为低频信号。你可以把这种想法应
用到图像中,图像那里的幅度变化非常大呢?边界点或者噪声。所以我们说边
界和噪声是图像中的高频分量(注意这里的高频是指变化非常快,而非出现的
次数多)。如果没有如此大的幅度变化我们称之为低频分量。
现在我们看看怎样进行傅里叶变换。
23.1.1 Numpy 中的傅里叶变换
首先我们看看如何使用 Numpy 进行傅里叶变换。Numpy 中的 FFT 包
可以帮助我们实现快速傅里叶变换。函数 np.fft.fft2() 可以对信号进行频率转
换,输出结果是一个复杂的数组。本函数的第一个参数是输入图像,要求是灰
度格式。第二个参数是可选的, 决定输出数组的大小。输出数组的大小和输入图
像大小一样。如果输出结果比输入图像大,输入图像就需要在进行 FFT 前补
0。如果输出结果比输入图像小的话,输入图像就会被切割。
146
www.linuxidc.com
1