二维傅里叶变换的矩阵表示

  • 二维傅里叶变换公式
  • 二维傅里叶矩阵公式表达
    • 1. F(v,u)F(v,u)F(v,u) 为 R1×1R^{1\times1}R1×1 时
    • 2. F(v,u)F(v,u)F(v,u) 为 RNv×MuR^{N_v\times M_u}RNv​×Mu​ 时

说明: 做完了图像处理的实验报告,老师要求自己编二维傅里叶变换的算法,故不能用 Matlab 内置的 fft2 函数。循环求解会消耗大量的时间,考虑到 Matlab 的优势就在于矩阵运算,故有如下思考。
(如有笔误,欢迎指正;转载请通知作者并注明来源,谢谢亲噢~)

二维傅里叶变换公式

离散时间变量二维傅里叶变换(DFT)的原始公式为:
F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−j2π(xMu+yNv)F(u,v) = \sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)e^{-j2\pi(\frac{x}{M}u+\frac{y}{N}v)}F(u,v)=x=0∑M−1​y=0∑N−1​f(x,y)e−j2π(Mx​u+Ny​v)
傅里叶变换具有可分性,所以我们有
F(u,v)=∑y=0N−1e−j2πyNv∑x=0M−1f(x,y)e−j2πxMuF(u,v) = \sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}\sum_{x=0}^{M-1}f(x,y)e^{-j2\pi\frac{x}{M}u}F(u,v)=y=0∑N−1​e−j2πNy​vx=0∑M−1​f(x,y)e−j2πMx​u

二维傅里叶矩阵公式表达

我们可以将该式转换为矩阵表达的形式,这样可以方便我们进行代码编程(特别是 Matlab 编程)
由于 Matlab 显示图像的方式为:竖直向下为y轴正方向,而 f(x,y)f(x,y)f(x,y) 当中 xxx 的取值是对纵坐标进行检索,表示行的行数----这与我们潜意识认为的横轴,即水平方向为 xxx 轴方向的惯性思维不一致,故我做出如下改动
F(v,u)=∑y=0N−1e−j2πyNv∑x=0M−1f(y,x)e−j2πxMuF(v,u) = \sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}\sum_{x=0}^{M-1}f(y,x)e^{-j2\pi\frac{x}{M}u}F(v,u)=y=0∑N−1​e−j2πNy​vx=0∑M−1​f(y,x)e−j2πMx​u
即简单的调换一下变元的表达方式,本质计算上没有改变。

1. F(v,u)F(v,u)F(v,u) 为 R1×1R^{1\times1}R1×1 时

假设当 F(v,u)F(v,u)F(v,u) 为 R1×1R^{1\times1}R1×1 时,有如下推导
F(v,u)=∑y=0N−1e−j2πyNv[f(y,0)f(y,1)…f(y,M−1)]⋅[1e−j2π1Mue−j2π2Mu⋮e−j2πM−1Mu]F(v,u) =\sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}\begin{bmatrix}f(y,0)&f(y,1)&\dots&f(y,M-1)\end{bmatrix} ·\begin{bmatrix}1\\e^{-j2\pi\frac{1}{M}u}\\e^{-j2\pi\frac{2}{M}u}\\\vdots\\e^{-j2\pi\frac{M-1}{M}u}\end{bmatrix}F(v,u)=y=0∑N−1​e−j2πNy​v[f(y,0)​f(y,1)​…​f(y,M−1)​]⋅⎣⎢⎢⎢⎢⎢⎡​1e−j2πM1​ue−j2πM2​u⋮e−j2πMM−1​u​⎦⎥⎥⎥⎥⎥⎤​
其中
[f(y,0)f(y,1)…f(y,M−1)]⋅[1e−j2π1Mue−j2π2Mu⋮e−j2πM−1Mu]=R1×M⋅RM×1=R1×1\begin{bmatrix}f(y,0)&f(y,1)&\dots&f(y,M-1)\end{bmatrix} ·\begin{bmatrix}1\\e^{-j2\pi\frac{1}{M}u}\\e^{-j2\pi\frac{2}{M}u}\\\vdots\\e^{-j2\pi\frac{M-1}{M}u}\end{bmatrix}=R^{1\times M}·R^{M\times 1}=R^{1\times1 }[f(y,0)​f(y,1)​…​f(y,M−1)​]⋅⎣⎢⎢⎢⎢⎢⎡​1e−j2πM1​ue−j2πM2​u⋮e−j2πMM−1​u​⎦⎥⎥⎥⎥⎥⎤​=R1×M⋅RM×1=R1×1
故我们可以知道
f(y,x)⋅[1e−j2π1Mue−j2π2Mu⋮e−j2πM−1Mu]=RNy×Mx⋅RMx×1=RNy×1f (y,x)·\begin{bmatrix}1\\e^{-j2\pi\frac{1}{M}u}\\e^{-j2\pi\frac{2}{M}u}\\\vdots\\e^{-j2\pi\frac{M-1}{M}u}\end{bmatrix}=R^{N_y\times M_x}·R^{M_x\times 1}=R^{N_y\times1 }f(y,x)⋅⎣⎢⎢⎢⎢⎢⎡​1e−j2πM1​ue−j2πM2​u⋮e−j2πMM−1​u​⎦⎥⎥⎥⎥⎥⎤​=RNy​×Mx​⋅RMx​×1=RNy​×1
所以,后续可推导为
∑y=0N−1e−j2πyNv=R1×Ny\sum_{y=0}^{N-1}e^{-j2\pi\frac{y}{N}v}=R^{1\times N_y} y=0∑N−1​e−j2πNy​v=R1×Ny​
即可完成当 F(u,v)F(u,v)F(u,v) 为 R1×1R^{1\times1}R1×1 时的累加

2. F(v,u)F(v,u)F(v,u) 为 RNv×MuR^{N_v\times M_u}RNv​×Mu​ 时

我们此时可以直接通过矩阵乘法的维度准则来推导,这里采取的是逆向思维
RNv×Mu=RNv×?1⋅RNy×Mx⋅R?2×MuR^{N_v\times M_u}=R^{N_v\times ?1}·R^{N_y\times M_x}·R^{?2\times M_u}RNv​×Mu​=RNv​×?1⋅RNy​×Mx​⋅R?2×Mu​
很明显 ?1=Ny?1=N_y?1=Ny​ , ?2=Mx?2=M_x?2=Mx​
分别将
RNv×Ny=[111…11e−j2π1N1e−j2π2N1…e−j2πN−1N11e−j2π1N2e−j2π2N2…e−j2πN−1N2⋮⋮⋮e−j2πyNv⋮1e−j2π1N(N−1)e−j2π2N(N−1)…e−j2πN−1N(N−1)]R^{N_v\times N_y}=\begin{bmatrix} 1&1&1&\dots&1\\ 1&e^{-j2\pi\frac{1}{N}1}&e^{-j2\pi\frac{2}{N}1}&\dots&e^{-j2\pi\frac{N-1}{N}1}\\ 1&e^{-j2\pi\frac{1}{N}2}&e^{-j2\pi\frac{2}{N}2}&\dots&e^{-j2\pi\frac{N-1}{N}2}\\ \vdots&\vdots&\vdots&e^{-j2\pi\frac{y}{N}v}&\vdots\\ 1&e^{-j2\pi\frac{1}{N}(N-1)}&e^{-j2\pi\frac{2}{N}(N-1)}&\dots&e^{-j2\pi\frac{N-1}{N}(N-1)} \end{bmatrix}RNv​×Ny​=⎣⎢⎢⎢⎢⎢⎡​111⋮1​1e−j2πN1​1e−j2πN1​2⋮e−j2πN1​(N−1)​1e−j2πN2​1e−j2πN2​2⋮e−j2πN2​(N−1)​………e−j2πNy​v…​1e−j2πNN−1​1e−j2πNN−1​2⋮e−j2πNN−1​(N−1)​⎦⎥⎥⎥⎥⎥⎤​
RMx×Mu=[111…11e−j2π1M1e−j2π1M2…e−j2π1M(M−1)1e−j2π2M1e−j2π2M2…e−j2π2M(M−1)⋮⋮⋮e−j2πxMu⋮1e−j2πM−1M1e−j2πM−1M2…e−j2πM−1M(M−1)]R^{M_x\times M_u}=\begin{bmatrix} 1&1&1&\dots&1\\ 1&e^{-j2\pi\frac{1}{M}1}&e^{-j2\pi\frac{1}{M}2}&\dots&e^{-j2\pi\frac{1}{M}(M-1)}\\ 1&e^{-j2\pi\frac{2}{M}1}&e^{-j2\pi\frac{2}{M}2}&\dots&e^{-j2\pi\frac{2}{M}(M-1)}\\ \vdots&\vdots&\vdots&e^{-j2\pi\frac{x}{M}u}&\vdots\\ 1&e^{-j2\pi\frac{M-1}{M}1}&e^{-j2\pi\frac{M-1}{M}2}&\dots&e^{-j2\pi\frac{M-1}{M}(M-1)} \end{bmatrix}RMx​×Mu​=⎣⎢⎢⎢⎢⎢⎡​111⋮1​1e−j2πM1​1e−j2πM2​1⋮e−j2πMM−1​1​1e−j2πM1​2e−j2πM2​2⋮e−j2πMM−1​2​………e−j2πMx​u…​1e−j2πM1​(M−1)e−j2πM2​(M−1)⋮e−j2πMM−1​(M−1)​⎦⎥⎥⎥⎥⎥⎤​
然后通过 Matlab 特有的矩阵乘法进行编程即可。

