首页 > 其他分享 >三种常见的平滑滤波方法

三种常见的平滑滤波方法

时间:2023-08-10 09:00:48浏览次数:37  
标签:begin end 平滑 滤波 三种 bmatrix 窗口 equation

一、概述

  平滑滤波,顾名思义就是对信号进行处理使之整体显得更加平滑,降低噪声影响,提高信号质量,它常见于数学信号处理和图像处理,一般意义上的数字信号多体现于一维数据,图像信号多体现于二维数据。
  均值滤波、中值滤波、高斯滤波是三种常见的平滑滤波方法,其中均值滤波和高斯滤波是线性技术,中值滤波是非线性技术。它们实现的基本原理是基本一致的,指定一个滑动窗口,计算其中的均值、中值、卷积值输出到当前位置。
  均值滤波、高斯滤波对高斯噪声表现较好,但对椒盐噪声表现较差;中值滤波则对椒盐噪声表现较好,对高斯噪声表现较差。

二、基本原理

  均值滤波、中值滤波、高斯滤波的基本原理都是以一个滑动窗口,以指定的计算方式得到其中的值,将它输出到信号的当前位置,


  均值滤波计算均值,中值滤波计算中值,高斯滤波计算卷积值。窗口大小L的设定一般为2k+1,每次计算窗口中心位置的值。
  该种策略下,在边缘区域窗口输出的位置是无法覆盖到的,因此需要特定的方式进行处理。处理的方式通常有四种:不作处理、只计算窗口包含区域、外周填充0、外周填充邻近元素值或指定值。

1.均值滤波

(1)一维
  对于信号(a1,a2,…,an),定义一个大小为L的窗口,计算窗口中元素的均值

\[vmean=\frac{1}{L}\sum_{i=1}^{L}{x_i} \]

  作为对应窗口 \(\frac{L+1}{2}\)位置处的输出值。
(2)二维
  对于一幅灰度图像

\[A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*} \]

  定义一个大小为L*L的窗口,计算窗口中元素的均值

\[vmean=\frac{1}{L^{2}}\sum_{i=1}^{L}{\sum_{j=1}^{L}{p_{ij}}} \]

  作为对应窗口 \(\left( \frac{L+1}{2},\frac{L+1}{2} \right)\) 位置处的输出值。

2.中值滤波

(1)一维
  对于信号(a1,a2,…,an),定义大小为L的窗口,计算窗口中元素的中值。

  • 升序(降序)排列为(r1,r2,…,rL),
  • 取中间\(\frac{L+1}{2}\)处的值,作为对应窗口\(\frac{L+1}{2}\) 位置处的输出值。

(2)二维
  对于一幅灰度图像

\[A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*} \]

  定义大小为L*L的窗口,计算窗口中元素的中值。

  • 升序(降序)排列为(r1,r2,…,rL2),
  • 取中间 \(\frac{L^2+1}{2}\)处的值,作为对应窗口 \(\left( \frac{L+1}{2}, \frac{L+1}{2}\right)\)位置处的输出值。

3.高斯滤波

  高斯滤波类似于均值滤波和中值滤波,形式上和均值滤波是统一的。均值滤波计算的是元素的均值,也就是均数1/n的加权和。高斯滤波同样定义一个滑动窗口,这个窗口中对应于每个元素定义了一个权重参数,窗口的输出就是数据元素和这些权重参数的加权和,因为这个运算是形式化的卷积运算,因此这个窗口叫做卷积核。
(1)一维
  对于信号(a1,a2,…,an),定义一个大小为L的卷积核

\[\left( w_1,w_2,...,w_L \right) \]

  与数据元素做卷积运算,得到值

\[vgaus=\sum_{i=1}^{L}{w_i\cdot x_i} \]

  作为对应窗口 \(\frac{L+1}{2}\)位置处的输出值。
(2)二维
  对于一幅灰度图像

\[A=\begin{equation*} \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \end{bmatrix} \end{equation*} \]

  定义一个大小为L*L的卷积核

\[\begin{equation*} \begin{bmatrix} w_{11} & \cdots & w_{1L} \\ \vdots & \ddots & \vdots \\ w_{L1} & \cdots & w_{LL} \end{bmatrix} \end{equation*} \]

  与数据元素做卷积运算,得到值

\[vgaus=\sum_{i=1}^{L}{\sum_{j=1}^{L}{w_{ij}\cdot x_{ij}}} \]

  作为对应窗口\(\left( \frac{L+1}{2}, \frac{L+1}{2}\right)\)位置处的输出值。

4.边缘处理

  滤波窗口处在数据边缘区域时,对于最外周的 \(\frac{L-1}{2}\)宽度的那些元素,窗口输出的位置无法涵盖到它们,因此需要以一定的策略对该区域进行处理。常见的处理策略有以下几种:
(1)不作处理
  对于边缘区域不作处理,计算时直接略过。
