在近红外等光谱数据分析建模过程中,最关键的一步除了特征选择之外就是光谱数据预处理,预处理的原因是光谱数据除了纯光谱(pure spectra)之外还包含基线漂移、噪声等信号,与此同时存在着因样本大小以及环境等因素带来的谱线偏移,在进行特征分析前能够最大限度的滤除无用及干扰信号是数据分析及信号处理领域最基本、最热门的方向之一,而常用近红外光谱预处理方法包含SNV,MSC,SG,FT以及求导等操作,但是综合分析方法,最有效、最基本的两种是MSC和SNV。
1.SNV:标准正态变化(Standard Normal Variate)
代码实现(MATLAB):
[m,n] = size(Ynir);
Ym = mean(Ynir,2);
dY = Ynir - repmat(Ym,1,n);
Ysnv = dY./repmat(sqrt(sum(dY.^2,2)/(n-1)),1,n);
2.MSC: 多元散射校正(Multiplicative Scatter Correction)
代码实现:
me=mean(X);
[m,n]=size(X);
for i=1:m,
p=polyfit(me,X(i,:),1);
Xmsc(i,:)=(X(i,:)-p(2)*ones(1,n))./(p(1)*ones(1,n));
end
3. 导数和平滑滤波
导数和平滑滤波方法在进行重叠光谱处理时能够发挥作用,一般不是很常用,但是部分研究学者会将该方法和其他常见建模方法相结合寻找最佳建模方式。
X1st = diff(X,1);% 一阶导数
X2st = diff(X,2);% 二阶导数
Xsmooth=smooth(X,30,'lowess'); %平滑滤波
%%%%%%
最近有同学问如何确定自己处理后的图形是否正确,我在此贴几幅图供大家参考(不对的地方也欢迎大家指导)。
1.原始光谱图(其实不是真正意义的原始光谱,反射光强)
2. MSC处理结果
3. SNV处理结果
注:SNV和MSC处理结果轮廓基本相似,但是纵轴数值不同,主要原因是SNV是纵向求均值,而MSC是横向求均值。
................................................................................................................................................
20220503更新
我近期更新了近红外光谱分析综述和分析策略,希望能够给大家带来帮助,
http://t.csdn.cn/3KF6c
欢迎关注公众号,光谱学与光谱分析,或联系个人邮箱[email protected],新的交流群