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 链接和操作 memcache方法
Mar 04 Python
python3使用requests模块爬取页面内容的实战演练
Sep 25 Python
python实现windows下文件备份脚本
May 27 Python
python实现一组典型数据格式转换
Dec 15 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
Jan 02 Python
Python使用LDAP做用户认证的方法
Jun 20 Python
python实现ip代理池功能示例
Jul 05 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
详解Python类和对象内容
Jun 22 Python
python实现简单聊天功能
Jul 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
几种显示数据的方法的比较
2006/10/09 PHP
php将时间差转换为字符串提示
2011/09/07 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
PHP中list()函数用法实例简析
2016/01/08 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
不用写JS也能使用EXTJS视频演示
2008/12/29 Javascript
jquery 上下滚动广告
2009/06/17 Javascript
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
Jquery右下角抖动、浮动 实例代码(兼容ie6、FF)
2013/08/15 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
js无提示关闭浏览器窗口的两种方法分析
2016/11/06 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
ReactNative踩坑之配置调试端口的解决方法
2017/07/28 Javascript
node.js实现微信JS-API封装接口的示例代码
2017/09/06 Javascript
vue-devtools的安装步骤
2018/04/23 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
2019/02/25 Javascript
微信小程序引入模块中wxml、wxss、js的方法示例
2019/08/09 Javascript
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
基于python的七种经典排序算法(推荐)
2016/12/08 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Python 字符串与数字输出方法
2018/07/16 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
用python做游戏的细节详解
2019/06/25 Python
python生成随机红包的实例写法
2019/09/02 Python
使用python将微信image下.dat文件解密为.png的方法
2020/11/30 Python
舒适的豪华鞋:Taryn Rose
2018/05/03 全球购物
工厂门卫的岗位职责
2014/07/27 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
小学中队委竞选稿
2015/11/20 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