DFT及HF的实现

1 DFT(离散傅里叶变换)的实现

1.1 DFT(离散傅里叶变换)的定义及原理

对于基于图像的傅里叶变换(二维离散傅里叶变换)的过程如下:首先对于每一行都做一维的傅里叶变换,然后对于每一列做一维的傅里叶变换。具体来说,先对于第1行的N个点做傅里叶变换(实部有值,虚部为0),将变换输出的实部放回原来第1行的实部,将输出的虚部放回第1行的虚部,这样计算完成全部的行之后,图像的实部和虚部包含的是中间数据,然后用相同的办法进行列方向上的相同的傅里叶变换,这样大小为MN的图像经过DFT就得到了一个MN的频谱(图片)。同时,根据快速傅里叶变换的计算要求,需要图像的行数、列数均满足2的n次方,如果不满足,在计算傅里叶变换之前先要对图像补零以满足2的n次方的要求。
对于一个M*N的图像f(x,y),其二维离散傅里叶变化(DFT)公式如下:

实际的计算中,我们将上式分解为以下的两部分进行计算,先计算F(x,v),再由其计算得到最终的F(u,v):

1.2 DFT(离散傅里叶变换)的代码实现

按照1.1小节的流程使用python进行代码的编写,具体代码见附件中的DFT_mself.py文件。主要流程是:1.计算变换矩阵;2.将赋值取对数加一;3.将对数频谱进行中心化。

1.3 实验结果

本小节对于所有的4张图片进行DFT变换,并将自己编写的DFT结果与python中numpy库中自带的二维傅里叶变换函数np.fft.fft2的结果进行比较。通过观察,我自己的编写的DFT函数的结果和numpy中自带的函数的FFT结果的效果几乎完全相同。其具体的实验结果如下:
图片一结果:

通过观察可以发现,经过傅里叶变换后,频域图的中间有一条很亮的竖线,其在原图中代表着水平方向的纹理,由于水平方向的纹理较强(但是较稀疏),所以频域中的竖线较亮;在频域图的水平方向有三条比较亮的线,其对应着原图竖直方向的几条亮线。
图片二结果:

通过观察可以发现,图二的竖直方向的纹理相比于图一来说更强更密集,而且分布更广,所以在频域图中的水平方向显示出来的亮度以及幅值都相比于图一更强。 在原图的水平方向的纹理没有图片一那么明显,所以在频域中的竖直方向幅值更低且分布的较为集中。
图片三结果:

因为在频谱图中,中心点代表着图片的原图的低频特征,或者说是,图片的灰度值变化较慢。所以在频谱图中相对于图片一和图片二,图片三的中间区域的亮度较高。仔细观察也可发现,在频谱图的中心附近的上下左右分别有一个点,在水平与竖直方向也分别有线,其对应于原图的黑白边缘的过渡部分。
图片四结果:

因为图片四的纹理较前三张图片较为复杂。所以在整个频谱图中的亮度较为均匀,在中心的亮度不是非常的突出,没有什么较为明显的特征。
通过实验可知,傅里叶变换系数靠近中心描述的是图像中慢变化的特性,或者说灰度变化比较缓慢的特性(频率比较慢的部分);傅里叶变换系数远离中心描述的是图像中快变化的特性,或者说灰度变换比较剧烈的特性(频率比较快的部分);频谱中水平方向的亮度(幅值),对应于原图中竖直方向的纹理变化;频谱中竖直方向的亮度(幅值),对应于原图中水平方向的纹理变化。

2 同态滤波的实现

2.1 同态滤波的定义及原理

