失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 快速傅里叶变换python_图像傅里叶变换快速实现 python

快速傅里叶变换python_图像傅里叶变换快速实现 python

时间:2021-11-09 14:35:34

相关推荐

快速傅里叶变换python_图像傅里叶变换快速实现 python

码字不易,如果对您有所帮助,记着点赞哦!

一. 图像傅里叶变换原理:

对二维图像进行傅里叶变换用如下公式进行:

图像长M,高N。F(u,v)表示频域图像,f(x,y)表示时域图像。u的范围为[0,M-1],v的范围为[0,N-1] ↑

对二维图像进行傅里叶逆变换用如下公式进行:

图像长M,高N。f(x,y)表示时域图像,F(u,v)表示频域图像。x的范围为[0,M-1],y的范围为[0,N-1] ↑

二. python的numpy库中的图像傅里叶变换公式:

#计算一维傅里叶变换

numpy.fft.fft(a, n=None, axis=-1, norm=None)

#计算二维的傅里叶变换

numpy.fft.fft2(a, n=None, axis=-1, norm=None)

#计算n维的傅里叶变换

numpy.fft.fftn()

#计算n维实数的傅里叶变换

numpy.fft.rfftn()

#返回傅里叶变换的采样频率

numpy.fft.fftfreq()

#将FFT输出中的直流分量移动到频谱中央

numpy.fft.shift()

三. 实验:python的numpy库实现图像傅里叶变换及反变换

# writer:wojianxinygcl@

# date : .3.30

import cv2 as cv

import numpy as np

from matplotlib import pyplot as plt

#读取图像

img = cv.imread('../head_g.jpg', 0)

#傅里叶变换

f = np.fft.fft2(img)

fshift = np.fft.fftshift(f)

res = np.log(np.abs(fshift))

#傅里叶逆变换

ishift = np.fft.ifftshift(fshift)

iimg = np.fft.ifft2(ishift)

iimg = np.abs(iimg)

#展示结果

plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')

plt.axis('off')

plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image')

plt.axis('off')

plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image')

plt.axis('off')

plt.show()

四. 实验结果:

第三部分代码输出结果 ↑

五. python的cv2库中的图像傅里叶变换公式:

# 傅里叶变换

dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)

# 傅里叶逆变换

iimg = cv2.idft(ishift)

# 返回傅里叶变换后iimg的幅值

res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])

六. 实验:python的cv库和numpy库实现图像傅里叶变换及反变换

# writer:wojianxinygcl@

# date : .3.30

import numpy as np

import cv2

from matplotlib import pyplot as plt

#读取图像

img = cv2.imread('../paojie_g.jpg', 0)

#傅里叶变换

dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)

dftshift = np.fft.fftshift(dft)

res1= 20*np.log(cv2.magnitude(dftshift[:,:,0], dftshift[:,:,1]))

#傅里叶逆变换

ishift = np.fft.ifftshift(dftshift)

iimg = cv2.idft(ishift)

res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])

#显示图像

plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')

plt.axis('off')

plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('Fourier Image')

plt.axis('off')

plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('Inverse Fourier Image')

plt.axis('off')

plt.show()

七. 实验结果:

第六部分代码输出结果 ↑

八. 参考内容:

九. 版权声明:

未经作者允许,请勿随意转载抄袭,抄袭情节严重者,作者将考虑追究其法律责任,创作不易,感谢您的理解和配合!

如果觉得《快速傅里叶变换python_图像傅里叶变换快速实现 python》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。