高通濾波、低通濾波、帶通濾波 python實現


創作不易,如果此文使您有收獲,記得點贊哦!


一. 傅里葉變化原理:

    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


十一. 版權聲明:

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


免責聲明!

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



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