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 23 Python
Pyhton中防止SQL注入的方法
Feb 05 Python
python字符串str和字节数组相互转化方法
Mar 18 Python
Python利用Beautiful Soup模块搜索内容详解
Mar 29 Python
解决python明明pip安装成功却找不到包的问题
Aug 28 Python
python装饰器练习题及答案
Nov 01 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
Python爬虫破解登陆哔哩哔哩的方法
Nov 17 Python
详解pandas赋值失败问题解决
Nov 29 Python
如何通过安装HomeBrew来安装Python3
Dec 23 Python
python lambda的使用详解
Feb 26 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 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
服务器端解压缩zip的脚本
2006/12/22 PHP
php jq jquery getJSON跨域提交数据完整版
2013/09/13 PHP
php加密解密实用类分享
2014/01/07 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
学习YUI.Ext第七日-View&JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
QUnit jQuery的TDD框架
2010/11/04 Javascript
如何确保JavaScript的执行顺序 之jQuery.html并非万能钥匙
2011/03/03 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
javascript回车完美实现tab切换功能
2014/03/13 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
Three.js快速入门教程
2016/09/09 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
2017/01/10 Javascript
详解angularjs结合pagination插件实现分页功能
2017/02/10 Javascript
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
深入理解React高阶组件
2017/09/28 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
Python实现基于HTTP文件传输实例
2014/11/08 Python
详解设计模式中的工厂方法模式在Python程序中的运用
2016/03/02 Python
python交互式图形编程实例(三)
2017/11/17 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
Python3.7 pyodbc完美配置访问access数据库
2019/10/03 Python
PageFactory设计模式基于python实现
2020/04/14 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
2020/08/04 Python
Python如何测试stdout输出
2020/08/10 Python
HTML5所有标签汇总及标签意义解释
2015/03/12 HTML / CSS
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
会展策划与管理专业大学生职业生涯规划
2014/02/07 职场文书
趣味体育活动方案
2014/02/08 职场文书
《雨点》教学反思
2014/02/12 职场文书
学校节能宣传周活动总结
2014/07/09 职场文书
公务员上班玩游戏检讨书
2014/09/17 职场文书