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