同态滤波有一大作用是图像增强,其可以较好的去除乘性噪声,同时增加对比度以及标准化亮度,借此达到图像增强的目的。一副图像可以表示为其照度(illumination)分量和反射(reflectance)分量的乘积,虽然在时域上这两者是不可分离的,但是经由傅立叶转换两者在频域中可以线性分离。由于照度可视为环境中的照明,相对变化很小,可以看作是图像的低频成分;而反射率相对变化较大,则可视为高频成分。通过分别处理照度和反射率对像元灰度值的影响,通常是借由高通滤波器(high-pass filter),让图像的照明更加均匀,达到增强阴影区细节特征的目的。
其过程为,先将原图取对数并进行傅里叶变换变到频域中,在频域中与滤波函数相乘(这里滤波函数作用到还没有进行中心化的DFT上),再将结果进行傅里叶逆变换并取指数。同态的性质就是保持相关的属性不变,而同态滤波的好处是将原本复杂的运算转为效能相同但相对简单的运算。其整体流程如下图:

对于其中的滤波函数,对于此实验我们在图片一中使用了低通滤波函数降低高频亮度对于图片的影响;在图片二中使用了高通滤波函数进行图片的增强。

2.2 同态滤波的代码实现

按照2.1小节的流程使用python进行代码的编写,具体代码见附件中的hf_mself.py文件。主要流程是:1.原图取对数;2.进行傅里叶变换;3.在频谱中与滤波函数相乘进行滤波;4.进行傅里叶逆变换;5.取指数得到最终的结果。

2.3 实验结果

本小节对于所有两张图片进行同态滤波,其具体的实验结果如下:
图片一结果:


这里通过滤波,将整体的图像变暗,相比于原图,更好的突出了手指部分的纹理细节。通过观察滤波前和滤波后的频谱图(没有中心化),可以发现四角的区域(为低频区域,因为没有中心化)经过滤波后幅值变小,这样即在原图中减少了亮度。
图片二结果:



图片二通过滤波,将图片进行了亮度增强。将原图右上角的黑暗部分“显示”了出来。通过对比滤波前后的频谱图,可以发现在高频处的幅值有明显的提高,即增加了原图片的亮度,从而达到了比较好的效果。

2.4 使用自己的DCT函数与自带FFT函数的结果对比


通过观察,相同的图片和滤波函数,我自己的DCT相比较于numpy自带的fft2函数,效果基本一致。只是我自己的DCT函数处理后的图片亮度会高一些,这可能与离散傅里叶变换和快速傅里叶变换本身的算法有关,总体来说实现了相同的结果。

《数字图像处理》DFT(离散傅里叶变换)及HF(同态滤波)的实现相关推荐

  1. 【matlab 图像处理】离散傅里叶变换离散余弦变换K-L变换小波变换

    [matlab 图像处理]离散傅里叶变换&离散余弦变换&K-L变换&小波变换 正交变换是信号处理的一种有效工具.图像信号不仅可以在空间域表示,也可以在频域表示,后者将有利于许多 ...

  2. DFT 离散傅里叶变换

    DFT 离散傅里叶变换 latex公式在线编辑: https://www.latexlive.com/home## 公式: f ^ k = ∑ j = 0 n − 1 f j e ( − 2 π i ...

  3. 图像处理之离散傅里叶变换(DFT)

    上学期修了数字图像处理这门课程,想着正好趁这个机会写(shui)几篇文章,告诉自己没有白学.傅里叶变换,是图像处理中的一个重要内容,频率域处理的操作都要建立在傅里叶变换的基础上,所以作为这个专栏的开篇 ...

  4. 数字信号处理 --- 用离散傅里叶变换(循环卷积)实现线性卷积(个人学习笔记)

    时域的循环卷积等于频域的离散傅里叶变换,离散傅里叶变换DFT是离散傅里叶级数DFS的一个周期,离散傅里叶级数DFS是对连续时间傅里叶变换CTFT的采样 离散傅里叶级数DFS 周期为10的方波信号的傅里 ...

  5. SAR ADC系列2:DFT离散傅里叶变换

    目录 ADC动态性能仿真/测试平台 DFT:离散傅里叶分析 DFT的 Matlab 实现: 频谱泄露: 如何规避频谱泄露: ADC性能分析:DFT Cadence环境下的DFT分析实例: Matlab ...

  6. DFT离散傅里叶变换【针对工科生,基础版本】

    傅里叶分析告诉咱们任何周期信号都可以被表示成一组正弦(这里正弦包括余弦)函数的线性组合. 而离散傅里叶变换是想告诉咱们这些线性组合的各个分量的频率.幅值.还有相位. 那它是如何做到的呢? 首先我对两个 ...

  7. 【数字图像处理】秒懂傅里叶变换,仅需此文

    原文出处: 韩昊 1 2 3 4 5 6 7 8 9 10 作 者:韩 昊 知 乎:Heinrich 微 博:@花生油工人 知乎专栏:与时间无关的故事 谨以此文献给大连海事大学的吴楠老师,柳晓鸣老师, ...

  8. 数字图像处理课程实习——傅里叶变换与频域滤波

    本次实验的目标主要是为了为了学会使用傅里叶变换将图像由空间域变到频率域,并设计和使用理想低通滤波器.理想高通滤波器和巴特沃斯低通滤波器来对图像在频域范围进行处理,而后进行逆傅里叶变换,最终得到空间域里 ...

  9. 理解DFT(离散傅里叶变换)

    文章目录 DFT做什么? DFT怎么做到这个的呢? 详细查看配对过程 这个时候就可以把X数组画出来了 把得到X的公式明确一下 DFT的公式 是为了保留相位信息 如何解决相位问题 现在看看这个复数代表啥 ...

  10. 数字图像处理 --- 图像的傅里叶变换的频谱特征 二(方向性)

    图像傅里叶变换的频谱特征 二 很多人都不了解图像(二维)频谱中的每一点究竟代表了什么,有什么意义?      简而言之:二维频谱中的每一个点都是一个与之一一对应的二维正弦/余弦波. 5,方向性(dir ...

最新文章

  1. postfix邮箱服务
  2. 点云三角化之后还能贴图嘛_雪糕化了之后重新冷冻还能吃吗?宁波这个实验真相了!...
  3. CSS 实现 0.5px 边框线
  4. 大整数减法c语言_3.2 C语言运算符和表达式
  5. python程序中想使用正则表达式_如何在python中使用正则表达式提取每行中需要的信息...
  6. C++设计模式-Command命令模式
  7. “花书”的佐餐,你的线性代数笔记
  8. cuda 实现sift gpu_超原版速度110倍,针对PyTorch的CPU到GPU张量迁移工具开源
  9. 电视机魔百盒显示连接服务器失败,【当贝市场】魔百盒EPG主页加载不出来办法详解...
  10. 无水印好用Flash头像编辑器组件
  11. ime输入法android,创建输入法  |  Android 开发者  |  Android Developers
  12. unbuntu下载编译chromium
  13. 【jdk1.8特性】之Instant
  14. 武汉大学计算机系就业方向如何,武汉大学有什么王牌专业?它们的就业在哪些方向?...
  15. php实现阳历阴历互转的方法
  16. bzoj4453 cys就是要拿英魂!(后缀数组+单调栈+二分)
  17. vmware中调整ubuntu的磁盘大小
  18. Selenium 设置代理chrome
  19. Mac中的文件如何拷贝到硬盘中?
  20. 如何产生创业想法(3 个框架)

热门文章

  1. OSX: 禁止iCloud钥匙链?
  2. transform样式写盾牌
  3. 今夜明珠色,当随满月开。
  4. C语言联合体union详解与实例
  5. T-SQL Tips: 存储过程示例(典范)
  6. 糙得不行的Autojs好策阅读平台刷书
  7. PlayReadynbsp;Encryptnbsp;XAPnbsp;解密讨论
  8. Android进阶:RxJava2
  9. JavaScript异步(必考三座大山之三)——第四集:async-await
  10. 鸿蒙系统支持华为哪几款手机,鸿蒙系统终于来了!这几款华为手机可以升级