python 图像的离散傅立叶变换实例


Posted in Python onJanuary 02, 2020

图像(MxN)的二维离散傅立叶变换可以将图像由空间域变换到频域中去,空间域中用x,y来表示空间坐标,频域由u,v来表示频率,二维离散傅立叶变换的公式如下:

python 图像的离散傅立叶变换实例

在python中,numpy库的fft模块有实现好了的二维离散傅立叶变换函数,函数是fft2,输入一张灰度图,输出经过二维离散傅立叶变换后的结果,但是具体实现并不是直接用上述公式,而是用快速傅立叶变换。结果需要通过使用abs求绝对值才可以进行可视化,但是视觉效果并不理想,因为傅立叶频谱范围很大,所以要用log对数变换来改善视觉效果。

在使用log函数的时候,要写成log(1 + x) 而不是直接用log(x),这是为了避开对0做对数处理。

另外,图像变换的原点需要移动到频域矩形的中心,所以要对fft2的结果使用fftshift函数。最后也可以使用log来改善可视化效果。

代码如下:

import numpy as np
import matplotlib.pyplot as plt

img = plt.imread('photo.jpg')

#根据公式转成灰度图
img = 0.2126 * img[:,:,0] + 0.7152 * img[:,:,1] + 0.0722 * img[:,:,2]

#显示原图
plt.subplot(231),plt.imshow(img,'gray'),plt.title('original')

#进行傅立叶变换,并显示结果
fft2 = np.fft.fft2(img)
plt.subplot(232),plt.imshow(np.abs(fft2),'gray'),plt.title('fft2')

#将图像变换的原点移动到频域矩形的中心,并显示效果
shift2center = np.fft.fftshift(fft2)
plt.subplot(233),plt.imshow(np.abs(shift2center),'gray'),plt.title('shift2center')

#对傅立叶变换的结果进行对数变换,并显示效果
log_fft2 = np.log(1 + np.abs(fft2))
plt.subplot(235),plt.imshow(log_fft2,'gray'),plt.title('log_fft2')

#对中心化后的结果进行对数变换,并显示结果
log_shift2center = np.log(1 + np.abs(shift2center))
plt.subplot(236),plt.imshow(log_shift2center,'gray'),plt.title('log_shift2center')

运行结果:

python 图像的离散傅立叶变换实例

python 图像的离散傅立叶变换实例

根据公式实现的二维离散傅立叶变换如下:

import numpy as np
import matplotlib.pyplot as plt
PI = 3.141591265
img = plt.imread('temp.jpg')

#根据公式转成灰度图
img = 0.2126 * img[:,:,0] + 0.7152 * img[:,:,1] + 0.0722 * img[:,:,2]

#显示原图
plt.subplot(131),plt.imshow(img,'gray'),plt.title('original')

#进行傅立叶变换,并显示结果
fft2 = np.fft.fft2(img)
log_fft2 = np.log(1 + np.abs(fft2))
plt.subplot(132),plt.imshow(log_fft2,'gray'),plt.title('log_fft2')

h , w = img.shape
#生成一个同样大小的复数矩阵
F = np.zeros([h,w],'complex128')
for u in range(h):
 for v in range(w):
  res = 0
  for x in range(h):
   for y in range(w):
    res += img[x,y] * np.exp(-1.j * 2 * PI * (u * x / h + v * y / w))
  F[u,v] = res
log_F = np.log(1 + np.abs(F))
plt.subplot(133),plt.imshow(log_F,'gray'),plt.title('log_F')

直接根据公式实现复杂度很高,因为是四重循环,时间复杂度为python 图像的离散傅立叶变换实例 ,所以实际用的时候需要用快速傅立叶变换来实现

以上这篇python 图像的离散傅立叶变换实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python3 replace()函数使用方法
Mar 19 Python
Python数据分析库pandas基本操作方法
Apr 08 Python
一份python入门应该看的学习资料
Apr 11 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
Jan 04 Python
解决在Python编辑器pycharm中程序run正常debug错误的问题
Jan 17 Python
新年快乐! python实现绚烂的烟花绽放效果
Jan 30 Python
Python3网络爬虫中的requests高级用法详解
Jun 18 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
详解Python中正则匹配TAB及空格的小技巧
Jul 26 Python
关于初始种子自动选取的区域生长实例(python+opencv)
Jan 16 Python
使用Django xadmin 实现修改时间选择器为不可输入状态
Mar 30 Python
Python获取指定网段正在使用的IP
Dec 14 Python
Python加密模块的hashlib,hmac模块使用解析
Jan 02 #Python
在win64上使用bypy进行百度网盘文件上传功能
Jan 02 #Python
pytorch实现onehot编码转为普通label标签
Jan 02 #Python
pytorch标签转onehot形式实例
Jan 02 #Python
Python socket聊天脚本代码实例
Jan 02 #Python
解决Pytorch训练过程中loss不下降的问题
Jan 02 #Python
Pytorch evaluation每次运行结果不同的解决
Jan 02 #Python
You might like
经典的PHPer为什么被认为是草根?
2007/04/02 PHP
一个php导出oracle库的php代码
2009/04/20 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
用Javascript评估用户输入密码的强度(Knockout版)
2011/11/30 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
jQuery插件windowScroll实现单屏滚动特效
2015/07/14 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
判断js的Array和Object的实现方法
2016/08/29 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
Bootstrap3 模态框使用实例
2017/02/22 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
在knockoutjs 上自己实现的flux(实例讲解)
2017/12/18 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
微信小程序实现音频文件播放进度的实例代码
2020/03/02 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
Python 安装 virturalenv 虚拟环境的教程详解
2020/02/21 Python
python邮件中附加文字、html、图片、附件实现方法
2021/01/04 Python
HTML5学习心得总结(推荐)
2016/07/08 HTML / CSS
TripAdvisor土耳其网站:全球知名旅行社区,真实旅客评论
2017/04/17 全球购物
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
招商业务员岗位职责
2013/12/16 职场文书
党员承诺书内容
2014/03/26 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
《落花生》教学反思
2016/02/16 职场文书
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
python 网络编程要点总结
2021/06/18 Python