多元散射校正(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:[email protected]
[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效果圖如下: