《精通Matlab数字图像处理与识别》一6.2 傅立叶变换基础知识

本节书摘来自异步社区《精通Matlab数字图像处理与识别》一书中的第6章,第6.2节,作者 张铮 , 倪红霞 , 苑春苗 , 杨立红,更多章节内容可以访问云栖社区“异步社区”公众号查看

6.2 傅立叶变换基础知识

精通Matlab数字图像处理与识别
要理解傅立叶变换,掌握频率域滤波的思想,必要的数学知识是不能跳过的。为便于理解,我们将尽可能定性地去描述。其实傅立叶变换所必需的数学知识对于一个理工科大学二年级以上的学生来说是很有限的,高等数学中傅立叶级数的知识加上线性代数中基和向量空间的概念就足够了。下面就从一维情况下的傅立叶级数开始进行介绍。

6.2.1 傅立叶级数

法国数学家傅立叶发现任何周期函数只要满足一定条件(狄利赫里条件)都可以用正弦函数和余弦函数构成的无穷级数,即以不同频率的正弦和余弦函数的加权和来表示,后世称为傅立叶级数。

对于有限定义域的非周期函数,可以对其进行周期拓延,从而使其在整个扩展定义域上为周期函数,从而也可以展开为傅立叶级数。

1.傅立叶级数的三角形式
周期为T的函数f (t)的三角形式傅立叶级数展开为

image

a k和b k称为傅立叶系数。稍后在学习傅立叶级数的复数形式时还将介绍傅立叶系数的另一种形式。事实上,傅立叶系数正是我们在6.2.2小节傅立叶变换中所关心的对象。

于是,周期函数f(t)就与下面的傅立叶序列产生了一一对应,即

image

图6.1所示形象地显示出了这种频率分解,左侧的周期函数f(x)可以由右侧函数的加权和来表示,即由不同频率的正弦和余弦函数以不同的系数组合在一起。

image

原函数f(x)(左),其傅立叶展开为一系列不同频率的正弦、余弦函数的加权和(右)

从数学上已经证明了,傅立叶级数的前N项和是原函数f(t)在给定能量下的最佳逼近。

image

图6.2为我们展示了对于一个方波信号函数采用不同的N值的逼近情况。随着N的增大,逼近效果越来越好。但同时也注意到,在f (x)的不可导点上,如果只取式(6-1)右边的无穷级数中的有限项之和作为hat f(x),那么hat f(x)在这些点上会有起伏,对于图6.2(a)的方波信号尤为明显,这就是著名的吉布斯现象。

2.傅立叶级数的复指数形式
除上面介绍的三角形式外,傅立叶级数还有其他两种常用的表现形式,即余弦形式和复指数形式。借助欧拉公式,上述3种形式可以很方便地进行等价转化,本质上它们都是一样的。

image

复指数傅立叶级数即我们经常说的傅立叶级数的复数形式,因其具有简洁的形式(只需一个统一的表达式计算傅立叶系数),在进行信号和系统分析时通常更易于使用;而余弦傅立叶级数可使周期信号的幅度谱和相位谱意义更加直观,函数的余弦傅立叶级数展开可以解释为f(x)可以由不同频率和相位的余弦波以不同系数组合在一起来表示,而在三角形式中相位是隐藏在系数a n和b n中的。下面主要介绍复指数傅立叶级数,在后面的傅立叶变换中要用到的正是这种形式。关于余弦傅立叶级数的有关知识,感兴趣的读者请参考附录Ⅲ。

傅立叶级数的复指数形式为

image

由式(6-4)和(6-5)可见,复指数傅立叶级数形式比较简洁,级数和系数都可以采用一个统一的公式计算。有关如何由式(6-1)推导出傅立叶级数复指数形式(6-4)的过程,由于这里我们感兴趣的并非傅立叶级数本身,就不在正文中给出了,详细的内容可参考附录Ⅱ,只要您相信不同的展开形式之间本质上是等价的,并对复指数形式的傅立叶级数展开建立了一个基本的形式上的认识就足以继续阅读和理解后面的内容了。

