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 连连看连接算法
Nov 22 Python
Python随机数random模块使用指南
Sep 09 Python
Python按行读取文件的实现方法【小文件和大文件读取】
Sep 19 Python
利用python发送和接收邮件
Sep 27 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
深入理解Django自定义信号(signals)
Oct 15 Python
Python设计模式之状态模式原理与用法详解
Jan 15 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python多进程读图提取特征存npy
May 21 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
Python 解析简单的XML数据
Jul 24 Python
python3使用diagrams绘制架构图的步骤
Apr 08 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+AJAX实现无刷新注册(带用户名实时检测)
2007/01/02 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
js快速排序的实现代码
2013/12/08 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
js怎么覆盖原有方法实现重写
2014/09/04 Javascript
JSON 数据格式详解
2017/09/13 Javascript
HTML5开发Kinect体感游戏的实例应用
2017/09/18 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
微信小程序云函数使用mysql数据库过程详解
2019/08/07 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
浅谈JavaScript中等号、双等号、 三等号的区别
2020/08/06 Javascript
[03:39]DOTA2英雄梦之声_第05期_幽鬼
2014/06/23 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
Python while 循环使用的简单实例
2016/06/08 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
python2和python3哪个使用率高
2020/06/23 Python
PyTorch实现重写/改写Dataset并载入Dataloader
2020/07/14 Python
python调用win32接口进行截图的示例
2020/11/11 Python
python解决OpenCV在读取显示图片的时候闪退的问题
2021/02/23 Python
悬挂训练绳:TRX
2017/12/14 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
后勤工作职责
2013/12/22 职场文书
爽歪歪广告词
2014/03/20 职场文书
交通安全寄语大全
2014/04/08 职场文书
五好文明家庭事迹材料
2014/12/20 职场文书
社区敬老月活动总结
2015/05/07 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
外科护士长工作总结
2015/08/12 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
关于python中模块和重载的问题
2021/11/02 Python