使用 matlab 数字图像处理(七)—— 频率域处理
二维离散傅里叶变换
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)=\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)=\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 的周期性和对称性,可以做以下总结:
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 数字图像处理(七)—— 频率域处理相关推荐
- 第4章 Python 数字图像处理(DIP) - 频率域滤波10 - 使用低通频率域滤波器平滑图像 - 理想、高斯、巴特沃斯低通滤波器
目录 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 高斯低通滤波器(GLPF) 巴特沃斯低通滤波器 低通滤波的例子 使用低通频率域滤波器平滑图像 理想低通滤波器(ILPF) 在以原点为中心 ...
- c++ opencv数字图像处理:频率域滤波--低通滤波--理想低通滤波
文章目录 前言 一.理想低通滤波器(ILPF) 二.代码 三.说明 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.理想低通滤波器(ILPF) 通过设置频率半 ...
- python数字图像处理(四) 频率域滤波
import matplotlib.pyplot as plt import numpy as np import cv2 %matplotlib inline 首先读入这次需要使用的图像 img = ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波12 - 选择性滤波 - 带阻
目录 选择性滤波 带阻滤波器和带通滤波器 陷波滤波器 选择性滤波 处理特定的频带的滤波器称为频带滤波器 带阻滤波器: 若某个频带中的频率被滤除 带通滤波器: 若某个频带中的频率被通过 处理小频率矩形区 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波11 - 使用高通滤波器锐化图像
目录 使用高通滤波器锐化图像 由低通滤波器得到理想.高斯和巴特沃斯高通滤波器 指纹增强 频域中的拉普拉斯 钝化掩蔽.高提升滤波和高频强调滤波 同态滤波 使用高通滤波器锐化图像 由低通滤波器得到理想.高 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波6 - 二维DFT和IDFT的一些性质 - 平移和旋转、周期性、对称性
目录 二维DFT和IDFT的一些性质 空间间隔和频率间隔的关系 平移和旋转 周期性 对称性 二维DFT和IDFT的一些性质 空间间隔和频率间隔的关系 Δu=1MΔT(4.69)\Delta u = \ ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波5 - 二变量函数的傅里叶变换、图像中的混叠、二维离散傅里叶变换及其反变换
目录 二变量函数的傅里叶变换 二维冲激及其取样性质 二维连续傅里叶变换对 二维取样和二维取样定理 图像中的混叠 二维离散傅里叶变换及其反变换 二变量函数的傅里叶变换 二维冲激及其取样性质 两个连续变量 ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波2 - 复数、傅里叶级数、连续单变量函数的傅里叶变换、卷积
目录 基本概念 复数 傅里叶级数 冲激函数及其取样(筛选)性质 连续单变量函数的傅里叶变换 卷积 基本概念 复数 复数CCC的定义为 C=R+jI(4.3)C = R + jI \tag{4.3}C= ...
- 第4章 Python 数字图像处理(DIP) - 频率域滤波1 - 傅里叶级数和变换简史
本章主要讲解频域域滤波的技术,主要技术用到是大家熟悉的傅里叶变换与傅里叶反变换.这里有比较多的篇幅讲解的傅里叶的推导进程,用到Numpy傅里叶变换.本章理论基础比较多,需要更多的耐心来阅读,有发现有错 ...
- c++ opencv数字图像处理:频率域滤波--高通滤波--高斯高通滤波
文章目录 前言 一.高斯高通滤波器(GHPF) 二.代码 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一.高斯高通滤波器(GHPF) D 2 ( u , v ...
最新文章
- Python Qt GUI设计:QSpinBox计数器类(基础篇—15)
- iOS黑科技之(CoreImage)静态人脸识别(一)
- 将十进制数转化成二进制数,计算其中1的个数
- 034_ JDK的Enumeration接口
- json2jsoncpp 关键代码分析1
- 取得NSDate实例各个字段的数字
- Apache Nifi 入门与进阶 GitChat连接
- JAVA8后接口的新特性
- 节点name在graph中无法展示_图节点分类与消息传递
- 25 PP模块-创建工厂日历报错-请输入年度xxxx和xxxx之间的有效区域
- cmake编译安装MySQL5.5.32
- hue集成mysql报错_CDH5.7Hue使用sqoop导出mysql数据报错
- 还不会回答Spring Boot和Spring MVC的关系?大厂Java高级面试官告诉你答案!
- 易筋SpringBoot 2.1 | 第廿五篇:SpringBoot之Jedis访问Redis
- 给div添加蒙版(遮罩?)
- 苹果电脑如何快速清理废纸篓?
- stripe海外支付php教程
- 91-Lucene+ElasticSeach核心技术
- python牛顿法算立方根_使用牛顿法迭代求平方根与立方根
- cad 切图_CAD如何绘制并标注剖切图
热门文章
- 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思,借鉴 然后自己借鉴出来
- python可以参加哪些竞赛_找出Python竞赛中可达到的分数的程序
- 在局域网访问_Jupyter notebook设置局域网访问方法
- JavaScript(二)数据类型
- ue4蓝图运行顺序_UE4蓝图解析(四)
- 对电机油冷分析_【外文解读】电动汽车转子油冷电机
- qt截图怎样实现橡皮擦_利用QT实现截屏的四种方法
- oracle在进行跨库访问时,采用dblink实现
- Javascript深入理解构造函数和原型对象
- Bin Packing 装箱问题——NPH问题的暴力枚举 状压DP