【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试

本文的工作如下:

一.介绍傅里叶滤波的实现原理

二.介绍傅里叶带通滤波器实现图像滤波的原理

三.通过代码实例进一步加深理解

 

1. 从“几何”的角度来看待傅里叶级数

我们都知道周期函数傅里叶级数公式(复数形式),如下所示:

                                                                  【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第1张图片

          

但是我们真的理解公式的意义了吗?

为什么周期函数可以写成无限项的和呢?

让我们从“几何”的角度来看待傅里叶级数吧!

这部分内容参考至http://blog.renren.com/share/343320656/15540620254/1

 

 

  • 一个简单的二维平面的例子

如下图所示,给定两个向量 u v ,我们从 u 的末端出发作到 v 所在直线的垂线,得到一个跟 v 同向的新向量 p 。这个过程就称作 u v 所在直线的投影,得到的新向量 p 就是 u 沿 v 方向的分量。图中的系数 c p v 的比例,也就是 u v 轴上的坐标

我们可以用尺规作图来完成投影这个动作,

问题是:如果给定的向量 u v 都是代数形式的,我们怎么用代数的方法求 c

                                                           【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第2张图片

                                                                                 【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第3张图片

  • 正交基的概念

在讲傅里叶级数之前,我们还需引进线性代数中正交基的概念。如果这个概念你觉得陌生,就把它想成是互相垂直的坐标轴。回到刚才这个例子,如下图所示,现在我们引进一组正交基 {v1v2},那么 u 可以展开成以下形式

                                                     【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第4张图片

                                                                              

从图上来看,其实说的是我们可以把 u“投影 v1 v2 这两个坐标轴上,c1 c2 就是 u 的新坐标

问题是:我们怎么求 c1 c2 呢?

利用之前关于投影的讨论,我们可以直接得出答案

                                                                                 【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第5张图片

现在我们已经明白一件事情了:如果想把一个向量在一组正交基上展开,也就是找到这个向量沿每条新坐标轴坐标,那么我们只要把它分别投影到每条坐标轴上就好了。

 

  • 函数在傅里叶正交基展开

说了半天,这些东西跟傅里叶级数有什么关系?我们先回忆一下傅里叶级数的表达式。给定一个周期是 2l 的周期函数 f(x),它的傅里叶级数为:

                                                           【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第6张图片

                            

我不喜欢记忆这些公式,有办法可以更好的理解他们来帮助记忆吗?答案是有的,那就是从几何的角度来看。傅里叶告诉我们,f(x) 可以用下面这组由无限多个复数函数(包括常数)组成的正交基来展开,

                                                                                                              

这里我们需要在广义上来理解正交。我们说两个向量,或两个函数之间是正交的,意思是它们的内积inner product)为零。

 “内积在有限维的向量空间中的形式为点积”(dot product)

 

                      【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第7张图片

 

在无限维的函数空间中,对于定义在区间 [a,b] 上的两个实函数 u(x),v(x) 来说,它们的内积定义为

                                                                                                            

对于定义在区间 [a,b] 上的两个复数函数 u(x),v(x) 来说,它们的内积定义为

                                                                       

那么接下来我们就运用“广义正交”的定义来验证是否为正交基

             【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第8张图片

由以上公式推导可知,确实是一组正交基

那么周期函数可以写为一下形式:

                                                 【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第9张图片

 我们可以看到,用几何投影的观点来看待傅里叶级数,理解变得更加容易,因为我相信所有人都能理解投影的概念;同时,傅里叶级数所有的公式都可以轻松的记住,想要遗忘都难了。我们在学习不同学科的时候可以经常的去做联系,尝试着用不同的角度去看待同一个问题,我相信这么做是很有好处的。

 

 

 

2. 周期函数的傅里叶级数到傅里叶变换

从上面推导我们已经知道周期函数的傅里叶级数的展开,但是在实际应用中,我们遇见的函数多为非周期函数,所以我们需要将其表示傅里叶展开的手法推广到非周期函数

非周期函数,也可以理解为周期无限大的函数,

那么下面的推导就是

在周期趋于无穷大的条件下,由傅里叶级数公式推导出傅里叶变换公式

                         【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第10张图片

                                                                  【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第11张图片

3. 取样函数的傅里叶变换及重建

首先取样函数是连续函数的离散值序列,那为什么要介绍离散序列的傅里叶变换呢?

