python的图像傅里叶变换 np.fft.fft2 cv.dft 函数

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


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

    原理简介请参考:https://www.cnblogs.com/wojianxin/p/12529809.html

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

图像长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:[email protected]

# date  : 2020.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的图像傅里叶变换 np.fft.fft2 cv.dft 函数_第1张图片

第三部分代码输出结果 ↑


五. 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:[email protected]

# date  : 2020.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的图像傅里叶变换 np.fft.fft2 cv.dft 函数_第2张图片

第六部分代码输出结果 ↑


八. 参考内容:

        ① https://www.cnblogs.com/wojianxin/p/12530172.html

        ② https://www.jianshu.com/p/a00da3e03533


九. 版权声明:

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

你可能感兴趣的:(数字图像处理入门,图像傅里叶变换,python源码,np.fft.ifft2,cv2.idft,数字图像处理)