前言
要理解傅里叶变换,我们首先需要了解图像处理。在图像处理的过程中,一般分为空间域处理和频率域处理。
空间域处理是直接对图像内的像素进行处理。空间域处理主要划分为灰度变换和空间滤波两种形式。灰度变换是对图像内的单个像素进行处理,比如调节对比度和处理阈值等。控制滤波处理涉及图像质量的改变,例如前面的图像平滑处理。空间域处理的优点:计算简单方便,运算速度更快
频率域处理时先将图像变换到频率域,然后在频率域对图像进行处理,最后在通过反变换将图像从频率域变换到空间域。傅里叶变换是应用最广泛的一种频率域变换,它能够将图像从空间域变换到频率域,而逆傅里叶变换能够将频率域信息变换到空间域内。
傅里叶变化
法国数学家傅里叶指出,任何周期函数都可以表示为不同频率的正弦函数和的形式。
在图像的处理中,傅里叶变换就是将图像分解为正弦分量和余弦分量两部分,即将图像从空间域转换到频率域。数字图像经过傅里叶变化后,得到的频率域的值是复数。因此显示傅里叶变换的结果需要使用实数图像加虚数图像,或者幅度图像加相位图像的形式。
因为幅度图像包含了原图像中我们所需要的大部分信息,所以在图像的处理过程中,通常仅使用幅度图像。当然,如果希望先在频率域内对图像进行处理,再通过傅里叶变换得到修改后的空间域图像,就必须同时保留幅度图像和相位图像。
对图像进行傅里叶变换后,我们会得到图像中的低频与高频信息。低频信息对应图像内变化缓慢的灰度分量。高频信息对应图像内变换越来越快的灰度分量,是由灰度的尖锐过度造成的。例如,在一副大草原的图像中有一头狮子,低频信息就对应着广袤的草原,而高频信息对应着狮子的轮廓等各种边界及噪声信息。
傅里叶变换的作用,就是为了将图像从空域转换到频域,并在频率域内实现对图像内特定对象的处理,然后再对经过处理的频率域图像进行逆傅里叶变换得到空间域图像。其主要用处包括:图像增强,图像去噪,边缘检测,特征提取,图像压缩,图像加密等。
实现傅里叶变化
在Numpy包中,它给我们提供了numpy.fft.fft2()函数实现傅里叶变换。其完整定义如下:
def fft2(原始图像):
需要注意的是,原始图像必须是灰度图像,其返回值是ndarray类型。
下面,我们来实现傅里叶变换,并观察得到的频谱图像:
import cv2
import numpy as np
import matplotlib.pyplot as plt
img = cv2.imread("4.jpg", 0)#1
f = np.fft.fft2(img)#2
fshift = np.fft.fftshift(f)#3
spectrum = 20 * np.log(np.abs(fshift))#4