[整理]Matlab之中心平滑滤波
滑动平均(moving average):在地球物理异常图上,选定某一尺寸的窗口,将窗口内的所有异常值做算术平均,将平均值作为窗口中心点的异常值。按点距或线距移动窗口,重复此平均方法,直到对整幅图完成上述过程,这种过程称为滑动平均。
滑动平均相当于低通滤波,在重力勘探和测井资料处理解释中常用此方法。
如果滑动窗长为n的话,滑动平均就是让数据通过一个n点的FIR滤波器,滤波器抽头系数都是1,这样取滑动平均就是起到序列平滑的作用。
Matlab中有多种滑动平均方法,比如filter和tsmovavg方法都可以实现。
普通滑动平均
基于filter的普通无权重滑动平均,有关于filter函数,可以doc filter进行详细信息的查看,这里我们由于只使用了简单的滑动平均,在此记录一种简单的滑动平均方法。
|
1
2
3
|
seqOriginal = rand(1,100);
windowSize = x;
seqFilter = filter( ones(1, windowSize) / windowSize, 1, seqOriginal );
|
上述命令实际计算的是:
|
1
2
3
4
5
6
7
8
|
x表示seqOriginal, y表示seqFilter, a表示windowSize。
y(1) = (1 / a) * x(1);
y(2) = (1 / a) * x(2) + (1 / a) * x(1);
...
y(a) = (1 / a) * x(a) + (1 / a) * x(a - 1) + ... + (1 / a) * x(1);
...
y(i) = (1 / a) * x(i) + (1 / a) * x(i - 1) + ... + (1 / a) * x(i - a + 1);
...
|
注:该方法由于是计算该点和之前windowSize的点的平均值,故其输出结果相对于原数据趋势有一个滞后。如果数据量比较少,可能影响较大。
中心滑动平均
还有一种滑动平均的方法为中心滑动平均,数据点位于滑动窗的中心进行平均值的计算。则上述的计算变为(在此为了方便虚数,设a为奇数):
|
1
2
3
4
5
6
7
|
y(1) = (1 / a) * x(1) + (1 / a) * x(2) + ... + (1 / a) * x((a+1) / 2);
y(2) = (1 / a) * x(1) + (1 / a) * x(2) + ... + (1 / a) * x((a+1) / 2 + 1);
...
y((a + 1) / 2) = (1 / a) * x(1) + (1 / a) * x(2) + ... + (1 / a) * x((a+1) / 2) + (1 / a) * x(a);
...
y(i) = (1 / a) * x(i - (a - 1) / 2) + (1 / a) * x(i - (a - 1) / 2 + 1) + ... + (1 / a) * x(i) + ... + (1 / a) * x(i + (a+1) / 2);
...
|
将上述式子转换为Matlab语句为:
|
1
2
3
4
5
|
seqOriginal = rand(1,100);
windowSize = x;
seq1 = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, seqOriginal );
seq2 = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, fliplr(seqOriginal) );
seqFilter = seq1 + fliplr(seq2) - 1 / windowSize * seqOriginal;
|
为了方便使用,为其写了一个function函数用来调用。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
%fun_CenterAverageFilter
%--------------------------------------------------------------------------
% seqFilter = fun_CenterAverageFilter(seqOriginal, windowSize)
% 中心滑动平均
%--------------------------------------------------------------------------
% seqFilter |Matrix| 滤波后输出序列
% seqOriginal |Matrix| 原始序列
% windowSize |Double| 滑动窗口
%--------------------------------------------------------------------------
%Author: Liu Tong
%History:
%----------------------------------------
%Rev: 1.0
%Date: 2016/12/22
% create.
%--------------------------------------------------------------------------
function seqFilter = fun_CenterAverageFilter(seqOriginal, windowSize)
seq1 = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, seqOriginal );
seq2 = filter( ones(1, windowSize / 2 + 1) / windowSize, 1, fliplr(seqOriginal) );
seqFilter = seq1 + fliplr(seq2) - 1 / windowSize * seqOriginal;
end
|
[整理]Matlab之中心平滑滤波的更多相关文章
- 基于MATLAB的中值滤波均值滤波以及高斯滤波的实现
基于MATLAB的中值滤波均值滤波以及高斯滤波的实现 作者:lee神 1. 背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤 ...
- matlab做gaussian高斯滤波
原文链接:https://blog.csdn.net/humanking7/article/details/46826105 核心提示 在Matlab中高斯滤波非常方便,主要涉及到下面两个函数: 函数 ...
- 《在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波》 --Gabor增强的具体实践
<在纹线方向上进行平滑滤波,在纹线的垂直方向上进行锐化滤波> --Gabor增强的具体实践 一.问 ...
- 基于MATLAB的中值滤波算法实现
在实时图像采集中,不可避免的会引入噪声,尤其是干扰噪声和椒盐噪声,噪声的存在严重影响边缘检测的效果,中值滤波是一种基于排序统计理论的非线性平滑计数,能有效平滑噪声,且能有效保护图像的边缘信息,所以被广 ...
- Matlab图像处理——中值滤波medfilt2问题解决
本文链接:https://blog.csdn.net/Pxzly1117/article/details/79201772程序: I=imread('13.jpg');%读入图像imshow(I);h ...
- 使用matlab进行傅里叶分析和滤波
傅里叶分析 公式法 下例 是将振幅为1的5Hz正弦波和振幅为0.5的10Hz正弦波相加之后进行傅里叶分析. clear all N=512; dt=0.02; n=0:N-1; t=n*dt; x=s ...
- iOS开发中的错误整理,再一次整理通过通知中心来处理键盘,一定记得最后关闭通知中心
一.打开通知中心,监听键盘的显示与隐藏 二.最后记得将监听通知的对象移除
- 【计算机视觉】OpenCV篇(6) - 平滑图像(卷积/滤波/模糊/降噪)
平滑滤波 平滑滤波是低频增强的空间域滤波技术.空间域滤波技术即不经由傅立叶转换,直接处理影像中的像素,它的目的有两类:一类是模糊:另一类是消除噪音.空间域的平滑滤波一般采用简单平均法进行,就是求邻近像 ...
- matlab中fspecial Create predefined 2-D filter以及中值滤波均值滤波以及高斯滤波
来源: 1.https://ww2.mathworks.cn/help/images/ref/fspecial.html?searchHighlight=fspecial&s_tid=doc_ ...
随机推荐
- mac-终端命令
发现一个比较好点的关于mac终端下命令的解释文档,全文粘贴到这,免得丢了(原文在此): Mac终端 命令行 [一]bash 终端设置 1.环境变量设置首先要知道你使用的Mac OS X是什么 ...
- Firefox 插件 FlashGot 创建 Axel 下载任务
运行脚本: #!/bin/sh# FlashGot Command line arguments template: [URL] [COMMENT] [FOLDER]if [ $# = 3 ]; th ...
- socket模块的getaddrinfo方法详解
getaddrinfo方法用于通过url解析dns import sys,socket def dns_resolver(url): result = socket.getaddrinfo(url, ...
- hadoop namenpde机制
1:通过查看hadoop的临时目录,看到有fsimage和edit文件 2:fsimage时namenode的元数据内存镜像文件,edit文件时hadoop客户端的操作记录, edit_inproce ...
- STL学习 - map
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值. 一.map的说明 1 头文件 #include <map> 2 ...
- C 程序解决实际文件案例
1,C程序参数(编写带参数 的C--argc,argv[]程序),带参数的Main程序 程序功能说明: 把命令行参数中的前一个文件名标识 的文件,复制到后一个文件名标识的文件中,如只有一个则把该文件写 ...
- 【Python】Celery异步处理
参考:http://www.cnblogs.com/znicy/p/5626040.html 参考:http://www.weiguda.com/blog/73/ 参考:http://blog.csd ...
- python中获取上一个月一号的方法
业务场景: 我们经常会跑一些月级别或者周级别的报表. 周级别的报表还比较好确定,就是七天前的直接用timedelta(days=7)来获取开始日期就可以了; 但是月级别的报表就要麻烦一些,因为time ...
- CubieTruck上安装mjpg_streamer
最近手头项目需要用到一个上位机,需要在上位机上实现远程访问及视频监控.其中视频监控采用了网上资料较多的mjpg_streamer进行视频处理.在使用中遇到许多坑也一并记录下来. 首先安装依赖环境和检测 ...
- Data Transformation / Learning with Counts
机器学习中离散特征的处理方法 Updated: August 25, 2016 Learning with counts is an efficient way to create a compact ...