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中使用列表生成式的教程
Apr 27 Python
Python中有趣在__call__函数
Jun 21 Python
Python面向对象类继承和组合实例分析
May 28 Python
python多线程http压力测试脚本
Jun 25 Python
Python对列表的操作知识点详解
Aug 20 Python
Python使用random模块生成随机数操作实例详解
Sep 17 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 Python
python实现随机加减法生成器
Feb 24 Python
python基础之停用词过滤详解
Apr 21 Python
python实现腾讯滑块验证码识别
Apr 27 Python
python获取带有返回值的多线程
May 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中使用getimagesize获取图片、flash等文件的尺寸信息实例
2014/04/29 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
jquery 表格排序、实时搜索表格内容(附图)
2014/05/19 Javascript
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
JavaScript计算两个日期时间段内日期的方法
2015/03/16 Javascript
AspNet中使用JQuery上传插件Uploadify详解
2015/05/20 Javascript
JavaScript实现上下浮动的窗口效果代码
2015/10/12 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
详解JavaScript中return的用法
2017/05/08 Javascript
Webpack优化配置缩小文件搜索范围
2017/12/25 Javascript
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
浅谈React之状态(State)
2018/09/19 Javascript
Django+vue跨域问题解决的详细步骤
2019/01/20 Javascript
微信小程序实现左右列表联动
2020/05/19 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
layui table 多行删除(id获取)的方法
2019/09/12 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
python通过定义一个类实例作为ftp回调方法
2015/05/04 Python
详解Python pygame安装过程笔记
2017/06/05 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
Python变量赋值的秘密分享
2018/04/03 Python
Django进阶之CSRF的解决
2018/08/01 Python
python字典值排序并取出前n个key值的方法
2018/10/17 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
AURALog面试题软件测试方面
2013/10/22 面试题
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
关于童年的读书笔记
2015/06/26 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python
JavaScript实现优先级队列
2021/12/06 Javascript
Python的property属性详细讲解
2022/04/11 Python