1. 基本原理
一種典型的非線性濾波器就是中值濾波器,它使用像素的一個領域內的灰度的中值來代替該像素的值。中值濾波器通常是處理椒鹽噪聲的一種有效的手段。
2. 測試結果
圖源自skimage
3. 代碼
1 import numpy as np 2 3 def median_filter(input_image, filter_size): 4 ''' 5 中值濾波器 6 :param input_image: 輸入圖像 7 :param filter_size: 濾波器大小 8 :return: 輸出圖像 9 10 注:此實現濾波器大小必須為奇數且 >= 3 11 ''' 12 input_image_cp = np.copy(input_image) # 輸入圖像的副本 13 14 pad_num = int((filter_size - 1) / 2) # 輸入圖像需要填充的尺寸 15 16 input_image_cp = np.pad(input_image_cp, (pad_num, pad_num), mode="constant", constant_values=0) # 填充輸入圖像 17 18 m, n = input_image_cp.shape # 獲取填充后的輸入圖像的大小 19 20 output_image = np.copy(input_image_cp) # 輸出圖像 21 22 # 空間濾波 23 for i in range(pad_num, m - pad_num): 24 for j in range(pad_num, n - pad_num): 25 output_image[i, j] = np.median(input_image_cp[i - pad_num:i + pad_num + 1, j - pad_num:j + pad_num + 1]) 26 27 output_image = output_image[pad_num:m - pad_num, pad_num:n - pad_num] # 裁剪 28 29 return output_image