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实现线程池的方法
Jun 30 Python
Python使用爬虫猜密码
Feb 19 Python
Python简单定义与使用字典dict的方法示例
Jul 25 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
numpy中loadtxt 的用法详解
Aug 03 Python
对python判断ip是否可达的实例详解
Jan 31 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
python实现的登录与提交表单数据功能示例
Sep 25 Python
解决使用python print打印函数返回值多一个None的问题
Apr 09 Python
使用OpenCV获取图片连通域数量,并用不同颜色标记函
Jun 04 Python
Python监听键盘和鼠标事件的示例代码
Nov 18 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 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设计模式之装饰者模式
2012/02/29 PHP
php 启动报错如何解决
2014/01/17 PHP
php使用gzip压缩传输js和css文件的方法
2015/07/29 PHP
js树形控件脚本代码
2008/07/24 Javascript
childNodes.length与children.length的区别
2009/05/14 Javascript
IE与Firefox在JavaScript上的7个不同写法小结
2009/09/14 Javascript
jquery 获取标签名(tagName)示例代码
2013/07/11 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
javascript浏览器窗口之间传递数据的方法
2015/01/20 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
javascript History对象原理解析
2020/02/17 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
Python实现的简单算术游戏实例
2015/05/26 Python
Python初学时购物车程序练习实例(推荐)
2017/08/08 Python
在Windows中设置Python环境变量的实例讲解
2018/04/28 Python
Python关于__name__属性的含义和作用详解
2020/02/19 Python
部署Django到阿里云服务器教程示例
2020/06/03 Python
玩转CSS3色彩
2010/01/16 HTML / CSS
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
这76道Java面试题及答案,祝你能成功通过面试
2016/04/16 面试题
工商治理实习生的自我评价
2014/01/15 职场文书
医生进修自我鉴定
2014/01/19 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
高中班级口号
2014/06/09 职场文书
技术股份合作协议书
2014/10/05 职场文书
鼋头渚导游词
2015/02/05 职场文书
2015年行政工作总结范文
2015/04/09 职场文书
学校中层领导培训心得体会
2016/01/11 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
SQL Server基本使用和简单的CRUD操作
2021/04/05 SQL Server
教你如何用python开发一款数字推盘小游戏
2021/04/14 Python
详细聊聊浏览器是如何看闭包的
2021/11/11 Javascript