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


九. 版權聲明:

        未經作者允許,請勿隨意轉載抄襲,抄襲情節嚴重者,作者將考慮追究其法律責任,創作不易,感謝您的理解和配合!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM