Advertisement

python 傅立叶函数_python 图像的离散傅立叶变换实例

阅读量:

图片(M×N)的二维离散傅里叶变换是一种能将图片从空间域转换至频域的方法,在该区域中使用x和y变量来表示位置坐标,在该区域中的相应频率成分则由u和v变量标识出来。二维离散傅里叶变换的具体计算公式如后所示。

20200102092316.jpg

在Python编程环境中

当应用log函数时,应表述为1 + x而非直接采用x的形式来计算该函数值。为了避免在数值等于零的情况下进行无效的对数运算操作

为了使图像变换的效果更为准确,请将图像变换的原点设置为频域矩形中心位置,并对 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')

运行结果:

20200102092437.jpg
20200102092448.jpg

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

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')

直接根据公式实现复杂度很高,因为是四重循环,时间复杂度为

20200102092556.jpg

,所以实际用的时候需要用快速傅立叶变换来实现

对于该Python图像的离散傅里叶变换实例而言,在此就是小编向大家提供了完整的相关内容。如果能为大家提供参考帮助的话,请大家能够给予更多的支持和鼓励。

本文标题: python 图像的离散傅立叶变换实例

本文地址: http://www.cppcns.com/jiaoben/python/296726.html

全部评论 (0)

还没有任何评论哟~