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:wojianxinygcl@163.com

# 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的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@163.com

# 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()

七. 实验结果:

第六部分代码输出结果 ↑


八. 参考内容:

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

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


九. 版权声明:

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

  • 39
    点赞
  • 182
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值