本文内容转自:“https://blog.csdn.net/qq_35166974/article/details/95175803”
多元散射校正(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效果图如下:
![原始数据](https://i-blog.csdnimg.cn/blog_migrate/4a9ac4863651f1ac6397b34c544c6bf7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7d73ec01c224fb43d8c5313d0fef8e71.png)