移动均值滤波与中值滤波
来源:互联网 发布:nodejs 遍历数组 编辑:程序博客网 时间:2024/05/17 23:06
引言
基于MATLAB,使用中值滤波与均值滤波器进行滤波操作简单,原理也容易理解。好理解,也只针对于数据处在中间部分能够正好能够取到一个完整窗口,但是当数据恰巧在两端时,如何计算均值或者中值确是值得思考的问题。
均值滤波
均值滤波也称线性滤波,主要思想为邻域平均法,即用邻域的几个信号的平均值来代替相应位置的原值。
MATLAB中均值滤波只需要调用函数
yy(1) = y(1)yy(2) = (y(1) + y(2) + y(3))/3yy(3) = (y(1) + y(2) + y(3) + y(4) + y(5))/5yy(4) = (y(2) + y(3) + y(4) + y(5) + y(6))/5...
中值滤波器
中值滤波器是一种非线性数字滤波技术,通常用于去除图像或信号中的噪声。中值滤波器基于排序统计理论的一种能有效抑制噪声的非线性平滑滤波信号处理技术。中值滤波的特点即是首先确定一个以某个信号为中心点的邻域,一般为方形邻域(窗口),对于二维数据也可以为圆形、十字形等等,然后将邻域中各信号值排序,取其中间值(中值)作为中心信号的新值,这里邻域被称为窗口,当窗口移动时,利用中值滤波可以对信号进行平滑处理。
MATLAB中中值滤波器滤波函数为
当
当
例1: 若
例1: 若
问题来了,当
MATLAB的方法是,在边缘处,无法取到窗口宽度情况下用0填充到序列为窗口窗口宽度,然后取中值。举例说明:
对序列,使用
中值滤波前:
-7.9454 -5.8673 -7.2306 -6.7342 -7.9865 -6.3642 -5.8256 -7.3029
中值滤波后:
-5.8673 -6.7342 -7.2306 -6.7342 -6.7342 -6.7342 -6.3642 -5.8256
对于边缘信号第1个元素的中值滤波结果-5.8673=median(0 0 -7.9454 -5.8673 -7.2306),
对于边缘信号第2个元素的中值滤波结果-6.7342=median(0 -7.9454 -5.8673 -7.2306 -6.7342)。
·······
对于边缘第8个元素的中值滤波结果-5.8256=median(-6.3642 -5.8256 -7.3029 0 0)。
采用这个过程进行中值滤波方法在边缘处会产生比较大的失真情况出现。在维基百科wiki中提供了另外一种解决思路可供参考。下面是wiki提供的中值滤波方法,在边缘也进行了填充,但是是通过填充边缘值而不是MATLAB中填充0。
x = [2 80 6 3]y[1] = Median[2 2 80] = 2y[2] = Median[2 80 6] = Median[2 6 80] = 6y[3] = Median[80 6 3] = Median[3 6 80] = 6y[4] = Median[6 3 3] = Median[3 3 6] = 3y = [2 6 6 3].
根据MATLAB中中值滤波原理代码实现
%% ymm 为滤波后结果,y是一维原始信号n = 11 %这是窗口if rem(n,2)==1 right = (n-1)/2; left = (n-1)/2;else right = n/2-1; left = n/2;endymm = [];for i = 1:l u = i+right; d = i-left; if d<1 ymm =[ymm median([zeros(1,1-d) y(1:u)])]; elseif d>=1&u<=l ymm =[ymm median(y(d:u))]; elseif u>l ymm =[ymm median([y(d:l) zeros(1,u-l)])]; endend
通过上面的代码,将中值滤波修改为wiki中的边缘中值计算方法
n = 11if rem(n,2)==1 right = (n-1)/2; left = (n-1)/2;else right = n/2-1; left = n/2;endymm = [];for i = 1:l u = i+right; d = i-left; if d<1 zero = zeros(1,1-d); zero(:) = y(1); ymm =[ymm median([zero y(1:u)])]; elseif d>=1&u<=l ymm =[ymm median(y(d:u))]; elseif u>l zero = zeros(1,u-l); zero(:) = y(l); ymm =[ymm median([y(d:l) zero])]; endend
下图中,黑色曲线是原始信号真实值,绿色曲线是添加了高斯白噪声后的信号,蓝色和红色分别是均值和中值滤波效果。
下图中是MATLAB中的均值和中值滤波方法。在边缘处(两端),中值滤波结果有明显的失真现象。
这种边缘处理方式将很好的保留边缘值。
下面两幅图分别是wiki中提供的中值滤波的两端(边缘处)滤波失真情况减弱的效果。
红色是MATLAB提供的中值滤波方法滤波结果,在边缘处失真严重。青色为上面代码根据wiki的中值滤波方法,在边缘处与均值滤波效果一致。
参考
[1]https://en.wikipedia.org/wiki/Median_filter
[2]http://blog.sina.com.cn/s/blog_40a27f6a0101nq9x.html
[3]http://cn.mathworks.com/help/curvefit/smooth.html?searchHighlight=smooth&s_tid=doc_srchtitle
[4]http://cn.mathworks.com/help/signal/ref/medfilt1.html?searchHighlight=medfilt1&s_tid=doc_srchtitle
- 移动均值滤波与中值滤波
- 均值滤波 中值滤波 对称均值滤波
- 中值滤波VS.均值滤波
- 均值滤波vs中值滤波
- 中值和均值滤波
- 均值滤波,中值滤波,最大最小值滤波
- 图像滤波----高斯滤波/中值滤波/均值滤波
- 均值滤波、中值滤波、混合中值滤波C++源码实例
- MATLAB 图像 均值滤波 中值滤波
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波【MATLAB】【图像处理】
- 图像的均值滤波、中值滤波_JAVA
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- 均值滤波、中值滤波的matlab实现
- OLAP引擎——Kylin介绍
- 数据结构用栈解决n皇后问题
- 获得一个路径的文件文件名(4种方法)
- 从JAVA多线程理解到集群分布式和网络设计的浅析
- keil 预编译定义
- 移动均值滤波与中值滤波
- 【Unity插件】DoTween学习笔记
- java基础--while循环实现水仙花数
- 【python 新浪微博爬虫】python 爬取新浪微博24小时热门话题top500
- 算法导论程序18-最大值和最小值(Python)
- WCF发布和本地访问案例
- jQuery的模糊匹配
- 未名湖的烦恼
- 逻辑回归梯度下降法的推导过程