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 相关文章推荐
python算法学习之桶排序算法实例(分块排序)
Dec 18 Python
python使用内存zipfile对象在内存中打包文件示例
Apr 30 Python
python+matplotlib绘制旋转椭圆实例代码
Jan 12 Python
python批量复制图片到另一个文件夹
Sep 17 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
基于python的socket实现单机五子棋到双人对战
Mar 24 Python
Python 脚本实现淘宝准点秒杀功能
Nov 13 Python
flask框架蓝图和子域名配置详解
Jan 25 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
Oct 21 Python
python报错TypeError: ‘NoneType‘ object is not subscriptable的解决方法
Nov 05 Python
Django数据库迁移常见使用方法
Nov 12 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
PHP 编写大型网站问题集
2010/05/07 PHP
使用XDebug调试及单元测试覆盖率分析
2011/01/27 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
PHP的cURL库简介及使用示例
2015/02/06 PHP
php通过curl模拟登陆DZ论坛
2015/05/11 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
JS+CSS制作DIV层可(最小化/拖拽/排序)功能实现代码
2013/02/25 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
AngularJS $injector 依赖注入详解
2016/09/14 Javascript
Angular.JS实现无限级的联动菜单(使用demo)
2017/02/08 Javascript
Vue键盘事件用法总结
2017/04/18 Javascript
解决React Native端口号修改的方法
2017/07/28 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
基于js实现判断浏览器类型代码实例
2020/07/17 Javascript
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python实现登陆知乎获得个人收藏并保存为word文件
2015/03/16 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Django中多种重定向方法使用详解
2019/07/17 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
Python 列表的清空方式
2020/01/13 Python
tensorflow 变长序列存储实例
2020/01/20 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
HTML5之SVG 2D入门10—滤镜的定义及使用
2013/01/30 HTML / CSS
英国第二大营养品供应商:Vitabiotics
2016/10/01 全球购物
什么是用户模式(User Mode)与内核模式(Kernel Mode) ?
2014/07/21 面试题
应届生船舶驾驶求职信
2013/10/19 职场文书
怎样写演讲稿
2014/01/04 职场文书
升国旗演讲稿
2014/09/05 职场文书
工作简报怎么写
2015/07/21 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang