python 圖像中值濾波 zero padding



python 對圖像椒鹽噪聲進行中值濾波,考慮邊界0填充

 1 import cv2
 2 import numpy as np
 3 
 4 # Read image
 5 img = cv2.imread("F:\lena.jpg",0)
 6 H, W= img.shape
 7 
 8 
 9 imarray = np.array(img)
10 probility = 0.05
11 
12 #添加椒鹽噪聲
13 for i in range(H):
14     for j in range(W):
15         if np.random.random(1) < probility:
16             if np.random.random(1) < 0.5:
17                 imarray[i, j] = 0
18             else:
19                 imarray[i, j] = 255
20 
21 im_salt_pepper = imarray
22 
23 cv2.imshow("salt&pepper noised",im_salt_pepper)
24 
25 
26 # 中值濾波模板
27 K_size = 3
28 
29 # 進行0填充
30 pad = K_size // 2
31 
32 out = np.zeros((H , W), dtype=np.float)
33 #print(out.shape)
34 out[pad:pad+H, pad:pad+W] = im_salt_pepper.copy().astype(np.float)
35 
36 #4個邊緣進行填充
37 out[0,1:H]   = 0
38 out[H+1,1:H] = 0
39 out[1:H,0]   = 0
40 out[1:H,H+1] = 0
41 
42 #4個角進行填充
43 out[0,0] = out[H+1,H+1] = out[0,H+1]=out[H+1,0] = 0
44 tmp = out.copy()
45 
46 for y in range(pad, H+pad):
47     for x in range(pad, W+pad):
48             out[y, x] = np.median(tmp[y-pad:y+pad, x-pad:x+pad])
49 
50 output = out[pad:pad+H, pad:pad+W].astype(np.uint8)
51 
52 print("out shape is ",output.shape)
53 
54 cv2.imshow("denoised", output)
55 cv2.imshow("original",img)
56 cv2.waitKey(0)
57 cv2.destroyAllWindows()
 
        
結果如下:

 

 

 

 

可以看到,中值濾波對於椒鹽噪聲去除效果還是比較好的。







免責聲明!

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



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