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语言编写电脑时间自动同步小工具
Mar 08 Python
Python的print用法示例
Feb 11 Python
python利用标准库如何获取本地IP示例详解
Nov 01 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
python调用其他文件函数或类的示例
Jul 16 Python
Python StringIO如何在内存中读写str
Jan 07 Python
IDLE下Python文件编辑和运行操作
Apr 25 Python
浅谈Python3多线程之间的执行顺序问题
May 02 Python
Python新手学习raise用法
Jun 03 Python
python如何支持并发方法详解
Jul 25 Python
pytorch训练神经网络爆内存的解决方案
May 22 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简单实现多字节字符串翻转的方法
2015/03/31 PHP
Yii数据库缓存实例分析
2016/03/29 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
IE之动态添加DOM节点触发window.resize事件
2010/07/27 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
模拟多级复选框效果的jquery代码
2013/08/13 Javascript
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
AngularJS之页面跳转Route实例代码
2017/03/10 Javascript
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
vue视图不更新情况详解
2019/05/16 Javascript
vue之封装多个组件调用同一接口的案例
2020/08/11 Javascript
[53:50]CHAOS vs Mineski 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
对Tensorflow中的矩阵运算函数详解
2018/07/27 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
Python基于numpy模块实现回归预测
2020/05/14 Python
Python pandas如何向excel添加数据
2020/05/22 Python
Python+pyftpdlib实现局域网文件互传
2020/08/24 Python
详解python变量与数据类型
2020/08/25 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
amazeui页面校验功能的实现代码
2020/08/24 HTML / CSS
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
生产经理的自我评价分享
2013/11/07 职场文书
转预备党员政审材料
2014/02/06 职场文书
大学军训感言300字
2014/03/09 职场文书
同志主要表现材料
2014/08/21 职场文书
学生党员检讨书范文
2014/12/27 职场文书
mysql优化之query_cache_limit参数说明
2021/07/01 MySQL
SQL实现LeetCode(177.第N高薪水)
2021/08/04 MySQL