数字图像处理中的傅立叶变换

news/2024/7/21 7:50:55 标签: 图像处理, fft, 算法
 

二维Fourier变换的应用

前面已经提到了Fourier变换有两个好处,即:可以获得信号的频域特性;可以将卷积运算转换为乘积运算。

因此二维Fourier变换的应用也是根据这两个特点来进行的。

在图像滤波中的应用

首先,我们来看Fourier变换后的图像,中间部分为低频部分,越靠外边频率越高。因此,我们可以在Fourier变换图中,选择所需要的高频或是低频滤波。

在图像压缩中的应用

变换系数刚好表现的是各个频率点上的幅值。在小波变换没有提出时,用来进行压缩编码。

考虑到高频反映细节、低频反映景物概貌的特性。往往认为可将高频系数置为0,骗过人眼。

在卷积运算中的应用

从前面的图像处理算法中知道,如果抽象来看,其实都可以认为是图像信息经过了滤波器的滤波(如:平滑滤波、锐化滤波等 )。

如果滤波器的结构比较复杂时,直接进行时域中的卷积运算是不可思议的。

Fourier 变换可以卷积运算转换为点乘运算,由此简化运算,提高计算速度。
 
图像的傅立叶变换,原始图像由N行N列构成,N必须是基2的,把这个N*N个包含图像的点称为实部,另外还需要N*N个点称为虚部,因为FFT是基于复数的,如下图所示:



计算图像傅立叶变换的过程很简单:首先对每一行做一维FFT,然后对每一列做一维FFT。具体来说,先对第0行的N个点做FFT(实部有值,虚部为0),将FFT输出的实部放回原来第0行的实部,FFT输出的虚部放回第0行的虚部,这样计算完全部行之后,图像的实部和虚部包含的是中间数据,然后用相同的办法进行列方向上的FFT变换,这样N*N的图像经过FFT得到一个N*N的频谱。

下面展示了一副图像的二维FFT变换:


频域中可以包含负值,图像中灰色表示0,黑色表示负值,白色表示正值。可以看到4个角上的黑色更黑,白色更白,表示其幅度更大,其实4个角上的系数表示的是图像的低频组成部分,而中心则是图像的高频组成部分。除此以外,FFT的系数显得杂乱无章,基本看不出什么。


将上述直角坐标转换为极坐标的形式,稍微比较容易理解一点,幅度中4个角上白色的区域表示幅度较大,而相位中高频和低频基本看不出什么区别来。


上述以一种不同的方法展示了图像频谱,它将低频部分平移到了频谱的中心。这个其实很好理解,因为经2D-FFT的信号是离散图像,其2D-FFT的输出就是周期信号,也就是将前面一张图周期性平铺,取了一张以低频为中心的图。将原点放在中心有很多好处,比如更加直观更符合周期性的原理,但在这节中还是以未平移之前的图来解释。

行N/2和列N/2将频域分成四块。对实部和幅度来说,右上角和左下角成镜像关系,左上角和右下角也是镜像关系;对虚部和相位来说,也是类似的,只是符号要取反,这种对称性和1维傅立叶变换是类似的,你可以往前看看。




为简单起见,先考虑4*4的像素,右边是其灰度值,对这些灰度值进行2维fft变换。


h和k的范围在-N/2到N/2-1之间。


通常I(n,m)是实数,F(0,0)总是实数,并且F(h,k)具有对偶性。

如果写成指数形式,即:


--------------------------------
图像傅立叶变换的物理意义



如果只保留靠近中心的幅度,则图像的细节丢失,但是不同区域还是有着不同灰度。


如果保留的是远离中心的幅度,则图像的细节可以看得出,但是不同区域的灰度都一样了。



考虑一个黑色矩形的傅立叶变换,这个黑色矩形的背景为白色。


如果对频域中垂直方向高频分量进行截断,则图像中黑白将不那么分明了,表现为振荡。



可以得出结论:
傅立叶变换系数靠近中心的描述的是图像中慢变化的特性,或者说灰度变换比较缓慢的特性(频率比较慢的部分);
傅立叶变换系数远离中心的描述的是图像中快变化的特性,或者说灰度变换比较剧烈的特性(频率比较快的部分)。

--------------------------------
傅立叶变换相位所含的信息
有两幅图像,如果用第一幅图像傅立叶变换的幅度和第二幅图像傅立叶变换的相位做反变换得到的图像是什么样子的?如果反过来,将第一幅图像的相位和第二幅图像的幅度做反变换得到的图像又是什么样子的?

这里再用1维傅立叶变换解释一下:

在1维傅立叶变换中,可以看到相位包含了边沿何时出现的信息!在图像的傅立叶变换中也一样,相位决定了图像的边沿,所以决定了图像中你看到物体的样子!
关于相位所含的信息,你可以这样理解:
边沿的形成是当很多正弦波上升沿都发生在同一时刻,也就是这些正弦波的相位是相同的时刻,所以相位所含的信息决定了边沿所发生的位置,而正是边沿决定了图像的样子。
这个就是图像信号和声音信号的一个区别,声音信号的信息多数都包含在其傅立叶变换的幅度中,即不同频率幅度的大小,就是说你听到什么声音取决于你听到什么样的频率的信号,而对于这些信号时什么时候发生的并不十分重要。


http://www.niftyadmin.cn/n/791114.html

相关文章

.NET Core 控制台应用程序尝试

问题:windows平台怎么运行.net core控制台 解决一:.net core跨平台,控制台在生成后并不会生成exe文件 直接在生成目录启用cmd,或者直接cd到相应目录 start dotnet 你的控制台名字.dll 问题: 强制生成exe文件 在控制台项目管理…

UINavigationController 、UINavigationBar 、UINavigationItem 超清晰直观详解

UINavigationController 部分 1、 UINavigationController 是一个容器类。里面盛放的是UIViewController。 容器的意思是,如果你不放入UIViewController,里面就是空的,什么也没有。 这个容器在管理UIViewController时,遵循栈管理的…

更新 apk 遇到错误“已安装存在签名冲突***”

打开已经下载的APK Intent intent new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setAction(android.content.Intent.ACTION_VIEW);intent.setDataAndType(Uri.fromFile(new File(apkPath)),"application/vnd.android.package-archive");mCo…

F2BPM作流引擎系列索引

索引如下F2工作流引擎遵循参考WFCM标准规范,符合中国国情特色,更轻量级的工作流引擎,支持多种数据库(mmsqlserver,mysql,oracle),有强大智能的组织模型接口可快速应用到任何基于.net管理系统,实…

使用NSSM把.Net Core部署至 Windows 服务

为什么部署至Windows Services 在很多情况下,很少会把.Net Core项目部署至Windows服务中,特别是Asp.net Core就更少了。一般情况下,Asp.net Core会部署至linux服务器,或者部署至Windows的IIS中。但也不排除会有Asp.net Core部署至…

如何在JavaScript里防止事件函数的高频触发和调用

网页中JavaScript最基本的功能是监听或响应用户的动作,这非常的有用。用户的动作有些频率非常高,有的十分罕见。有些监听器函数的执行如闪电般完成,而有些繁重的会把浏览器拖死。拿浏览器窗口的resize事件来说,这种事件会在浏览器…

【小笔记】.net Core 项目未找到类或者命名空间 ConfigurationBuilder

开始我的测试项目是.net core2.1 由于项目需要引用mysql.data.dll,在引用后就出现了“项目未找到类或者命名空间 ConfigurationBuilder” 个人以为是mysql.data.dll对2.1的支持问题,在更改项目版本为core 2.0后 仍然存在问题。 查找说在project.josn …