創作不易,如果此文使您有收獲,記得點贊哦!
一. 傅里葉變化原理:
https://www.cnblogs.com/wojianxin/p/12529809.html
二. 高通濾波、低通濾波、帶通濾波:
高通濾波:高頻信息通過,低頻信息被阻擋;
低通濾波:低頻信息通過,高頻信息被阻擋;
帶通濾波:介於低頻和高頻之間的一帶信息通過,其它信息被阻擋。

圖解高通、低通、帶通濾波器 ↑
三. python實現高通濾波實驗:
1 # Writer : wojianxinygcl@163.com 2 3 # Data : 2020.3.20 4 5 import cv2 6 7 import numpy as np 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 fshift = np.fft.fftshift(dft) 20 21 #設置高通濾波器 22 23 rows, cols = img.shape 24 25 crow,ccol = int(rows/2), int(cols/2) #中心位置 26 27 mask = np.ones((rows, cols, 2), np.uint8) 28 29 mask[crow-30:crow+30, ccol-30:ccol+30] = 0 30 31 #掩膜圖像和頻譜圖像乘積 32 33 f = fshift * mask 34 35 #傅里葉逆變換 36 37 ishift = np.fft.ifftshift(f) 38 39 iimg = cv2.idft(ishift) 40 41 res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1]) 42 43 #顯示原始圖像和高通濾波處理圖像 44 45 plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image') 46 47 plt.axis('off') 48 49 plt.subplot(122), plt.imshow(res, 'gray'), plt.title('High Pass Filter Image') 50 51 plt.axis('off') 52 53 plt.show()
四. 高通濾波實驗結果:

高通濾波實驗結果 ↑
五. python實現低通濾波實驗:
1 # Writer : wojianxinygcl@163.com 2 3 # Data : 2020.3.20 4 5 import cv2 6 7 import numpy as np 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 fshift = np.fft.fftshift(dft) 20 21 #設置低通濾波器 22 23 rows, cols = img.shape 24 25 crow,ccol = int(rows/2), int(cols/2) #中心位置 26 27 mask = np.zeros((rows, cols, 2), np.uint8) 28 29 mask[crow-30:crow+30, ccol-30:ccol+30] = 1 30 31 #掩膜圖像和頻譜圖像乘積 32 33 f = fshift * mask 34 35 #傅里葉逆變換 36 37 ishift = np.fft.ifftshift(f) 38 39 iimg = cv2.idft(ishift) 40 41 res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1]) 42 43 #顯示原始圖像和低通濾波處理圖像 44 45 plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image') 46 47 plt.axis('off') 48 49 plt.subplot(122), plt.imshow(res, 'gray'), plt.title('Low Pass Filter Image') 50 51 plt.axis('off') 52 53 plt.show()
六. 低通濾波實驗結果:

低通濾波實驗結果 ↑
七. python實現帶通濾波實驗:
1 # Writer : wojianxinygcl@163.com 2 3 # Data : 2020.3.20 4 5 import cv2 6 7 import numpy as np 8 9 import math 10 11 from matplotlib import pyplot as plt 12 13 #讀取圖像 14 15 img = cv2.imread('../paojie_g.jpg', 0) 16 17 #傅里葉變換 18 19 dft = cv2.dft(np.float32(img), flags = cv2.DFT_COMPLEX_OUTPUT) 20 21 fshift = np.fft.fftshift(dft) 22 23 #設置帶通濾波器 24 25 # w 帶寬 26 27 # radius: 帶中心到頻率平面原點的距離 28 29 rows, cols = img.shape 30 31 crow,ccol = int(rows/2), int(cols/2) #中心位置 32 33 w = 30 34 35 radius = 30 36 37 mask = np.ones((rows, cols, 2), np.uint8) 38 39 for i in range(0, rows): 40 41 for j in range(0, cols): 42 43 # 計算(i, j)到中心點的距離 44 45 d = math.sqrt(pow(i - crow, 2) + pow(j - ccol, 2)) 46 47 if radius - w / 2 < d < radius + w / 2: 48 49 mask[i, j, 0] = mask[i, j, 1] = 0 50 51 else: 52 53 mask[i, j, 0] = mask[i, j, 1] = 1 54 55 #掩膜圖像和頻譜圖像乘積 56 57 f = fshift * mask 58 59 #傅里葉逆變換 60 61 ishift = np.fft.ifftshift(f) 62 63 iimg = cv2.idft(ishift) 64 65 res = cv2.magnitude(iimg[:,:,0], iimg[:,:,1]) 66 67 #顯示原始圖像和帶通濾波處理圖像 68 69 plt.subplot(121), plt.imshow(img, 'gray'), plt.title('Original Image') 70 71 plt.axis('off') 72 73 plt.subplot(122), plt.imshow(res, 'gray'), plt.title('Band Pass Filter Image') 74 75 plt.axis('off') 76 77 plt.show()
八. 帶通濾波實驗結果:

帶通濾波實驗結果 ↑
九. 總結:
高通濾波,通過了高頻信息,提取了圖像邊緣和噪聲;低通濾波,通過了低頻信息,保留了圖像背景和基本內容,圖像邊緣被阻擋,圖像變模糊;帶通濾波,阻擋了部分特別高頻信息和特別低頻信息,相對高通濾波來講,提取的圖像邊緣減少,相對低通濾波來講,保留的圖像內容也減少。
十. 參考內容:
https://www.jianshu.com/p/28b03ea8592b
十一. 版權聲明:
未經作者允許,請勿隨意轉載抄襲,抄襲情節嚴重者,作者將考慮追究其法律責任,創作不易,感謝您的理解和配合!