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 相关文章推荐
linux系统使用python监控apache服务器进程脚本分享
Jan 15 Python
python逐行读取文件内容的三种方法
Jan 20 Python
python每隔N秒运行指定函数的方法
Mar 16 Python
详解python调度框架APScheduler使用
Mar 28 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
对Python捕获控制台输出流的方法详解
Jan 07 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
关于Keras模型可视化教程及关键问题的解决
Jan 24 Python
python数据预处理 :样本分布不均的解决(过采样和欠采样)
Feb 29 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python 实现批量图片识别并翻译
Nov 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
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
Yii学习总结之安装配置
2015/02/22 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
javascript数组的使用
2013/03/28 Javascript
Extjs单独定义各组件的实例代码
2013/06/25 Javascript
css结合js制作下拉菜单示例代码
2014/02/27 Javascript
jquery新的绑定事件机制on方法的使用方法
2014/04/15 Javascript
JS实现跟随鼠标的链接文字提示框效果
2015/08/06 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
jquery实现全选、不选、反选的两种方法
2016/09/06 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
JSONP跨域请求
2017/03/02 Javascript
Vue.js在数组中插入重复数据的实现代码
2017/11/17 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
numpy 声明空数组详解
2019/12/05 Python
python多线程使用方法实例详解
2019/12/30 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
Rakuten Kobo台湾:电子书、eReaders和Reading应用程式
2017/11/24 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
《雪地里的小画家》教学反思
2014/02/22 职场文书
工商干部先进事迹
2014/05/14 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
2016入党心得体会范文
2016/01/06 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
python实现简单石头剪刀布游戏
2021/10/24 Python
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电
CentOS MySql8 远程连接实战
2022/04/19 MySQL