zoukankan      html  css  js  c++  java
  • python的numpy库和cv2库实现图像傅里叶变换

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


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

        原理简介请参考: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库实现图像傅里叶变换及反变换

     1 # writer:wojianxinygcl@163.com
     2 
     3 # date  : 2020.3.30
     4 
     5 import cv2 as cv
     6 
     7 import numpy as np
     8 
     9 from matplotlib import pyplot as plt
    10 
    11 #读取图像
    12 
    13 img = cv.imread('../head_g.jpg', 0)
    14 
    15 #傅里叶变换
    16 
    17 f = np.fft.fft2(img)
    18 
    19 fshift = np.fft.fftshift(f)
    20 
    21 res = np.log(np.abs(fshift))
    22 
    23 #傅里叶逆变换
    24 
    25 ishift = np.fft.ifftshift(fshift)
    26 
    27 iimg = np.fft.ifft2(ishift)
    28 
    29 iimg = np.abs(iimg)
    30 
    31 #展示结果
    32 
    33 plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')
    34 
    35 plt.axis('off')
    36 
    37 plt.subplot(132), plt.imshow(res, 'gray'), plt.title('Fourier Image')
    38 
    39 plt.axis('off')
    40 
    41 plt.subplot(133), plt.imshow(iimg, 'gray'), plt.title('Inverse Fourier Image')
    42 
    43 plt.axis('off')
    44 
    45 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库实现图像傅里叶变换及反变换

     1 # writer:wojianxinygcl@163.com
     2 
     3 # date  : 2020.3.30
     4 
     5 import numpy as np
     6 
     7 import cv2
     8 
     9 from matplotlib import pyplot as plt
    10 
    11 #读取图像
    12 
    13 img = cv2.imread('../paojie_g.jpg', 0)
    14 
    15 #傅里叶变换
    16 
    17 dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT)
    18 
    19 dftshift = np.fft.fftshift(dft)
    20 
    21 res1= 20*np.log(cv2.magnitude(dftshift[:,:,0], dftshift[:,:,1]))
    22 
    23 #傅里叶逆变换
    24 
    25 ishift = np.fft.ifftshift(dftshift)
    26 
    27 iimg = cv2.idft(ishift)
    28 
    29 res2 = cv2.magnitude(iimg[:,:,0], iimg[:,:,1])
    30 
    31 #显示图像
    32 
    33 plt.subplot(131), plt.imshow(img, 'gray'), plt.title('Original Image')
    34 
    35 plt.axis('off')
    36 
    37 plt.subplot(132), plt.imshow(res1, 'gray'), plt.title('Fourier Image')
    38 
    39 plt.axis('off')
    40 
    41 plt.subplot(133), plt.imshow(res2, 'gray'), plt.title('Inverse Fourier Image')
    42 
    43 plt.axis('off')
    44 
    45 plt.show()

    七. 实验结果:


    第六部分代码输出结果 ↑
     

    八. 参考内容:

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


    九. 版权声明:

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

  • 相关阅读:
    mvp在flutter中的应用
    Flutter 网络请求库http
    Flutter Dart中的异步
    阿里云 RDS 数据库又发 CPU 近 100% 的“芯脏病”团队
    上周热点回顾(10.14-10.20) 团队
    云上的芯脏病:奇怪的阿里云 RDS 数据库突发 CPU 近 100% 问题团队
    【故障公告】docker swarm 集群问题引发的故障团队
    上周热点回顾(10.7-10.13)团队
    上周热点回顾(9.30-10.6) 团队
    上周热点回顾(9.23-9.29) 团队
  • 原文地址:https://www.cnblogs.com/wojianxin/p/12530172.html
Copyright © 2011-2022 走看看