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生成指定尺寸缩略图的示例
May 07 Python
Python操作MySQL简单实现方法
Jan 26 Python
python分析apache访问日志脚本分享
Feb 26 Python
python 读取txt中每行数据,并且保存到excel中的实例
Apr 29 Python
python中验证码连通域分割的方法详解
Jun 04 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
Oct 30 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
Python适配器模式代码实现解析
Aug 02 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Django Auth用户认证组件实现代码
Oct 13 Python
Python通过字典映射函数实现switch
Nov 06 Python
pycharm实现猜数游戏
Dec 07 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中使用正则表达式进行查找替换
2013/06/13 PHP
PHP判断是否连接上网络的方法
2015/07/01 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
2020/04/06 PHP
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
基于javascript实现右下角浮动广告效果
2016/01/08 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
react-native中ListView组件点击跳转的方法示例
2017/09/30 Javascript
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
JavaScript多种图形实现代码实例
2020/06/28 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
[49:08]OpTic vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python访问系统环境变量的方法
2015/04/29 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
通过python 执行 nohup 不生效的解决
2020/04/16 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
2021/02/06 Python
HTML5和CSS3让网页设计提升到下一个高度
2009/08/14 HTML / CSS
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
世界排名第一的万圣节服装店:Spirit Halloween
2018/10/16 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
酒店执行总经理岗位职责
2013/12/15 职场文书
期中考试后的反思
2014/02/08 职场文书
物业管理专业自荐信
2014/07/01 职场文书
商场促销活动策划方案
2014/08/18 职场文书
优秀三好学生事迹材料
2014/08/31 职场文书
2014年外贸业务员工作总结
2014/12/11 职场文书
PyQt5 QThread倒计时功能的实现代码
2021/04/02 Python
python实现股票历史数据可视化分析案例
2021/06/10 Python
python实现简单的聊天小程序
2021/07/07 Python
nginx设置资源请求目录的方式详解
2022/05/30 Servers