如果你对傅里叶变换到底是干嘛的不太熟悉,可参考:0704:傅里叶变换

这里主要说一下傅里叶变换应用于图像处理,显示原图像的频谱图像.

在Python中,实现傅里叶的变换主要有两种方法,一种是使用numpy,一种是OpenCV.

1.numpy

① 傅里叶变换

函数1:numpy.fft.fft2()

功能:实现傅里叶变换;

返回:一个复数数组.




python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换尺度变换性质


图1 fft2函数

复数包括实数与虚数,复数可以写成: z=a+bi .
其中a为实部,b为虚部,i为虚数单位,当a、b都不为0时,
z为虚数.当b=0时,z为实数. 当a=0时,z为纯虚数.


函数2:numpy.fft.fftshift()

功能:将零频率分量移到频谱中心.


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换尺度变换性质_02

图2 fftshif函数


函数3:20*np.log(np.abs(fshift))

功能:傅里叶变换得到的结果是一个复数数组,不能直接用于显示图像,要想得到频谱灰度图像,我们需要一个映射,把复数映射[0, 255]之间.


python傅里叶级数求周期 python傅里叶变换相位谱图_高通滤波_03

图3 映射函数

实验1:


import


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换_04

图4 原图像与频谱图像

Q1:现在我们得到频谱图,现在我们应该想一个问题,我们对图像作傅里叶变换是为了啥?

A1:

★ 傅里叶变换变换可以得到高频与低频,针对高频与低频处理,可以实现不同的目的;

★ 傅里叶变换是可逆的,通过逆傅里叶变换,可以恢复原图像;

★ 如果对高频与低频进行处理,然后进行逆傅里叶变换,所做的处理会反映到逆变换图像上.

附加:在数据可视化方面,推荐看这篇文章:0704:matplotlib: 数据可视化

前面提到了逆傅里叶变换,那怎么做呢?

② 逆傅里叶变换

函数:np.abs(i_img)

功能:设置值范围


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换尺度变换性质_05

图5 设置值范围

实验2:


import


python傅里叶级数求周期 python傅里叶变换相位谱图_python傅里叶级数求周期_06

图6 原图像与逆变换图像


2. 高通滤波

① 低频、高频

低频对应图像内变化较为缓慢的灰度分量. 例如:在一幅广袤的绿色大草原上,一大片绿色就代表着低频(没什么变化).

高频对应图像内变化较快的灰度分量,是由灰度的尖锐过度造成的,例如:如果这个大草原上,有一只雄狮,狮子的边缘就代表着高频.

② 滤波

接受(通过)或拒绝一定频率的分量,就称为为滤波.

通过低频的滤波器,称为低通滤波器.

通过高频的滤波器,称为高能滤波器.

③ 频域滤波

Q2:前面,我们已经说过傅里叶变换,逆傅里叶变换,现在我们该怎么在频域的基础上,对图像进行处理呢?

A2:对图像进行傅里叶变换,修改频谱图像,然后IDFT返回到图像域.

特殊目的:图像增强、图像去噪、边缘检测、特征提取、压缩、加密等等.

衰减高频而通过低频,低通滤波器,将模糊一幅图像.

衰减低频而通过高频,高通滤波器,将增强尖锐的边缘,但是会导致图像的对比度下降(丢失了低频细节信息).

★ 高通滤波

频谱图像中,中间较亮的部分是低频信息(像素值比较大),我们可以通过设置低频部分的像素值来减弱低频,如图7所示:


python傅里叶级数求周期 python傅里叶变换相位谱图_数组_07

图7 高通滤波

python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换_08

图8 频谱腌膜图像

实验3:


import


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换尺度变换性质_09

图9 高通滤波效果


3.OpenCV

① 傅里叶变换

函数2:cv2.dft()


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换_10

图10 dft函数

函数2:


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换_11

图11 fftshift函数

函数3:

cv2.magnitude(参数1,参数2)

一维的复数数组),而cv2.dft()返回的是一个 二维数组(一维是复数的实部,一个是复数的虚部).


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换_12

图12 magnitude函数

实验4:


import


python傅里叶级数求周期 python傅里叶变换相位谱图_高通滤波_13

图13 效果图

② 逆傅里叶变换

函数1:cv2.idft()


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换_14

图14 idft函数

函数2:numpy.fft.ifftshift()


python傅里叶级数求周期 python傅里叶变换相位谱图_数组_15

图15 ifftshift函数

实验5:


import


python傅里叶级数求周期 python傅里叶变换相位谱图_python傅里叶级数求周期_16

图16 逆傅里叶变换


4.低通滤波

低通滤波器:去掉高频,保留低频


python傅里叶级数求周期 python傅里叶变换相位谱图_高通滤波_17

图17 低通滤波器

实验6:


import


python傅里叶级数求周期 python傅里叶变换相位谱图_傅里叶变换_18

图18 低通滤波