二维离散傅里叶变换

F(u,v)=∑x=0M−1∑y=0N−1f(x,y)e−i2π(ux/M+vy/N)f(x,y)=∑u=0M−1∑v=0N−1F(u,v)ei2π(ux/M+vy/N)

F(u,v)=\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)e^{-i2\pi(ux/M+vy/N)}\\ f(x,y)=\sum_{u=0}^{M-1}\sum_{v=0}^{N-1}F(u,v)e^{i2\pi(ux/M+vy/N)}

则频域原点的傅里叶变换 F(u,v)F(u,v) 为:

F(u,v)=∑x=0M−1∑y=0N−1f(x,y)

F(u,v)=\sum_{x=0}^{M-1}\sum_{y=0}^{N-1}f(x,y)

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

FFT(快速傅里叶变换)的必要性

FFT 相对 DFT 不是一种新的变换,而是对 DFT 的快速计算算法。

之所以提出快速傅里叶变换(FFT)方法,是因为在计算离散域上的傅里叶变换时,对于 NN 点序列,它的 DFT 变换与反变换对定义为:

F(u)=∑x=0N−1f(x)WuxN,u=0,1…,N−1,f(x)=1N∑u=0N−1F(u)W−uxN,x=0,1…,N−1

F(u)=\sum_{x=0}^{N-1}f(x)W_N^{ux},\;u=0,1\ldots,N-1,\\ f(x)=\frac1N\sum_{u=0}^{N-1}F(u)W_N^{-ux},\;x=0,1\ldots,N-1
其中 WN=e−j2πNW_N=e^{-j\frac{2\pi}N},

于是不难发现,计算每个 uu 值对应的 F(u)F(u) 需要 NN 次复数乘法和 N−1N-1 复数加法,因此为了计算长度为 NN 的序列的傅里叶变换,共需要执行 N2N^2 次复数加法和 N(N−1)N(N-1) 次复数加法。

事实上,在离散傅里叶变换的运算中有大量重复运算,变量 WNW_N 是一个复变量,实际上 WNW_N 只有 NN 个独立的值。而这 NN 个值也不是完全独立,它们具有一定的对称关系。关于变量 WNW_N 的周期性和对称性,可以做以下总结:

W0N=1,WN2N=−1WN+rN=WrN,WN2+rN=−WrN

W_N^0=1,\quad W_N^{\frac N2}=-1\\ W_N^{N+r}=W_N^r,\quad W_N^{\frac N2+r}=-W_N^r

上面的等式是 WW 矩阵中元素的某些特殊值,而下面的等式则说明了 WW 矩阵元素的周期性和对称性。利用 WNW_N 的周期性,DFT 运算中的某些项就可以合并,而利用 WNW_N 的对称性,则可以仅计算半个 WNW_N 序列。而根据这两点,就可以将一个长度为 NN 的序列分解成两个长度为 N/2N/2 的序列并分别计算 DFT,这样就可以节省大量的运算量。

N = 5;
W_N = exp(-j*2*pi/N);
W_N.^(0:9)

输出为:

1.0000 + 0.0000i   0.3090 - 0.9511i  -0.8090 - 0.5878i  -0.8090 + 0.5878i   0.3090 + 0.9511i1.0000 + 0.0000i   0.3090 - 0.9511i  -0.8090 - 0.5878i  -0.8090 + 0.5878i   0.3090 + 0.9511i

