python 图像的离散傅立叶变换

  图像(MxN)的二维离散傅立叶变换可以将图像由空间域变换到频域中去,空间域中用x,y来表示空间坐标,频域由u,v来表示频率,二维离散傅立叶变换的公式如下:

  在python中,numpy库的fft模块有实现好了的二维离散傅立叶变换函数,函数是fft2,输入一张灰度图,输出经过二维离散傅立叶变换后的结果,但是具体实现并不是直接用上述公式,而是用快速傅立叶变换。结果需要通过使用abs求绝对值才可以进行可视化,但是视觉效果并不理想,因为傅立叶频谱范围很大,所以要用log对数变换来改善视觉效果。

  另外,图像变换的原点需要移动到频域矩形的中心,所以要对fft2的结果使用fftshift函数。最后也可以使用log来改善可视化效果。

  代码如下:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3
 4 img = plt.imread(‘photo.jpg‘)
 5
 6 #根据公式转成灰度图
 7 img = 0.2126 * img[:,:,0] + 0.7152 * img[:,:,1] + 0.0722 * img[:,:,2]
 8
 9 #显示原图
10 plt.subplot(231),plt.imshow(img,‘gray‘),plt.title(‘original‘)
11
12 #进行傅立叶变换,并显示结果
13 fft2 = np.fft.fft2(img)
14 plt.subplot(232),plt.imshow(np.abs(fft2),‘gray‘),plt.title(‘fft2‘)
15
16 #将图像变换的原点移动到频域矩形的中心,并显示效果
17 shift2center = np.fft.fftshift(fft2)
18 plt.subplot(233),plt.imshow(np.abs(shift2center),‘gray‘),plt.title(‘shift2center‘)
19
20 #对傅立叶变换的结果进行对数变换,并显示效果
21 log_fft2 = np.log(np.abs(fft2))
22 plt.subplot(235),plt.imshow(log_fft2,‘gray‘),plt.title(‘log_fft2‘)
23
24 #对中心化后的结果进行对数变换,并显示结果
25 log_shift2center = np.log(np.abs(shift2center))
26 plt.subplot(236),plt.imshow(log_shift2center,‘gray‘),plt.title(‘log_shift2center‘)

  运行结果:

   根据公式实现的二维离散傅立叶变换如下:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 PI = 3.141591265
 4 img = plt.imread(‘temp.jpg‘)
 5
 6 #根据公式转成灰度图
 7 img = 0.2126 * img[:,:,0] + 0.7152 * img[:,:,1] + 0.0722 * img[:,:,2]
 8
 9 #显示原图
10 plt.subplot(131),plt.imshow(img,‘gray‘),plt.title(‘original‘)
11
12 #进行傅立叶变换,并显示结果
13 fft2 = np.fft.fft2(img)
14 log_fft2 = np.log(np.abs(fft2))
15 plt.subplot(132),plt.imshow(log_fft2,‘gray‘),plt.title(‘log_fft2‘)
16
17 h , w = img.shape
18 #生成一个同样大小的复数矩阵
19 F = np.zeros([h,w],‘complex128‘)
20 for u in range(h):
21     for v in range(w):
22         res = 0
23         for x in range(h):
24             for y in range(w):
25                 res += img[x,y] * np.exp(-1.j * 2 * PI * (u * x / h + v * y / w))
26         F[u,v] = res
27 log_F = np.log(np.abs(F))
28 plt.subplot(133),plt.imshow(log_F,‘gray‘),plt.title(‘log_F‘)

  直接根据公式实现实在是太慢,以至于我都不想等它跑出结果……

原文地址:https://www.cnblogs.com/youmuchen/p/8361713.html

时间: 2024-09-29 18:00:13

python 图像的离散傅立叶变换的相关文章

理解离散傅立叶变换(一. 傅立叶变换的由来)

理解离散傅立叶变换(一) ------傅立叶变换的由来 关于傅立叶变换,不管是书本还是在网上可以非常easy找到关于傅立叶变换的描写叙述,可是大都是些故弄玄虚的文章,太过抽象,尽是一些让人看了就望而生畏的公式的罗列,让人非常难可以从感性上得到理解,近期,我偶尔从网上看到一个关于数字信号处理的电子书籍,是一个叫Steven W. Smith, Ph.D.外国人写的,写得非常浅显,里面有七章由浅入深地专门讲述关于离散信号的傅立叶变换,尽管是英文文档,我还是硬着头皮看完了有关傅立叶变换的有关内容,看了

理解离散傅立叶变换(一. 傅立叶的起源变换)

理解离散傅立叶变换(一) ------傅立叶变换的由来 关于傅立叶变换,不管是书本还是在网上可以非常easy找到关于傅立叶变换的描写叙述,可是大都是些故弄玄虚的文章,太过抽象.尽是一些让人看了就望而生畏的公式的罗列,让人非常难可以从感性上得到理解.近期.我偶尔从网上看到一个关于数字信号处理的电子书籍,是一个叫Steven W. Smith, Ph.D.外国人写的,写得非常浅显,里面有七章由浅入深地专门讲述关于离散信号的傅立叶变换.尽管是英文文档.我还是硬着头皮看完了有关傅立叶变换的有关内容,看了

图像中的傅立叶变换(一)

关于傅立叶变换,知乎上已经有一篇很好的教程,因此,这篇文章不打算细讲傅立叶的物理含义,只是想从图像的角度谈一谈傅立叶变换的本质和作用. 本文假设读者已经熟知欧拉公式: \[ e^{j\pi x}=\cos{\pi x}+j\sin{\pi x} \] 并且知道高数课本中给出的傅立叶变换公式: \[ f(x) - \frac{a_0}{2}+\sum_{n=1}^{\infty}{[a_n \cos{nx}+b_n\sin{nx}]} \] 其中 \(a_n=\frac{1}{\pi}\int_{

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示

算法系列之二十三:离散傅立叶变换之音频播放与频谱显示 算法系列之二十三离散傅立叶变换之音频播放与频谱显示 导语 什么是频谱 1 频谱的原理 2 频谱的选择 3 频谱的计算 显示动态频谱 1 实现方法 2 杂项说明 结果展示 导语 频谱和均衡器,几乎是媒体播放程序的必备物件,没有这两个功能的媒体播放程序会被认为不够专业,现在主流的播放器都具备这两个功能,foobar 2000的十八段均衡器就曾经让很多人着迷.在上一篇对离散傅立叶变换介绍的基础上,本篇就进一步介绍一下频谱是怎么回事儿,下一篇继续介绍

算法系列之二十四:离散傅立叶变换之音频播放与均衡器

导语 在算法系列的第二十二篇,我们介绍了离散傅立叶变换算法的实现,将时域的音频信号转换到频域进行分析,获取拨号音频的频率特征.这一篇我们将介绍一种频域均衡器的实现方法,所谓的频域均衡器,就是在频域信号的基础上对音频数据进行调整,然后再将频域信号转换成时域信号在回放设备上播放,从而达到音色调节的目的.将频域信号转换成时域信号的算法,就是离散傅立叶逆变换算法. 1 离散傅立叶逆变换 有从时域转换到频域的方法,就必然有从频域转换到时域的方法,相对于离散傅里叶变换,这个反向转换就是离散傅里叶逆变换(ID

图像中的傅立叶变换(二)

上一篇文章讲了傅立叶变换的本质.这篇文章会总结一下傅立叶变换的常用性质,公式巨多,慎入!慎入! 相关概念 首先,回顾一下傅立叶变换的公式: \[ F(u)=\frac{1}{M}\sum_{x=0}^{M-1}f(x)e^{-2j\pi (ux/M)} \] 频谱(spectrum) 由上面的公式可以看出,傅立叶变换得到的系数 \(F(u)\) 是一个复数,因此可以表示为:\(F(u)=R(u)+jI(u)\),其中,\(R(u)\) 是实部,\(I(u)\) 是虚部.傅立叶变换的频谱被定义为:

离散傅立叶变换,快速傅立叶变换和傅里叶级数

目的:要学习通讯或者从事通讯行业都免不了要接触傅立叶变换,傅立叶变换有很多形式包括积分形式和离散形式的,公式也是各种积分或者累加,我在学习的初始是直接背下来这些公式,并没有想过每个公式里变量和积分以及累加的含义.因此现在有了写一篇关于傅立叶变换的博客的想法.本篇主要以最简单的cos(t)为例,以Matlab为媒介,比较Discrete Fourier Transform(DFT)和Fast Fourier Transform (FFT).这是因为DFT是我在学习信号处理时老师直接给的公式,而FF

Matlab图像处理系列4———图像傅立叶变换与反变换

注:本系列来自于图像处理课程实验,用Matlab实现最基本的图像处理算法 1.Fourier变换 (1)频域增强 除了在空间域内可以加工处理图像以外,我们还可以将图像变换到其他空间后进行处理,这些方法称为变换域方法,最常见的变换域是频域. 使用Fourier变换把图像从空间域变换到频域,在频域内做相应增强处理,再从频域变换到空间域得到处理后的图像. 我们这里主要学习Fourier变换和FFT变换的算法,没有学过通信原理,我对信号.时域分析也不是很清楚. 2.FFT算法 (1)离散Fourier变

傅立叶变换的深入理解 转载 数字信号处理

傅立叶变换的深入理解 2007年10月05日 星期五 16:41 专题讨论四:关于傅里叶变换的讨论[精彩] 有奖征集:大家讨论一下傅里叶变换相关的内容: 1 变换的目的,意义,应用. 2 傅里叶级数与傅里叶变换的差别和联系 3 连续傅里叶变换,离散时间傅里叶变换,离散傅里叶变换,序列的傅里叶变换,各自的定义,差别,联系. 3 高速傅里叶变换的实质,经常使用的算法之间的差别和联系,各自的优势. 4 fft的应用讨论: 1.变换是时间变量函数变成相应变换域的某种变量函数,这样使运算简单,处理方便.变