多元散射校正(MSC)是高光谱数据预处理常用的算法之一,MSC可以有效的消除由于散射水平不同带来的光谱差异,从而增强光谱与数据之间的相关性。该方法通过理想光谱修正光谱数据的基线平移和偏移现象,而实际中,我们无法获取真正的理想光谱数据,因此我们常常假设所有光谱数据的平均值作为”理想光谱”。
MSC具体实现方法如下:
①求得所有光谱数据的平均值作为“理想光谱“;
②将每个样本的光谱与平均光谱进行一元线性回归,求解最小二乘问题得到每个样本的基线平移量和偏移量;
③对每个样本的光谱进行校正:减去求得的基线平移量后除以偏移量,得到校正后的光谱;
下面给出MSC算法的MATLAB代码:
function x_msc=my_msc(x,x_sta)
% This function can perform multivariate scattering correction on the data
% x is the input data,x_sta is standard data,x_msc is output data
% Auther:等等登登-Ande
% Email:18356768364@163.com
[m,n]=size(x);
A=[ones(1,n)' x_sta'];
%对A矩阵SVD分解
[u s v]=svd(A);
%SVD求解最小二乘问题
A_plus=v*pinv(s)*u';
C=A_plus*x';%C即为所要求解的系数矩阵
%对原始光谱进行处理,减去偏移量与系数
P=C(1,:)
bais=P'*ones(1,n);
x_msc1=x-bais;
P=C(2,:);
coeff=P'*ones(1,n);
x_msc=x_msc1./coeff;
MSC效果图如下: