zoukankan      html  css  js  c++  java
  • 均值滤波器(平滑空间滤波器)基本原理及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
  • 相关阅读:
    Stm32高级定时器(三)
    Stm32高级定时器(二)
    Java网络编程
    Java锁详解
    Linux Shell入门
    Mysql锁详解
    Redis入门——Java接口
    Redis入门——安装与基本命令
    Eclipse创建maven工程后没有build path解决方案
    Jersey入门——对Json的支持
  • 原文地址:https://www.cnblogs.com/iwuqing/p/11380131.html
Copyright © 2011-2022 走看看