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 BeautifulSoup设置页面编码的方法
Apr 03 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
flask入门之表单的实现
Jul 18 Python
pycharm安装和首次使用教程
Aug 27 Python
python实现AES加密和解密
Mar 27 Python
python实现在cmd窗口显示彩色文字
Jun 24 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
python中使用while循环的实例
Aug 05 Python
Python Django框架模板渲染功能示例
Nov 08 Python
python 有效的括号的实现代码示例
Nov 11 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
Feb 26 Python
python超详细实现完整学生成绩管理系统
Mar 17 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
Laravel框架中集成MongoDB和使用详解
2019/10/17 PHP
你需要知道的JavsScript可以做什么?
2007/06/29 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
JavaScript日期类型的一些用法介绍
2015/03/02 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
JavaScript中transform实现数字翻页效果
2017/03/08 Javascript
Angular中使用$watch监听object属性值的变化(详解)
2017/04/24 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
three.js 入门案例详解
2018/01/23 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
python中assert用法实例分析
2015/04/30 Python
python实现逻辑回归的方法示例
2017/05/02 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Django 自动生成api接口文档教程
2019/11/19 Python
Python netmiko模块的使用
2020/02/14 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
python suds访问webservice服务实现
2020/06/26 Python
通过Canvas及File API缩放并上传图片完整示例
2013/08/08 HTML / CSS
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
牵手50台湾:专为黄金岁月的单身人士而设的交友网站
2021/02/18 全球购物
护理学专业推荐信
2013/12/03 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
道德之星事迹材料
2014/05/03 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
医生个人年终总结
2015/02/28 职场文书
2015年前台接待工作总结
2015/05/04 职场文书
初中数学教学反思范文
2016/02/17 职场文书
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
Python实现批量自动整理文件
2022/03/16 Python
MySql按时,天,周,月进行数据统计
2022/08/14 MySQL