因为计算机为代表的现代信号处理系统只能存储和处理有限长度的离散信号,且无法直接进行连续积分运算,因此必须要对信号进行离散化。

这部分内容主要参考:冈萨雷斯,数字图像处理(第三版),电子工业出版社

 

  • 冲激和冲激串以及它们的傅里叶变换

在介绍取样函数的傅里叶变换之前,让我们先了解一下冲激和冲激串以及它们的傅里叶变换

连续变量或离散变量x在x=0处的单位冲激表示为 ,其定义为

                                                                    【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第12张图片

                                                                   【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第13张图片

它还被限制为满足等式

                                                                          

一个冲激具有关于如下积分的所谓取样特性:

                                                                      

或者,更一般地用位置 x=x0处的冲激

                                                     【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第14张图片

                                                                        

本节后面特别感兴趣的是冲激串

                                                                           

                                          【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第15张图片

位于原点的单位冲激的傅里叶变换由下式给出:

                                                

位于x0的一个冲激的傅里叶变换是

                                   【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第16张图片

冲激串的傅里叶级数

                          【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第17张图片                

                

的傅里叶变换

                                   

由傅里叶变换的对称性可得

                                                                    

冲激串的傅里叶变换

                                               

  • 取样函数及其傅里叶变换

取样函数可以由下式给出

                                                           

取样函数的傅里叶变换

                                                  【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第18张图片

                          【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第19张图片

                           【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第20张图片

由上图可以看出,取样后的函数的傅里叶变换的一个拷贝的无限、周期序列,也是原始连续函数的傅里叶变换。拷贝的间隔由的值决定,为取样率,取样率越小,拷贝间越靠近。如果取样率低于保持不同拷贝的最小取样率要求,就不能保持原始变换。

 

  • 从函数取样恢复原始函数

重建滤波函数,用于从函数的取样恢复原始函数,其定义为:

                                                            

重建滤波函数的傅里叶逆变换

                                          【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第21张图片

利用重建滤波函数,重建原始函数

                                【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第22张图片

         【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第23张图片

 

 

 

4. 傅里叶变换的频移性和频谱的中心化

                                                                  【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第24张图片

对于一维函数来说

                                                          

其中,假设ΔT=1,e^{i2\pi\frac{\Delta T}{2}}=cos(2\pi\frac{\Delta T}{2})+isin(2\pi\frac{\Delta T}{2})=-1\Rightarrow e^{i2\pi\frac{\Delta T}{2}x}=(-1)^{x} 

 

对于二维函数来说

                                           

未中心化:蓝色框为我们看到的未中心化图像,四个背靠背的周期在四个角落相会

【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第25张图片

中心化:蓝色框为我们看到的中心化图像,四个背靠背的周期在图像中心相会

     

                       【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第26张图片

 

 

5. 带通滤波器

前面的3.3小节我们在讨论重建的时候,定义了重建滤波函数,实际上我们可以按照一定规则定义滤波器,比如当我们的兴趣是处理指定的频段或频率矩形的小区域。第一类滤波器分别称为带阻滤波器或带通滤波器。第二类滤波器称为陷波滤波器。

 

在这里我们只讨论第一类滤波器。带通滤波器,它允许一定频段的信号通过,抑制低于或高于该频段的信号、干扰和噪声;带阻滤波器,它抑制一定频段内的信号,允许该频段以外的信号通过。

滤波器的作用是,根据要求让需要的频段的信号通过,抑制不需要的频段的信号。带通滤波器就是只让指定的一个频段内的信号通过,其他频率的信号都抑制掉的滤波器;而带阻滤波器则是抑制特定频段的信号,其他频率的信号都通过的滤波器。

 

下表给出了理想、布特沃斯和高斯带阻滤波器的表达式,其中D(u,v)是距频率中心的距离,

                                                                   

 是带宽的径向中心,W是带宽。

     【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第27张图片

一个带通滤波器可以用带阻滤波器得到:

                                                                         

下图为带阻滤波器和相应的带通滤波器

                                         【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第28张图片

6. 频率域滤波步骤小结

【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第29张图片

 

7. 代码实例测试

完整代码在:https://github.com/LeonJinC/testFourierBandPassFilter

原始图

【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第30张图片

傅里叶变换

【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第31张图片

带通滤波器

【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第32张图片

卷积图

【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第33张图片

带通滤波后图像

【傅里叶滤波】傅里叶(Fourier)带通滤波+代码实例测试_第34张图片

 

你可能感兴趣的:(算法)