(2)只计算窗口包含区域
  照常由窗口的中心点进行覆盖,计算时不计外周缺失的部分,只计算窗口包含的区域。
(3)外周填充0
  照常由窗口的中心点进行覆盖,外周缺失的部分填充0。
(4)外周填充邻近元素值或其他指定值
  照常由窗口的中心点进行覆盖,外周缺失的部分填充邻近元素值或其他指定的值。

三、示例

1.均值滤波

一维:
  有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的窗口,进行均值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口的三个元素为[0,3,2],输出均值 \(\frac{0+3+2}{3}\approx1.67\) ;
  窗口滑至下一位置,三个元素为[3,2,4],输出均值 \(\frac{3+2+4}{3}=3\);
  窗口滑至下一位置,三个元素为[2,4,5],输出均值 \(\frac{2+4+5}{3}\approx3.67\) ;
  同样地,窗口依次输出值7.33、8.33、9.67、8.67、6.67、5.67,在最后一个窗口位置,三个元素为[1,6,0],输出均值2.33。
  因此,输出的信号段为O=[1.67, 3, 3.67, 7.33, 8.33, 9.67, 8.67, 6.67, 5.67, 2.33]。

二维:
  有图像矩阵

\[I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*} \]

  定义长度为3*3的窗口,进行均值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*} \]

,输出均值 \(\frac{1}{9}\left( 0+0+0+0+0+4+3+2+5 \right)\approx1.56\) ;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*} \]

,输出均值2.44;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*} \]

,输出均值2.56;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*} \]

,输出均值1.67;
  同样地,窗口依次输出值1.78、3.33、4.33、3.44、2.11、4.11、5.11、4.22、1.33、2.56、3.67、3.33。
  因此,输出的图像矩阵为

\[O=\begin{equation*} \begin{bmatrix} 1.56 & 2.44 & 2.56 &1.67 \\ 1.78 & 3.33 & 4.33 & 3.44 \\ 2.11 & 4.11 & 5.11 & 4.22 \\ 1.33 & 2.56 & 3.67 & 3.33 \end{bmatrix} \end{equation*} \]

2.中值滤波

一维:
  有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的窗口,进行中值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口的三个元素为[0,3,2],输出中值2;
  窗口滑至下一位置,三个元素为[3,2,4],输出中值3;
  窗口滑至下一位置,三个元素为[2,4,5],输出中值4;
  同样地,窗口依次输出值5、7、9、9、9、6、1。
  因此,输出的信号段为O=[2, 3, 4, 5, 7, 9, 9, 9, 6, 1]。

二维:
  有图像矩阵

\[I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*} \]

  定义长度为3*3的窗口,进行中值滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*} \]

,输出中值0;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*} \]

,输出中值2;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*} \]

,输出中值1;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*} \]

,输出中值0;
  同样地,窗口依次输出值2、3、5、1、2、5、5、5、0、2、3、0。
因此,输出的图像矩阵为

\[O=\begin{equation*} \begin{bmatrix} 0 & 2 & 1 & 0 \\ 2 & 3 & 5 & 1 \\ 2 & 5 & 5 & 5 \\ 0 & 2 & 3 & 0 \end{bmatrix} \end{equation*} \]

3.高斯滤波

一维:
  有信号段S=[3, 2, 4, 5, 13, 7, 9, 10, 1, 6],定义长度为3的卷积核[1, 0, 1],进行高斯滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口的三个元素为[0,3,2],输出卷积值2;
  窗口滑至下一位置,三个元素为[3,2,4],输出卷积值7;
  窗口滑至下一位置,三个元素为[2,4,5],输出卷积值7;
  同样地,窗口依次输出值17、12、22、17、10、16、1。
  因此,输出的信号段为O=[2, 7, 7, 17, 12, 22, 17, 10, 16, 1]。

二维:
  有图像矩阵

\[I=\begin{equation*} \begin{bmatrix} 4 & 3 & 1 & 6 \\ 2 & 5 & 7 & 1 \\ 2 & 0 & 6 & 10 \\ 7 & 3 & 5 & 9 \end{bmatrix} \end{equation*} \]

  定义长度为3*3的卷积核

\[\begin{equation*} \begin{bmatrix} 1 & 0 & 1 \\ 0 & 0 & 0 \\ 1 & 0 & 1 \\ \end{bmatrix} \end{equation*} \]

,进行高斯滤波的平滑处理,边缘区域以填充0的方式操作。
  首位置窗口内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 4 & 3 \\ 0 & 2 & 5 \\ \end{bmatrix} \end{equation*} \]

,输出卷积值5;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 4 & 3 & 1 \\ 2 & 5 & 7 \\ \end{bmatrix} \end{equation*} \]

,输出卷积值9;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 3 & 1 & 6 \\ 5 & 7 & 1 \\ \end{bmatrix} \end{equation*} \]

,输出卷积值6;
  窗口滑至下一位置,内容为

