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实现rest请求api示例
Apr 22 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
在Python中定义和使用抽象类的方法
Jun 30 Python
Python算法应用实战之队列详解
Feb 04 Python
Python+Turtle动态绘制一棵树实例分享
Jan 16 Python
Python  unittest单元测试框架的使用
Sep 08 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
django解决跨域请求的问题详解
Jan 20 Python
TensorFlow Saver:保存和读取模型参数.ckpt实例
Feb 10 Python
python自动化测试三部曲之unittest框架的实现
Oct 07 Python
python 实现IP子网计算
Feb 18 Python
Pytest allure 命令行参数的使用
Apr 18 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采集利器 Snoopy 试用心得
2011/07/03 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
php中{}大括号是什么意思
2013/12/01 PHP
PHP遍历数组的三种方法及效率对比分析
2015/02/12 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
javascript 字符串连接的性能问题(多浏览器)
2008/11/18 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
如何解决谷歌浏览器下jquery无法获取图片的尺寸
2015/09/10 Javascript
给before和after伪元素设置js效果的方法
2015/12/04 Javascript
学习JavaScript事件流和事件处理程序
2016/01/25 Javascript
深入理解jquery自定义动画animate()
2016/05/24 Javascript
Nodejs抓取html页面内容(推荐)
2016/08/11 NodeJs
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
Python基于numpy灵活定义神经网络结构的方法
2017/08/19 Python
PyTorch快速搭建神经网络及其保存提取方法详解
2018/04/28 Python
用Python实现读写锁的示例代码
2018/11/05 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
python默认参数调用方法解析
2020/02/09 Python
python实现mean-shift聚类算法
2020/06/10 Python
Python如何批量生成和调用变量
2020/11/21 Python
python利用appium实现手机APP自动化的示例
2021/01/26 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
英国银首饰公司:e&e Jewellery
2021/02/11 全球购物
《去年的树》教学反思
2014/04/11 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
费城故事观后感
2015/06/10 职场文书
驻村工作简报
2015/07/20 职场文书
搭建zabbix监控以及邮件报警的超级详细教学
2022/07/15 Servers