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中的MySQLdb模块添加超时功能的教程
May 05 Python
Python使用win32 COM实现Excel的写入与保存功能示例
May 03 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
python求最大连续子数组的和
Jul 07 Python
Python获取网段内ping通IP的方法
Jan 31 Python
浅谈python编译pyc工程--导包问题解决
Mar 20 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
pyinstaller打包opencv和numpy程序运行错误解决
Aug 16 Python
python并发编程 Process对象的其他属性方法join方法详解
Aug 20 Python
pytorch 自定义参数不更新方式
Jan 06 Python
python爬取新闻门户网站的示例
Apr 25 Python
使用python如何删除同一文件夹下相似的图片
May 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
用来解析.htpasswd文件的PHP类
2012/09/05 PHP
php mail to 配置详解
2014/01/16 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
php发送邮件的问题详解
2015/06/22 PHP
PHP session垃圾回收机制实例分析
2019/06/28 PHP
js 调整select 位置的函数
2008/02/21 Javascript
jQuery 版元素拖拽原型代码
2011/04/25 Javascript
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
node.js中的fs.close方法使用说明
2014/12/17 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
获取当前按钮或者html的ID名称实例(推荐)
2017/06/23 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
Python读取实时数据流示例
2019/12/02 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
详解HTML5中ol标签的用法
2015/09/08 HTML / CSS
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
本溪关门山导游词
2015/02/09 职场文书
后天观后感
2015/06/08 职场文书
优秀团员主要事迹材料
2015/11/05 职场文书