数字图像处理笔记——二维离散傅里叶变换(2D Discrete Fourier Transform)

本文主要是介绍数字图像处理笔记——二维离散傅里叶变换(2D Discrete Fourier Transform),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

二维傅里叶变换

我们先来看看一维情况的傅里叶变换。在信号系统中讲过连续时间的傅里叶变换和离散时间的傅里叶变换,连续时间傅里叶变换在频谱上时非周期的,离散时间傅里叶变换(DTFT)在频谱上是周期的。在DSP中讲了离散傅里叶变换,它的思想是将时域周期化,反映在频域上就是对连续的周期频谱进行抽样

有了一维的离散傅里叶变换(DFT),我们可以将其推广到二维的情况

我们其实可以将二维离散傅里叶变换看成两次一维的离散傅里叶变换,在matlab中我们可以用fft2这个函数来计算

和一维DFT类似,二维DFT显示了图像的频率成分组成情况

如下图所示就是不同的频率成分,也就是说图像实际上是由以下各种不同的图像叠加而成

由于在某一幅特定的图像中,频谱值差距很大,因此我们通常会用log来调整。在实际调用的时候我们还可以采用频谱搬移的方法使得频谱特性更容易观察,例如out=fftshift(log(abs(fft2(im))));由于图像频谱具有中心对称性(一维傅里叶变换是轴对称,二维傅里叶变换是中心对称),我们实际上只需要看频谱的1/2就可以了

我们会看到图中会有两条白色的线,在课程中老师解释说是由于DFT会将图像进行周期化,使得图像的边缘不连续(也就是图像下半部分会与下一幅图的上半部分接壤,左半部分会与右半部分接壤),引入了高频成分导致的。但是关于这点我有点不是很理解,我认为对于一幅图像而言,我们直接对他进行DTFT得到的是一个连续的周期谱,我们对图像进行周期化的过程实际上只是对连续谱进行一个采样,而不会引入新的频率成分,也就是说周期化与否并不影响频谱成分,而差别只是频谱由连续变为离散了。因此我认为频谱存在横竖的白线仅仅是因为图像中存在水平或竖直的边缘(例如上图中的海水与海岸形成竖直的线,山峦与天空形成水平的线)导致的

那么为什么图像中的边缘会使得频谱中也出现相应的白线呢,我们先给出结论:如果图像中存在角度为θ的边线,那么在频谱中我们会看到角度为θ+90度的一条白线。我们在此不做数学上的推导而是举个例子让大家能够理解:我们假设有一幅图像是黑白相间的竖条纹,我们对这幅图像进行傅里叶变换,我们知道二维傅里叶变换可以看做两次一维的傅里叶变换,因此我们对产生图像的矩阵分别进行DFT,得到的结果就是只有频谱中央的一条横线上是有值的,而这个值具体是什么,跟条纹的图案有关

下图是一个实际的例子,我们可以看到对于一幅存在倾斜方格的图片,它的频谱也会出现对应角度的白线

 

二维傅里叶变换的性质

以下是二维傅里叶变换的一些性质,在这就不细讲了

要注意的是DTFT中的卷积性质到DFT中变成了循环卷积,也就是将信号周期化后做卷积(每个位置的值会被循环使用)

但是循环卷积出来的结果往往不是我们想要的,因为周期化的过程使得引入的循环部分也参与卷积运算,而这部分是我们不需要的,解决方法是在序列后面补零,使得循环卷积结果与普通卷积相同,好消息是我们在matlab中调用函数时这些函数会自动帮我们完成这些工作

 

 

这篇关于数字图像处理笔记——二维离散傅里叶变换(2D Discrete Fourier Transform)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401261

相关文章

poj2576(二维背包)

题意:n个人分成两组,两组人数只差小于1 , 并且体重只差最小 对于人数要求恰好装满,对于体重要求尽量多,一开始没做出来,看了下解题,按照自己的感觉写,然后a了 状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-c[k]]+c[k]);其中i表示人数,j表示背包容量,k表示输入的体重的 代码如下: #include<iostream>#include<

hdu2159(二维背包)

这是我的第一道二维背包题,没想到自己一下子就A了,但是代码写的比较乱,下面的代码是我有重新修改的 状态转移:dp[i][j] = max(dp[i][j], dp[i-1][j-c[z]]+v[z]); 其中dp[i][j]表示,打了i个怪物,消耗j的耐力值,所得到的最大经验值 代码如下: #include<iostream>#include<algorithm>#include<

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

HDU 2159 二维完全背包

FATE 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验值,xhd还留有m的忍耐度,每杀一个怪xhd会得到相应的经验,并减掉相应的忍耐度。当忍耐度降到0或者0以下时,xhd就不会玩这游戏。xhd还说了他最多只杀s只怪。请问他能

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