使用元素的領域內像素的平均值代替該元素,可明顯的降低圖像灰度的尖銳變換。它的一種重要應用是模糊處理:得到感興趣的區域的粗略表示,將次要的/小的元素與背景融合,使得主要的/較大的元素變得易於檢測
$$ R=\frac{1}{m} \sum_{i=1}^{m} z_{i} $$
2. 測試結果
圖源自skimage
3. 代碼
import numpy as np
def means_filter(input_image, filter_size): ''' 均值濾波器 :param input_image: 輸入圖像 :param filter_size: 濾波器大小 :return: 輸出圖像
註:此實現濾波器大小必須為奇數且 >= 3 ''' input_image_cp = np.copy(input_image)
filter_template = np.ones((filter_size, filter_size))
pad_num = int((filter_size - 1) / 2)
input_image_cp = np.pad(input_image_cp, (pad_num, pad_num), mode="constant", constant_values=0)
m, n = input_image_cp.shape
output_image = np.copy(input_image_cp)
for i in range(pad_num, m - pad_num): for j in range(pad_num, n - pad_num): output_image[i, j] = np.sum(filter_template * input_image_cp[i - pad_num:i + pad_num + 1, j - pad_num:j + pad_num + 1]) / (filter_size ** 2)
output_image = output_image[pad_num:m - pad_num, pad_num:n - pad_num]
return output_image