频域滤波的基本步骤

  • (1)计算原始图像 f(x,y)f(x,y) 的 DFT,得到 F(u,v)F(u,v)
  • (2)将频谱 F(u,v)F(u,v) 的零频点移动到频谱图的中心位置
  • (3)计算滤波器函数 H(u,v)H(u,v) 与 F(u,v)F(u,v) 的乘积 G(u,v)G(u,v)(时域的卷积等于频域的乘积
  • (4)将频谱 G(u,v)G(u,v) 的零频点移回到频谱图的左上角位置
  • (5)计算机步骤(4)的傅里叶反变换 g(x, y)
  • (6)取 g(x, y) 的实部作为最终滤波后的结果图像;

由上面的叙述易知,滤波能否取得成功的关键取决于频域滤波函数 H(u,v)H(u,v),常常称之为滤波器,或滤波器传递函数,因为它在滤波中抑制或滤除了频谱中某些频率的分量,而保留其他的一些频率不受影响。

如果滤波器的值只为实数,则进行频域滤波的时候,F⋅HF\cdot H(频域的乘积),HH 中的每一个实数元素分别乘以 FF 中对应位置的复数元素,从而使 FF 中元素的实部和虚部等比例的变化,不会改变 FF 的相位谱,这种滤波器因此也被称为“零相移”滤波器

使用 matlab 数字图像处理(七)—— 频率域处理相关推荐

  1. 第4章 Python 数字图像处理(DIP) - 频率域滤波10 - 使用低通频率域滤波器平滑图像 - 理想、高斯、巴特沃斯低通滤波器

    目录 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 高斯低通滤波器(GLPF) 巴特沃斯低通滤波器 低通滤波的例子 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 在以原点为中心 ...

  2. c++ opencv数字图像处理:频率域滤波--低通滤波--理想低通滤波

    文章目录 前言 一.理想低通滤波器(ILPF) 二.代码 三.说明 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.理想低通滤波器(ILPF) 通过设置频率半 ...

  3. python数字图像处理(四) 频率域滤波

    import matplotlib.pyplot as plt import numpy as np import cv2 %matplotlib inline 首先读入这次需要使用的图像 img = ...

  4. 第4章 Python 数字图像处理(DIP) - 频率域滤波12 - 选择性滤波 - 带阻

    目录 选择性滤波 带阻滤波器和带通滤波器 陷波滤波器 选择性滤波 处理特定的频带的滤波器称为频带滤波器 带阻滤波器: 若某个频带中的频率被滤除 带通滤波器: 若某个频带中的频率被通过 处理小频率矩形区 ...

  5. 第4章 Python 数字图像处理(DIP) - 频率域滤波11 - 使用高通滤波器锐化图像

    目录 使用高通滤波器锐化图像 由低通滤波器得到理想.高斯和巴特沃斯高通滤波器 指纹增强 频域中的拉普拉斯 钝化掩蔽.高提升滤波和高频强调滤波 同态滤波 使用高通滤波器锐化图像 由低通滤波器得到理想.高 ...

  6. 第4章 Python 数字图像处理(DIP) - 频率域滤波6 - 二维DFT和IDFT的一些性质 - 平移和旋转、周期性、对称性

    目录 二维DFT和IDFT的一些性质 空间间隔和频率间隔的关系 平移和旋转 周期性 对称性 二维DFT和IDFT的一些性质 空间间隔和频率间隔的关系 Δu=1MΔT(4.69)\Delta u = \ ...

  7. 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换

    目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...

  8. 第4章 Python 数字图像处理(DIP) - 频率域滤波2 - 复数、傅里叶级数、连续单变量函数的傅里叶变换、卷积

    目录 基本概念 复数 傅里叶级数 冲激函数及其取样(筛选)性质 连续单变量函数的傅里叶变换 卷积 基本概念 复数 复数CCC的定义为 C=R+jI(4.3)C = R + jI \tag{4.3}C= ...

  9. 第4章 Python 数字图像处理(DIP) - 频率域滤波1 - 傅里叶级数和变换简史

    本章主要讲解频域域滤波的技术,主要技术用到是大家熟悉的傅里叶变换与傅里叶反变换.这里有比较多的篇幅讲解的傅里叶的推导进程,用到Numpy傅里叶变换.本章理论基础比较多,需要更多的耐心来阅读,有发现有错 ...

  10. c++ opencv数字图像处理:频率域滤波--高通滤波--高斯高通滤波

    文章目录 前言 一.高斯高通滤波器(GHPF) 二.代码 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.高斯高通滤波器(GHPF) D 2 ( u , v ...

最新文章

  1. Python Qt GUI设计:QSpinBox计数器类(基础篇—15)
  2. iOS黑科技之(CoreImage)静态人脸识别(一)
  3. 将十进制数转化成二进制数,计算其中1的个数
  4. 034_ JDK的Enumeration接口
  5. json2jsoncpp 关键代码分析1
  6. 取得NSDate实例各个字段的数字
  7. Apache Nifi 入门与进阶 GitChat连接
  8. JAVA8后接口的新特性
  9. 节点name在graph中无法展示_图节点分类与消息传递
  10. 25 PP模块-创建工厂日历报错-请输入年度xxxx和xxxx之间的有效区域
  11. cmake编译安装MySQL5.5.32
  12. hue集成mysql报错_CDH5.7Hue使用sqoop导出mysql数据报错
  13. 还不会回答Spring Boot和Spring MVC的关系?大厂Java高级面试官告诉你答案!
  14. 易筋SpringBoot 2.1 | 第廿五篇:SpringBoot之Jedis访问Redis
  15. 给div添加蒙版(遮罩?)
  16. 苹果电脑如何快速清理废纸篓?
  17. stripe海外支付php教程
  18. 91-Lucene+ElasticSeach核心技术
  19. python牛顿法算立方根_使用牛顿法迭代求平方根与立方根
  20. cad 切图_CAD如何绘制并标注剖切图

热门文章

  1. 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思,借鉴 然后自己借鉴出来
  2. python可以参加哪些竞赛_找出Python竞赛中可达到的分数的程序
  3. 在局域网访问_Jupyter notebook设置局域网访问方法
  4. JavaScript(二)数据类型
  5. ue4蓝图运行顺序_UE4蓝图解析(四)
  6. 对电机油冷分析_【外文解读】电动汽车转子油冷电机
  7. qt截图怎样实现橡皮擦_利用QT实现截屏的四种方法
  8. oracle在进行跨库访问时,采用dblink实现
  9. Javascript深入理解构造函数和原型对象
  10. Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP