均值濾波器(平滑空間濾波器)基本原理及Python實現


1. 基本原理

使用元素的領域內像素的平均值代替該元素,可明顯的降低圖像灰度的尖銳變換。它的一種重要應用是模糊處理:得到感興趣的區域的粗略表示,將次要的/小的元素與背景融合,使得主要的/較大的元素變得易於檢測
 
$$  R=\frac{1}{m} \sum_{i=1}^{m} z_{i}  $$
 
  • $m$為濾波器大小

2. 測試結果

圖源自skimage

 

3. 代碼

 1 import numpy as np
 2 
 3 
 4 def means_filter(input_image, filter_size):
 5     '''
 6     均值濾波器
 7     :param input_image: 輸入圖像
 8     :param filter_size: 濾波器大小
 9     :return: 輸出圖像
10 
11     注:此實現濾波器大小必須為奇數且 >= 3
12     '''
13     input_image_cp = np.copy(input_image)  # 輸入圖像的副本
14 
15     filter_template = np.ones((filter_size, filter_size))  # 空間濾波器模板
16 
17     pad_num = int((filter_size - 1) / 2)  # 輸入圖像需要填充的尺寸
18 
19     input_image_cp = np.pad(input_image_cp, (pad_num, pad_num), mode="constant", constant_values=0)  # 填充輸入圖像
20 
21     m, n = input_image_cp.shape  # 獲取填充后的輸入圖像的大小
22 
23     output_image = np.copy(input_image_cp)  # 輸出圖像
24 
25     # 空間濾波
26     for i in range(pad_num, m - pad_num):
27         for j in range(pad_num, n - pad_num):
28             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)
29 
30     output_image = output_image[pad_num:m - pad_num, pad_num:n - pad_num]  # 裁剪
31 
32     return output_image

 


免責聲明!

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



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