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 返回汉字的汉语拼音
Feb 27 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
TensorFlow如何实现反向传播
Feb 06 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
python使用pymongo操作mongo的完整步骤
Apr 13 Python
python自定义函数实现最大值的输出方法
Jul 09 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
音频处理 windows10下python三方库librosa安装教程
Jun 20 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
Jun 29 Python
Python如何在单元测试中给对象打补丁
Aug 03 Python
基于OpenCV的网络实时视频流传输的实现
Nov 15 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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读取网页文件内容的实现代码(fopen,curl等)
2011/06/23 PHP
解析php扩展php_curl.dll不加载的解决方法
2013/06/26 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
php如何计算两坐标点之间的距离
2018/12/29 PHP
Javascript入门学习资料收集整理篇
2008/07/06 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
基于Jquery实现表单验证
2020/07/20 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
Node.js使用Express创建Web项目详细教程
2017/03/31 Javascript
利用jQuery异步上传文件的插件用法详解
2017/07/19 jQuery
微信小程序实现图片压缩功能
2018/01/26 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
[02:17]TI4西雅图DOTA2前线报道 啸天mik夫妻档解说
2014/07/08 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
Python中List.index()方法的使用教程
2015/05/20 Python
详解Python之unittest单元测试代码
2018/01/24 Python
python数据抓取3种方法总结
2021/02/07 Python
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
华为菲律宾官方网站:HUAWEI Philippines
2021/02/23 全球购物
毕业生求职的求职信
2013/12/05 职场文书
初中政治教学反思
2014/01/17 职场文书
遵纪守法演讲稿
2014/05/23 职场文书
党的群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
2016大学军训心得体会
2016/01/11 职场文书
《从现在开始》教学反思
2016/02/16 职场文书
党员学习型组织心得体会
2019/06/21 职场文书
2019年学校消防安全责任书(2篇)
2019/10/09 职场文书
JS 基本概念详细介绍
2021/10/16 Javascript