\[\begin{equation*} \begin{bmatrix} 0 & 0 & 0 \\ 0 & 1 & 6 \\ 0 & 7 & 1 \\ \end{bmatrix} \end{equation*} \]

,输出卷积值1;
  同样地,窗口依次输出值3、13、19、7、8、21、18、12、0、8、10、6。
  因此,输出的图像矩阵为

\[O=\begin{equation*} \begin{bmatrix} 5 & 9 & 6 & 1 \\ 3 & 13 & 19 & 7 \\ 8 & 21 & 18 & 12 \\ 0 & 8 & 10 & 6 \end{bmatrix} \end{equation*} \]


pdf下载:
https://download.csdn.net/download/Albert201605/88191979?spm=1001.2014.3001.5503


End.

标签:begin,end,平滑,滤波,三种,bmatrix,窗口,equation
From: https://www.cnblogs.com/flyup/p/17619234.html

相关文章

  • 卡尔曼滤波二维图像点跟踪
    原理参考https://zh.wikipedia.org/wiki/%E5%8D%A1%E5%B0%94%E6%9B%BC%E6%BB%A4%E6%B3%A2代码#include<Eigen/Core>#include<Eigen/Dense>#include"opencv2/highgui/highgui.hpp"#include"opencv2/video/tracking.hpp"#include<ios......
  • python 文件夹遍历三种方法
    os.listdir(path),返回path目录下的文件夹和文件,但不包含子文件夹里的文件夹和文件递归遍历所有文件importosdefrecursive_listdir(path):files=os.listdir(path)forfileinfiles:file_path=os.path.join(path,file)ifos.path.isfile......
  • 文件上传 - 存储的三种方案
     介绍优点缺点本地存储直接将图片保存到服务的硬盘开发便捷、成本低扩容难分布式文件系统自己搭建分布式文件系统(MinIO、FastDFS)容易实现扩容开发复杂度稍大第三方存储服务使用第三方存储服务(阿里云、华为云、腾讯云)开发简单、功能强大付费......
  • kube-proxy 三种模式分析
    kube-proxy三种模式分析kubernetes上面的service资源的实现方式是由kube-proxy提供的模式决定的kube-proxy提供三种模式:userspace(Kubernetes1.2版本之前)、iptables、ipvs(推荐的)如果不满足ipvs时,会自动降为iptables模式再讲三种模式前,先简单说下Service的工作原理;在......
  • 数据查询解决列名和java对象属性名对不上——三种方法
    问题描述:当使用查询语句时,返回来的数据出现null值。下面是数据库映射文件代码查询语句:<selectid="selectCarById"resultType="com.powernode.mybatis.pojo.Car">select*fromt_carwhereid=#{id}</select>下面是返回查询返回数据 原因是:查询结果集的列名:id,c......
  • Nginx 体系化之配置文件重载(平滑升级)原理
    Nginx作为一款高性能的开源Web服务器,以其出色的性能和灵活的配置而备受青眯,在Nginx中,配置文件有着决定性的作用,而配置文件的重载机制更是保障系统稳定运行的关键。本文将讲解一下Nginx配置文件重载的核心原理,以及讲述实际场景的应用Nginx配置文件重载原理1.Nginx配置文件......
  • 常用滤波
    常用滤波文档参考:https://sneak.blog.csdn.net/article/details/129629485常用滤波文档参考:https://sneak.blog.csdn.net/article/details/12962948未添加滤波算法main函数while(1){ HAL_ADC_Start(&hadc1); //开启ADC1,放置在while循环中 ADC_value=HAL_ADC_Get......
  • 信号的频谱分析与信号滤波
    信号的频谱分析与信号滤波试验目的:熟悉信号的频谱分析与信号滤波。信号的频谱分析例、建立一个含50Hz和120Hz幅值为2的正弦信号(sin),然后叠加一个幅值为1的随机信号,利用Matlab分析其频谱。并滤除噪声信号和120Hz正弦信号。实验提示:1、FFT谱分析:利用FFT分析含噪声的时域信号的频率组......
  • 【补充】前后端交互的三种方式
    【补充】前后端交互的三种方式前后端要打通----》从前端发送ajax---》核心:使用js发送http请求,接收返回使用原生JavaScript发送Ajax请求这是一种传统的方式,通过使用JavaScript的XMLHttpRequest对象来发送和接收数据。开发者需要手动处理请求和响应的各个阶段,包括请......
  • 在消费级GPU调试LLM的三种方法:梯度检查点,LoRA和量化
    LLM的问题就是权重参数太大,无法在我们本地消费级GPU上进行调试,所以我们将介绍3种在训练过程中减少内存消耗,节省大量时间的方法:梯度检查点,LoRA和量化。梯度检查点梯度检查点是一种在神经网络训练过程中使动态计算只存储最小层数的技术。为了理解这个过程,我们需要了解反向传播是......