二维傅里叶变换的矩阵表示相关推荐

  1. MATLAB作二维傅里叶变换所需要注意和知道的东西(im2double、fft2、abs、imshow、二维傅里叶变换的物理意义)

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 代码如下,这个代码是实现灰度图像作二维傅里叶变换 ...

  2. 二维傅里叶变换是怎么进行的?

    1.首先回顾一下一维FT 通俗来讲,一维傅里叶变换是将一个一维的信号分解成若干个三角波. 对于一个三角波而言,需要三个参数来确定它:频率,幅度 A ,相位.因此在频域中,一维坐标代表频率,而每个坐标对 ...

  3. 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换

    2维FFT算法实现--基于GPU的基2快速二维傅里叶变换 上篇讲述了一维FFT的GPU实现(FFT算法实现--基于GPU的基2快速傅里叶变换),后来我又由于需要做了一下二维FFT,大概思路如下. 首先 ...

  4. matlab极坐标下的二维傅里叶变换_形象理解二维傅里叶变换

    公众号关注 "DL-CVer" 设为 "星标",DLCV消息即可送达! 来自 | 知乎  作者 | 阿姆斯特朗 链接 | https://zhuanlan.zh ...

  5. Matlab:二维傅里叶变换

    Matlab:二维傅里叶变换 二维傅里叶变换 二维衍射模式 fft2 函数将二维数据变换为频率空间.例如,您可以变换二维光学掩膜以揭示其衍射模式. 二维傅里叶变换 以下公式定义 m×n 矩阵 X 的离 ...

  6. 形象理解二维傅里叶变换

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 来自 | 知乎  作者 | 阿姆斯特朗 链接 | https:// ...

  7. 使用matlab对图像进行二维傅里叶变换

    这学期选了<图像工程基础>这门课,课上老师留了一个作业:对图像进行二维傅里叶变换. 现在我使用matlab解决这个问题 1.实验基本指令 首先我试了一下matlab图像处理的基本指令 原图 ...

  8. Matlab实现频域滤波——二维傅里叶变换、低通、高通

    目录 1.二维傅里叶变换 1.1二维傅里叶变换定义 1.2性质 2.低通滤波器 2.1理想低通滤波器 3.高通 1.二维傅里叶变换 1.1二维傅里叶变换定义 首先通过傅里叶变换将图像从空间域转换为频率 ...

  9. 二维傅里叶变换频谱图的直观理解

    众所周知:频谱中心代表低频,四周代表高频. 问:那(u,v)一点代表什么? 答: 1.当为水平方向的正弦图片时,二维傅里叶变换后,其只有u方向的频谱值: 2.当为垂直方向的正弦图片是,二维傅里叶变换后 ...

  10. 图像的傅里叶变换,二维傅里叶变换的物理意义

    从现代数学的眼光来看,傅里叶变换是一种特殊的积分变换.它能将满足一定条件的某个函数表示成正弦基函数的线性组合或者积分.在不同的研究领域,傅里叶变换具有多种不同的变体形式,如连续傅里叶变换和离散傅里叶变 ...

最新文章

  1. 在asp.net中读取XML文件信息的4种方法
  2. php(wamp安装问题)
  3. SQL2005的库能不转成SQL2000的?
  4. php指定异常状态码,php怎么设置状态码
  5. 无基础人员转行做机器学习可以吗?
  6. 线程死锁 解决共享资源问题
  7. Linux16.04安装Matlab2016b详细教程
  8. java大量浮点数如何作比较,Java如何正确比较浮点数
  9. c++ 多线程 垃圾回收器_并行并发CMS垃圾回收器:-XX:+UseConcMarkSweepGC
  10. centos 6.3最小化安装,无法上网解决方法
  11. 舍选法抽样matlab,舍选抽样法.PPT
  12. jquery滑动效果及事件切换
  13. java中怎么把数字打印在屏幕上_java中如何打印出蜗牛形状的数字
  14. 2016年上半年数据库系统工程师上午真题
  15. java64字节指令包,JVM 字节码指令解析
  16. 差分管电路图_差分放大器的非线性应用
  17. python爬取公众号
  18. groovy使用场景
  19. rap技术原理_那些你可能没有听到的技术特色Rap
  20. 电子元件-TVS与肖特基二极管

热门文章

  1. 高精度三维扫描仪用于运动鞋逆向建模
  2. 接了几个APP逆向的私活,赚爆了!
  3. java遍历文件夹_java中File类应用遍历文件夹下所有文件
  4. 局域网SDN技术硬核内幕 一 分布式任意播网关
  5. 宏观视角看抖音全生态
  6. 回顾过去三年工作中对区块链技术的一点心得
  7. java人民币金额大写_Java人民币金额数字转换成大写
  8. 100以内的奇数和是多少,问一下100以内的奇数和偶数分别相加起来和是多少?
  9. 蓝桥杯嵌入式——TIM
  10. python代码怎么保存为pdf_如何在Selenium(Python)中将打开的页面保存为pdf