图像傅里叶变换:从空域转换到频域(包含频谱图分析、简单带阻滤波器理解)
2021年10月21日10:24:05
占坑,这周五图像处理课讲完PPT后填。
2021年10月22日21:07:55 -> 讲课完毕
数字图像处理、图像恢复,噪声去除PPT
图像处理课课件,包含图像恢复、噪声去除部分内容及相关注解
链接: https://pan.baidu.com/s/1wBfXM0ZrSw3O221GUShVtw 密码: 424w
--来自百度网盘超级会员V5的分享
分割线
说明:在准备课件上台讲解的时候,为去除周期性噪声,需在频域上进行操作;所以在网上查看了许多视频博客知乎等,有了初步的理解,现在将收集的资料整理出来,并发布到博客,在网上参考的地方,我会一一给出参考,方便其它同学快速理解将图像从空域到频域转换的这个过程,也提供一些比较好的博文及视频,希望能对你有参考作用!
1、图像空域到频域的转换
以下内容来自BILIBILI的一个非常棒的视频:《P04 图像的快速傅里叶变换及其应用,作者:flybirdAI》
说明:图像和公式来自此视频中的截图,此视频讲的非常的好,清晰明了,对于空域到频域的转换,不涉及代码的话看前28分钟就足够了!
频域变换一般过程:
原图->DFT/FFT(正变换)->中心化->频域显示(处理)->去中心化->IDFT/IFFT(反变换)->原图
图像高频:亮度或灰度变化激烈的部分,如边缘和轮廓
图像低频:变化不大或变化较为平缓的地方,如大块的结构
DFT(离散傅里叶变换):Discrete Fourier transform
FFT(快速傅里叶变换):Fast Fourier transform
二维图像(M行N列)
正变换:
F ( u , v ) = ∑ x = 0 M − 1 ∑ y = 0 N − 1 f ( x , y ) e − j 2 π ( u x / M + v y / N ) F(u, v)=\sum_{x=0}^{M-1} \sum_{y=0}^{N-1} f(x, y) e^{-j 2 \pi(u x / M+v y / N)} F(u,v)=x=0∑M−1y=0∑N−1f(x,y)e−j2π(ux/M+vy/N)
反变换: f ( x , y ) = 1 M N ∑ u = 0 M − 1 ∑ v = 0 N − 1 F ( u , v ) e j 2 π ( u x / M + v y / N ) f(x, y)=\frac{1}{M N} \sum_{u=0}^{M-1} \sum_{v=0}^{N-1} F(u, v) e^{j 2 \pi(u x / M+v y / N)} f(x,y)=MN1u=0∑M−1v=0∑N−1F(u,v)ej2π(ux/M+vy/N)
其中下式为欧拉公式:
e j θ = cos ( θ ) + j sin ( θ ) e^{j \theta}=\cos (\theta)+j \sin (\theta) ejθ=cos(θ)+jsin(θ)
频域分析就是对F(u,v)进行操作:
由于共轭对称性:可对FFT变换的结果再进行FFT变换得到IFFT(I指的是反变换,IFFT反快速傅里叶变换,将图像从频域转换到空域)
注:傅里叶谱通过对log(1+F|(u,v)|)表示,另外自行频率分析时,也往往将频率窗口移动窗口中心处。
FFT还可以做卷积:
- 将图像和卷积模板都进行正变换到频率域
- 将两者在再频域直接进行相乘运算
- 再反变换到空间域作为输出
频域变换过程时刻牢记下图:
分割线
如果深入理解后,可以观看3Blue1Brown的视频:【官方双语】形象展示傅里叶变换
2、代码实现傅里叶变换
代码:【原文博客:python的numpy库和cv2库实现图像傅里叶变换】
# writer:wojianxinygcl@163.com# date : 2020.3.30 # 原文地址 : https://www.cnblogs.com/wojianxin/p/12530172.htmlimport cv2
import numpy as np
from matplotlib import pyplot as pltdef fft_cv(img):"""用cv进行傅里叶变换:param img::return:"""# 傅里叶变换dft = cv2.dft(np.float32(img), flags=cv2.DFT_COMPLEX_OUTPUT)dftshift = np.fft.fftshift(dft)res1 = 20 * np.log(cv2.magnitude(dftshift[:, :, 0], dftshift[:, :, 1]))# 傅里叶逆变换ishift = np.fft.ifftshift(dftshift)iimg = cv2.idft(ishift)res2 = cv2.magnitude(iimg[:, :, 0], iimg[:, :, 1])# 显示图像plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')plt.axis('off')plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('Fourier Image')plt.axis('off')plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('Inverse Fourier Image')plt.axis('off')plt.show()def fft_numpy(img):"""用numpy对图像进行傅里叶变换"""# 傅里叶变换f = np.fft.fft2(img)fshift = np.fft.fftshift(f)res = np.log(np.abs(fshift))# 傅里叶逆变换ishift = np.fft.ifftshift(fshift)iimg = np.fft.ifft2(ishift)iimg = np.abs(iimg)# 展示结果plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')plt.axis('off')plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image')plt.axis('off')plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image')plt.axis('off')plt.show()if __name__ == '__main__':# 读取图像img = cv2.imread('LENA256.BMP', 0) # 读取灰度图fft_numpy(img) # 使用numpy进行变换# fft_cv(img) # 使用cv进行变化
Lena标准测试图: https://pan.baidu.com/s/1FGAYFsNaPR7XuKbL6aTnhQ 密码: m19a
--来自百度网盘超级会员V5的分享
结果:
3、如何分析频谱图,知识点总结:
参考以下博客:
- 【傅里叶分析之掐死教程(完整版)更新于2014.06.06】
- 【通俗讲解:图像傅里叶变换】
- 【傅立叶变换频谱图怎么看?cccw的问题回答】
我的总结:
1.图2是转换到频域二维可视化的结果,称作频谱图
2.由于频谱动态范围很大,所以用log变换降低频谱的动态范围
3.图1为空域:f(x, y) , 图2为频域:H(u, v),中心化之后的结果,频谱图的正中心点为H(0,0),图像大小与原图相同
4.图1和图2相同位置的点没啥直接的对应关系,右边的每一个点可以理解为所描述的是一种平面波,它是构成左边图无数个波面中的一个,它与左边的每一个点都相关
一个曲面可以有很多个正弦平面波组成,二维正弦平面波,可以用以下4个参数来描述它:频率、幅度、相位、方向
所有波都可以用多个正弦波叠加;波又可以通过频率、幅值和方向来表示(频谱图中相位信息被舍弃)
5.图2中的每一个点:
它到中点的距离描述的是频率
中点到它的方向是构成平面波的方向
那一点的灰度值描述的是它的幅值
6.频谱图里面描述的信息有:频率f,振幅A,方向n
7.每一个频谱图中的点它不是实数,是一个虚数,a+bi,为二维可视化,计算的是它的绝对值
8.点点越亮代表这个数值越大,点点越暗代表这个数值越小(幅值的大小)
2021年11月02日16:35:09===========================带通/带阻滤波器===========================
带通/带阻滤波器
如下图所示,左图是被周期性正弦噪声所污染的图像,右图是去噪后的结果,想要在空域去除这样的噪声是很困难的,但是在频域上确能很轻松的进行操作。
带阻滤波器可以移除图像中特定的频率范围,从而很轻松的去除周期性噪声。
简单解释带阻滤波器以及带通滤波器:
- 带阻滤波器:带阻,阻就是阻止,阻止特定的频率范围通过
- 带通滤波器:带通,通就是通过,只允许特定的频率范围通过
由上简单的定义可知,带阻滤波器和带通滤波器可以相互转换,是一种互补的关系,带阻滤波器取反就是带通滤波器,带通滤波器取反就是带阻滤波器。
理想的带阻滤波器定义如下:
H ( u , v ) = { 1 if D ( u , v ) < D 0 − W 2 0 if D 0 − W 2 ≤ D ( u , v ) ≤ D 0 + W 2 1 if D ( u , v ) > D 0 + W 2 H(u, v)=\left\{\begin{array}{ll} 1 & \text { if } D(u, v)<D_{0}-\frac{W}{2} \\ 0 & \text { if } D_{0}-\frac{W}{2} \leq D(u, v) \leq D_{0}+\frac{W}{2} \\ 1 & \text { if } D(u, v)>D_{0}+\frac{W}{2} \end{array}\right. H(u,v)=⎩⎨⎧101 if D(u,v)<D0−2W if D0−2W≤D(u,v)≤D0+2W if D(u,v)>D0+2W
【参考博客】:数字图像处理与python实现-带通滤波器
带阻滤波器,如下图3(第二排第一个),理想的带阻滤波器的定义如上,D(u,v)为频域中任意一点到中心点的距离,D0代表带阻滤波器的半径(从中心到带阻滤波器第一个内圈和第一个外圈之间的中间位置),W代表带阻滤波器的带宽(内圈到外圈的距离),上述公式代表的就是带阻滤波器,含义就是带阻滤波器带宽范围内的部分:不允许它通过,带阻滤波器带宽范围外的地方保持不变,可视化的结果如下图3。
图像从上到下,从左到右分别表示图1:周期性正弦噪声污染的图像;图2:图1转换的频域的结果;图3:理想带阻滤波器;图4:在频域去除周期性噪声后转换到空域的结果
如何使用带阻滤波器
- 将图像1转换到频域,如图2,图1周期性正弦噪声在频域可视化的结果,表现在图2上就是围绕中心一圈分布均匀亮亮的8个小点点
- 去掉周期性噪声,就是去掉这些小点点
- 设计合适的带阻滤波器,如图3,黑色部分设为0,白色部分设为1,与图2的大小相同,两幅图像进行哈达玛积(对应点相乘)->得到结果(带阻滤波器带宽上的点都被置为0了,周期性噪声点在带宽内也被置为0,消除掉了)
- 然后将第三步去噪后的结果,通过IFFT反快速傅里叶变换还原到空域,得到最终结果图4
图像傅里叶变换:从空域转换到频域(包含频谱图分析、简单带阻滤波器理解)相关推荐
- 傅里叶变换 卷积定理 空域模板转换为频域模板
拉普拉斯锐化的模板为 0 -1 0 -1 5 -1 0 -1 0 由傅里叶卷积定理我们可以知道,空域模板中有一个频域模板与之相对应,现在空域中 左右两边同时进行傅里叶变换可得: 原理为: 结果为: ( ...
- matlab对图像频谱图分析,应用Matlab对图像信号进行频谱分析及滤波
应用Matlab对图像信号进行频谱分析及滤波 选取一张彩色图片,建议把像素设置成200*200,提取图像的灰度值,并显示出灰度图像:在图像中增加正弦噪声信号(自己设置几个频率的正弦信号),画出加入噪声 ...
- java 图像傅里叶变换_图像频域滤波与傅里叶变换
1.频率滤波 图像的空间域滤波:用各种模板直接与图像进行卷积运算,实现对图像的处理,这种方法直接对图像空间操作,操作简单.图像处理不仅可以在空间域进行还可以在频率域进行,把空间域的图像开窗卷积形式,变 ...
- 图像的二维傅里叶变换频谱图特点研究
一.先放一些相关的结论: 1.傅里叶变换的幅值称为傅里叶谱或频谱. 2.F(u)的零值位置与"盒状"函数的宽度W成反比. 3.卷积定理:空间域两个函数的卷积的傅里叶变换等于两个函数 ...
- 重温傅里叶--深入篇1--傅里叶级数与傅里叶变换的关系以及频谱图的介绍
在读本文前,请先大致浏览一下笔记篇里的东西,下面使用的符号及其意义都跟笔记篇里是一致的.笔记篇里记录的大都是基础的公式,教科书上都可以找到. (抱歉,刚发现有点小错误:在式(6-4)和式(11)里,积 ...
- MATLAB之时频域乐器信号的分析与处理
##MATLAB之时域及频域的乐器信号分析及处理 MATLAB之时域及频域的乐器信号分析及处理 前言 设计题目及要求 详细步骤 一.创建脚本,导入音频文件并播放 二.画出信号的时域波形 三.进行快速傅 ...
- matlab画傅立叶变换后相位谱,对一幅图像进行傅里叶变换后,包含频谱(也叫幅度谱)和相位谱两部分,请问那一部分更重要?...
对一幅图像进行傅里叶变换后,包含频谱(也叫幅度谱)和相位谱两部分,请问那一部分更重要? 更多相关问题 [判断题] 抗盐产品切换到中分时,生产线不需要酸洗. [判断题] 机械密封中的载荷系数不是越大越好 ...
- 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验
图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...
- opencv学 之图像傅里叶变换dft
一.前言 接触了图像的傅里叶变换,数学原理依旧不是很懂,因此不敢在这里妄言.下午用Opencv代码实现了这一变换,有一些经验心得 二.关键函数解析 2.1copyMakeBorder() 扩展图片尺寸 ...
最新文章
- mysql操作数字名称的schema时字符的逃逸问题
- 安装搭建kafka集群
- jbutton 数组创建 java_java-将JButton数组添加到JPanel(按钮不可见)
- TYVJ P1062 合并傻子 Label:环状dp
- Behave用户自定义数据类型
- [2019CSP多校联赛普及组第五周] 调度CPU (贪心)
- 【渝粤教育】 国家开放大学2020年春季 1260软件工程 参考试题
- PCL学习(三) SAC-IA 估记object pose
- 【Rollo的Python之路】Python 多进程 学习笔记 multiprocessing
- vue 离开页面时间_vue 前端页面无操作时,系统退出登录的定时器设计
- 漫画:如何给女朋友解释什么是系统可用性?| 技术头条
- CB Insight公布32家全球AI独角兽,中国10家入围
- 【解决】打印机只打印第一页纸的问题
- 关系型数据库管理系统(RDBMS)与非关系型数据库(NoSQL)之间的区别
- 大数据导论(2)——推动大数据发展主要的商业因素(业务架构、业务流程管理、通信技术、万物互联等)...
- Java 中 byte 类型初始化问题
- 如何更新 OpenStack 组件?- 每天5分钟玩转 OpenStack(161)
- excel中用正则匹配_Excel 使用正则表达式提取数据
- CF1132D Stressful Training
- Windows各版本符号表离线下载
热门文章
- 利用栈实现把十进制数转换为二进制至十六进制之间的任一进制数并输出的功能。(第二版)
- 如何删除电脑正在运行的文件。
- sim卡没坏但苹果手机无服务_苹果 iPhone 突然出现“无 SIM 卡,该怎么办?
- SQL中的字母的大小写转换
- 智能家居传感器:BME680--树莓派3B+ 搭配BME680的数据读取温湿度和气压。树莓派IIC BME680算法库 (未完成版本)
- MySQL笔记(黑马一)
- 程序员如何写出优雅的代码?
- 淘宝链接中的spm参数
- php allow furl open,如何阻止來自iframe的彈出窗口?
- matlab 排课表,TOMLAB课表编排问题