高光谱数据预处理算法——移动窗口平均平滑

今天介绍高光谱数据预处理算法中的:移动窗口平均平滑算法。

顾名思义,移动窗口平均平滑的意思就是平滑窗口在数据上移动求平均,从而对数据进行去噪。上一节我们讲的标准化是对全体样本数据的移动、缩放,从而消除各个样本数据间的差异。而移动窗口平均平滑是对单个样本数据进行平滑,消除数据中的噪音。下面,我将介绍该算法的原理:

上图为一光谱数据,我们要对其进行移动窗口平均平滑,首先确定窗口大小,本例中我们将窗口大小设为5(窗口大小为奇数)。因此,从头选择光谱数据上的五个点:x-2,x-1,x0,x1,x2,对其进行求平均,然后赋值给x0:

其中n为窗口大小,这里为5。之后移动窗口,使窗口中心点遍历整个光谱数据,即完成了移动窗口平均平滑。

这里我们会发现,处理后的光谱数据会比原始光谱短,因此,我们在处理光谱数据之前,要先对光谱数据补零,然后进行拟合,从而使处理后的光谱数据与原光谱数据大小一致。

下面是实现代码:

function pdata=moving_average(data,window)

%该函数实现对数据的移动窗口平均平滑
%data为输入的原始数据,window为窗口大小,pdata为输出数据
%Author:等等登登-ande
%Email:18356768364@163.com

[m,n] = size(data);	
pdata = zeros(m,n);	
%参数初始化
if nargin == 1
	window = 3;	 
elseif round(window/2) == window/2
	error('光谱窗口宽度必须是奇数')
end
%对原始数据进行补零
center = floor(window/2);
extdata = [zeros(m,center) data zeros(m,center)];
%对补零后的数据进行拟合
for k = 1:m
	start = polyfit(center+1:center+4,extdata(k,center+1:center+4),2);	
    extdata(k,1:center) = polyval(start,1:center);
	bend = polyfit(n-3+center:n+center,extdata(k,n-3+center:n+center),2);
	extdata(k,n+center+1:n+window-1) = polyval(bend,n+center+1:n+window-1);
end
%求平滑后的数据
for i = 1+center:n+center
	pdata(:,i-center) = mean(extdata(:,i-center:i+center)')';	
end

处理结果:

原始数据
平滑数据

Get better every day!!! 

  • 15
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值