6.2.2 傅立叶变换

1.一维连续傅立叶变换
对于定义域为整个时间轴(-∞

image

式(6-6)和式(6-7)即为我们通常所说的傅立叶变换对,6.1节中提到的函数可以从它的反变换进行重建正是基于上面的傅立叶变换对。

由于傅立叶变换与傅立叶级数涉及两类不同的函数,在很多数字图像处理的书中通常对它们分别进行处理,并没有阐明它们之间存在的密切联系,这给很多初学者带来了困扰,实际上我们不妨认为周期函数的周期可以趋向无穷大,这样可以将傅立叶变换看成是傅立叶级数的推广。

仔细地观察式(6-6)和式(6-7),对比复指数形式的傅立叶级数展开公式式(6-4),注意到在这里傅立叶变换的结果F(u)实际上相当于傅立叶级数展开中的傅立叶系数,而反变换公式式(6-7)则体现出不同频率复指数函数的加权和的形式,相当于复指数形式的傅立叶级数展开公式,只不过这里的频率u变为了连续的,所以加权和采用了积分的形式。这是因为随着作为式(6-5)的积分上下限的T向整个实数定义域扩展,即T→∞,频率u则趋近于du(因为u=1/T),导致原来离散变化的u的连续化。

2.一维离散傅立叶变换
一维函数f(x)(其中x=0, 1, 2 ,… , M-1)的傅立叶变换的离散形式为

image

由于一维情况下很多性质更为直观,我们更青睐于分析一维离散傅立叶变换,而由此得出的这些结论都可顺利推广至二维。一些有用的性质如下。

仔细观察式(6-8)和式(6-9),注意到在频域下变换F(u)也是离散的,且其定义域仍为0~M-1,这是因为F(u)的周期性,即
image

考虑式(6-9)中的系数1/M,在这里该系数被放在反变换之前,实际上它也可以位于式(6-8)的正变换公式中。更一般的情况是只要能够保证正变换与反变换之前的系数乘积为1/M即可。例如,两个公式的系数可以均为 1/sqrt M 。
为了求得每一个F(u)(u=0, 1, 2,…, M-1),都需要全部M个点的f(x)参与加权求和计算。对于M个u,则总共需要大约M2次计算。对于比较大M(在二维情况下对应着比较大的图像),计算代价还是相当可观的,我们会在下一节快速傅立叶变换中来研究如何提高计算效率的问题。
3.二维连续傅立叶变换
有了之前的基础,下面我们将傅立叶变换及其反变换推广至二维。对于二维连续函数,傅立叶变换为

F(u,v) = int_{ - infty }^infty {int_{ - infty }^infty {f(x,y)text{e}^{ - text{j}2pi (ux + vy)} dxdy} }

image

4.二维离散傅立叶变换
在数字图像处理中,我们关心的自然是二维离散函数的傅立叶变换,下面直接给出二维离散傅立叶变换(Discrete Fourier Transform, DFT)公式。

image

显然,这是f(x, y)各个像素的灰度之和。而如果将系数1/MN放在正变换之前,则F(0, 0)对应于原图像f(x, y)的平均灰度。F(0, 0)有时被称作频谱的直流分量(DC)。

我们之前曾指出了一维函数可以表示为正弦(余弦)函数的加权和形式;类似的,二维函数f(x, y)可以分解为不同频率的二维正弦(余弦)平面波的按比例叠加。图6.3(a)中给出了一幅简单的图像,可将它视为以其灰度值作为幅值的二维函数,如图6.3(b)所示,根据式(6-13),它可以分解为如图6.3(c)所示的不同频率和方向的正弦(余弦)平面波的按比例叠加(只给出了一部分)。比如图6.3(c)中第一行中间的平面波为sin(Y),而第二行右面的平面波则为sin(X+2Y),而第三行最后的一个为sin(2X+2Y)。

image

image

6.2.3 幅度谱、相位谱和功率谱

下面,我们再来定义傅立叶变换的幅度谱、相位谱以及功率谱。

image

幅度谱又叫频率谱,是图像增强中关心的主要对象,频域下每一点(u,v)的幅度|F(u, v)|可用来表示该频率的正弦(余弦)平面波在叠加中所占的比例,如图6.4所示。幅度谱直接反映频率信息,是频域滤波中的一个主要依据。

图6.4所示幅度谱中的A、B、C、D四点的幅值分别为四周的4个正弦平面波在的加权求和中的权值(混合比例)。注意这4个正弦平面波的方向和频率。

image

相位谱表面上看并不那么直观,但它隐含着实部与虚部之间的某种比例关系,因此与图像结构息息相关。

由于对于和空域等大的频域空间下的每一点(u, v),均可计算一个对应的|F(u, v)|和φ(u, v),因此可以像显示一幅图像那样显示幅度谱和相位谱。图6.5(b)、(c)分别给出了图6.5(a)中图像的幅度谱和相位谱,获得它们的方法请参考6.3节中傅立叶变换实现的相关内容,关于幅度谱和相位谱的一个非常有趣的例子请参考例6.2。

image

▲图6.5 circuit.tif幅度谱和相位谱。幅度谱和相位谱都将(0,0)点移到了中心

6.2.4 傅立叶变换的实质—基的转换

无论是傅立叶变换、离散余弦变换还是小波变换,其本质都是基的变换。下面首先让我们一起回顾一下线性代数中基和向量空间的相关知识。

1.基和向量空间
在三维欧氏向量空间中,某向量vec v 可以由3个复数{v_1 ,v_2 ,v_3 }来定义,常常记作vec v =(v_1 ,v_2 ,v_3 ),这3个复数与3个正交单位向量{vec e_1 ,vec e_2 ,vec e_3 }相联系。实际上,有序集{ v_1 ,v_2 ,v_3 }表示向量 vec v 的3个标量分量,也就是系数;而3个正交单位向量{vec e_1 ,vec e_2 ,vec e_3 }即为该三维欧氏空间的基向量。我们称该空间为这3个基向量所张成的空间,任何该空间中的向量vec v 均可由这3个基向量的线性组合(加权和)表示为

image

在上面的叙述中涉及了向量的正交,这是向量代数中一个非常重要的概念。为了说明正交的概念,让我们首先回顾一下向量点积(数量积),两个向量的点积定义为

image

此时,如果vec u bullet vec v = 0 ,则称这两个向量vec u 和vec v 互相正交。由式(6-22)可知,两非零向量正交则cos theta = 0 ,说明其夹角为90(垂直)。

接下来,定义一个向量在另一个向量方向上的投影或分量为

image

式中:vec e_v 为向量vec v 单位化后的单位向量,模为1,方向与vec v 相同。式(6-23)说明如果需要得到某向量在给定方向上的分量,只需计算该向量与给定方向单位向量的点积。

图6.6能够帮助我们理解上述内容,图6.6(a)中为一个三维空间中的向量vec v 以及3个单位正交基向量vec e_1 ,vec e_2 ,vec e_3 ;图6.6(b)中给出了向量vec v 在vec e_2 方向的投影v_2 ;在图6.6(c)中,根据矢量加法的平行四边形法则,向量vec v 被分解为3个正交基向量vec e_1 ,vec e_2 ,vec e_3 线性组合,显然可以表示为vec v =(v_1 ,v_2 ,v_3 )的形式。

image

将三维向量空间中基与投影的概念推广至N维向量空间。任何一个该空间中的N×1向量均可由N个基向量vec e_1 ,vec e_2 ,...,vec e_N 的线性组合来表示,记作

image

2.基函数和函数空间
尽管上面的向量分解与重构的问题比较基础,但它与傅立叶变换与反变换之间的关系却十分紧密。事实上,它们在形式上有着惊人的相似,唯一不同的是这里的向量空间变成了函数空间,向量vec v 变成了函数f(x),而基向量vec e 1,vec e 2,…,vec e n也相应地变成了基函数。对比式(6-24)~(6-25)和式(6-8)~(6-9)的形式不难看出,式(6-25)的分解过程即相当于傅立叶变换,而式(6-26)的重构过程则恰恰相当于傅立叶反变换。也就是说,相应函数空间中的任意函数均可以由该函数空间中的一组基函数的加权和来表示。观察式(6-8)容易发现,这里的基函数的形式为text{e}^{ - i2pi ux} ,我们用下面的等式来表示函数的正交性。

image

至此,读者应该已经理解了傅立叶变换的实质——基的转换。对于给定函数f(x),关键是选择合适的基,使得f(x)在这组基下表现出我们需要的特性。当某一组基不满足要求时,就需要通过变换将函数转换到另一组基下表示,方可得到我们需要的函数表示。常用的变换有傅立叶变换(以正弦和余弦函数为基函数)、小波变换(以各种小波函数为基函数)、离散余弦变换以及Walsh变换等。实际上,我们在第12章中将指出,特征降维中常用的主成份分析法(K-L变换)本质上也是一种基的转换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/541464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程循环输出abcc++_C ++循环| 查找输出程序| 套装5

多线程循环输出abccProgram 1: 程序1&#xff1a; #include <iostream>using namespace std;int main(){int num 15673;int R1 0, R2 0;do {R1 num % 10;R2 R2 * 10 R1;num num / 10;} while (num > 0);cout << R2 << " ";return 0;}Ou…

java oql_深入理解java虚拟机(八):java内存分析工具-MAT和OQL

以下内容翻译自MAT帮助文档。一、Class HistogramClass Histogram shows the classes found in the snapshot, the number of objects for each class, the heap memory consumption of these objects, and the minimum retained size of the objects二、Dominator treeDomina…

《Python数据分析与挖掘实战》一1.2 从餐饮服务到数据挖掘

本节书摘来自华章出版社《Python数据分析与挖掘实战》一书中的第1章&#xff0c;第1.2节&#xff0c;作者 张良均 王路 谭立云 苏剑林&#xff0c;更多章节内容可以访问云栖社区“华章计算机”公众号查看 1.2 从餐饮服务到数据挖掘 企业经营最大的目的就是盈利&#xff0c;而餐…

obj[]与obj._Ruby中带有示例的Array.include?(obj)方法

obj[]与obj.Ruby Array.include&#xff1f;(obj)方法 (Ruby Array.include?(obj) Method) In the previous articles, we have seen how we can check whether two Array instances are identical or not with the help of <> operator, operator, and .eql? method?…

java javah_Java开发网 - 一个javah的问题

Posted by:jerry_xuPosted on:2006-03-13 15:39我在环境变量中已经设置了path为D:\Program Files\Java\jdk1.5.0_06&#xff0c;ClassPath设置为.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;class的路径为&#xff1a;D:\JNItest\bin\jni\Hello.class &#xff0c;但是…

《Python面向对象编程指南》——2.7 __del__()方法

本节书摘来自异步社区《Python面向对象编程指南》一书中的第2章&#xff0c;第2.7节&#xff0c;作者&#xff3b;美&#xff3d;Steven F. Lott&#xff0c; 张心韬 兰亮 译&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 2.7 __del__()方法 __del__()方…

NullReferenceException C#中的异常

什么是NullReferenceException&#xff1f; (What is NullReferenceException?) NullReferenceException is an exception and it throws when the code is trying to access a reference that is not referencing to any object. If a reference variable/object is not refe…

java map key 大写转小写_Spring JdbcTemplate 查询出的Map,是如何产生大小写忽略的Key的?(转)...

Java 是区分大小写的&#xff0c;普通的Map例如HashMap如果其中的key"ABC" value"XXX"那么map.get("Abc") 或 map.get("abc")是获取不到值得。但Spring中产生了一个忽略大小写的map使我产生了好奇例如 jdbcTemplate.queryForList(sql)…

《iOS 6核心开发手册(第4版)》——2.11节秘诀:构建星星滑块

本节书摘来自异步社区《iOS 6核心开发手册&#xff08;第4版&#xff09;》一书中的第2章&#xff0c;第2.11节秘诀&#xff1a;构建星星滑块&#xff0c;作者 【美】Erica Sadun&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看 2.11 秘诀&#xff1a;构建星星…

css框架和js框架_优雅设计的顶级CSS框架

css框架和js框架Brief discussion: 简要讨论&#xff1a; Well, who doesnt want their website or web page to look attractive, stylish and be responsive? 那么&#xff0c;谁不希望自己的网站或网页看起来有吸引力&#xff0c;时尚并且ReactSwift&#xff1f; We put …

软考下午题具体解释---数据流图设计

在历年的软考下午题其中&#xff0c;有五道大题。各自是数据流图的设计&#xff0c;数据库设计&#xff0c;uml图&#xff0c;算法和设计模式&#xff0c;从今天这篇博文開始&#xff0c;小编就跟大家来一起学习软考下午题的相关内容。包含理论上的知识以及典型例题的解说&…

基本程序 打印Scala的Hello World

Scala中的基本程序 (Basic program in Scala) As your first Scala program, we will see a basic output program that just prints "Hello World" or any other similar type of string. With this example, we will see what are the part of the code that is im…

java treemap lastkey_Java TreeMap lastKey()用法及代码示例

java.util.TreeMap.lastKey()用于检索Map中存在的最后一个或最高键。用法:tree_map.lastKey()参数&#xff1a;该方法不带任何参数。返回值&#xff1a;该方法返回映射中存在的最后一个键。异常&#xff1a;如果映射为空&#xff0c;则该方法将引发NoSuchElementException。以下…

mysql属于数据库三级模式_数据库系统的三级模式指的是什么

数据库系统的三级模式指的是什么发布时间&#xff1a;2020-10-26 10:11:21来源&#xff1a;亿速云阅读&#xff1a;52作者&#xff1a;小新小编给大家分享一下数据库系统的三级模式指的是什么&#xff0c;希望大家阅读完这篇文章后大所收获&#xff0c;下面让我们一起去探讨吧&…

《自顶向下网络设计(第3版)》——导读

目录 第1部分 辨明客户的需求和目标 第1章 分析商业目标和制约 1.1 采用自顶向下的网络设计方法 1.2 分析商业目标 1.3 分析商业制约 1.4 商业目标检查表 1.5 小结 1.6 复习题 1.7 设计环境 第2章 分析技术目标与折衷措施 2.1 可扩展性 2.2 可用性 2.3 网络性能 2.4 安全性 2…

python矩阵变化_用numpy改变矩阵的形状

我的问题有两个方面。我有下面的代码来处理一些矩阵。在import numpytupleList [(0, 122), (1, 246), (2, 157), (3, 166), (4, 315), (5, 108), (6, 172), (7, 20), (8, 173), (9, 38), (10, 28), (11, 72), (12, 102), (13, 277), (14, 318), (15, 316), (16, 283), (17, 31…

最小硬币问题_进行更改的最小硬币数量

最小硬币问题Description: 描述&#xff1a; This is classic dynamic programming problem to find minimum number of coins to make a change. This problem has been featured in interview rounds of Amazon, Morgan Stanley, Paytm, Samsung etc. 这是经典的动态编程问题…

java 生成xml乱码_jdom解决中文乱码问题 JAVA生成xml文件帮了我很大的忙

决解了数据库读取出来 再保存到xml 产生的乱码问题import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStreamWriter;import org.jdom.Attribute;import org.jdom.Document;import org.jdom.Element;import org.jdom.output.Format;import org.…

给定重量上限,背包问题_满足给定重量的袋子的最低成本

给定重量上限,背包问题Problem statement: 问题陈述&#xff1a; You are given a bag of size W kg and you are provided costs of packets different weights of oranges in array cost[] where cost[i] is basically cost of i kg packet of oranges. cost[i] -1 means t…

springMVC rest风格

1.dispatcherServlet的配置<!-- The front controller of this Spring Web application, responsible for handling all application requests --><servlet><servlet-name>springDispatcherServlet</servlet-name><servlet-class>org.springfram…