一. 中值濾波:
中值濾波器是一種可以使圖像平滑的濾波器。它使用濾波器范圍內的像素的中值去代表該范圍內所有的像素。中值濾波是消除圖像噪聲最常見的手段之一,特別是消除椒鹽噪聲,中值濾波的效果要比均值濾波更好。
二. python實現中值濾波和均值濾波,並用兩種濾波器對受到椒鹽噪聲污染的圖像進行去噪
import cv2 import numpy as np # Median filter def median_filter(img, K_size=3): H, W, C = img.shape ## Zero padding pad = K_size // 2 out = np.zeros((H + pad*2, W + pad*2, C), dtype=np.float) out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float) tmp = out.copy() # filtering for y in range(H): for x in range(W): for c in range(C): out[pad+y, pad+x, c] = np.median(tmp[y:y+K_size, x:x+K_size, c]) out = out[pad:pad+H, pad:pad+W].astype(np.uint8) return out # Average filter def average_filter(img, G=3): out = img.copy() H, W, C = img.shape Nh = int(H / G) Nw = int(W / G) for y in range(Nh): for x in range(Nw): for c in range(C): out[G*y:G*(y+1), G*x:G*(x+1), c] = np.mean(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int) return out # Read image img = cv2.imread("../paojie_sp.jpg") # Median Filter and Average Filter out1 = median_filter(img, K_size=3) out2 = average_filter(img,G=3) # Save result cv2.imwrite("out1.jpg", out1) cv2.imwrite("out2.jpg", out2) cv2.waitKey(0) cv2.destroyAllWindows()
三. 實驗結果

受到椒鹽噪聲污染的圖像 ↑

中值濾波后的圖像 ↑

均值濾波后的圖像 ↑
可以明顯看出,對於受到椒鹽噪聲污染的圖像,中值濾波往往比均值濾波的去噪效果要好!
四. 參考內容: