1在envi中以csv格式导出roi。该文件只能包含数值(从envi导出来的时候前面有一些头文件信息,用matlab读出之前需要删除这些信息)
2matlab读取,使用csvread函数读取路径。
clc;
clear;
% close all;
%% 打开文件
%%%%%%%%%
CA1 = csvread('G:\master\high_data\fish_duzi.csv');%读取文件名及路径
Data = CA1;
%%%%%%%%%
%% 作图,原始图
figure(1);
title('光谱图');
xlabel('Wavenumber(cm-1)');
ylabel('Absorbance');
hold on;
plot(Data');
3定义x_msc,跟主函数中使用的时候是一样的名字
%% 多元散射校正MSC
function [x_msc]=msc(x,xref)%function名跟文件名一致
% Multiplicative Scatter Correction
%
% [x_msc]=msc(x,xref)
%
% input
% x (samples x variables) spectra to correct
% xref (1 x variables) reference spectra (in general mean(x) is used)
%
% Output
% x_msc (samples x variables) corrected spectra
%
% By Cleiton A. Nunes
% UFLA,MG,Brazil
[m n]=size(x);
rs=xref;cw=ones(1,n);
mz=[];mz=[mz ones(1,n)'];mz=[mz rs'];
[mm,nm]=size(mz);
wmz=mz.*(cw'*ones(1,nm));
wz=x.*(ones(m,1)*cw);
z=wmz'*wmz;
[u,s,v]=svd(z);sd=diag(s)';
cn=10^12;
ms=sd(1)/sqrt(cn);
cs=max(sd,ms );
cz=u*(diag(cs))*v';
zi=inv(cz);
b=zi*wmz'*wz';B=b';
x_msc=x;
p=B(:,1);x_msc=x_msc-(p*ones(1,mm));
p=B(:,2);x_msc=x_msc./(p*ones(mm,1)');
4收集csv矩阵的行列,并调用x_msc.
% CA1 = csvread('G:\master\high_data\fish_duzi(1).csv');
clc;
clear;
% close all;
%% 打开文件
%%%%%%%%%
CA1 = csvread('G:\master\high_data\fish_duzi.csv');%读取文件名及路径
Data = CA1;
%%%%%%%%%
%% 作图,原始图
figure(1);
title('光谱图');
xlabel('Wavenumber(cm-1)');
ylabel('Absorbance');
hold on;
plot(Data');
%% 数据处理
Absorbance = Data;
[Absorbance_m,Absorbance_n]=size(Absorbance);
Absorbance_mean = mean(Absorbance);
% %% 吸光度波数
% Absorbance=data; %得到吸光度
% % Absorbance=Absorbance;
% [Absorbance_m,Absorbance_n]=size(Absorbance);
% Wavenumber=data(:,1:2:end); %得到波数
% % Wavenumber=1:141;
% Absorbance_mean=mean(Absorbance);%每个样本吸光度平均
% %% 多元散射校正MSC
% Absorbance_msc=msc(Absorbance,Absorbance_mean);
% figure(2);
% plot(Wavenumber,Absorbance_msc);
% %set(gca,'XDir','reverse'); % 横坐标从大到小
% title('多元散射校正MSC');
% xlabel('Wavenumber(cm-1)');
% ylabel('Absorbance');
%% 多元散射校正MSC
msc_file_name = 'G:\master\high_data\newfish.csv';%导出文件名及路径
a=1
Absorbance_msc=x_msc(Absorbance,Absorbance_mean);
csvwrite(msc_file_name,Absorbance_msc,0,0);
figure(2);
title('多元散射校正MSC');
xlabel('Wavenumber(cm-1)');
ylabel('Absorbance');
hold on;
plot(Absorbance_msc');
运行结果(横轴是波长,纵轴为吸光度):
另:
SNV标准正交变换同理
1读取文件存于data
2定义snv函数
3snv(data)
snv函数:
文件名:x_snv.m
function [x_snv] = snv(x)
% Standard Normal Variate
%
% [x_snv] = snv(x)
%
% input:
% x (samples x variables) data to preprocess
%
% output:
% x_snv (samples x variables) preprocessed data
%
% By Cleiton A. Nunes
% UFLA,MG,Brazil
[m,n]=size(x);
rmean=mean(x,2);
dr=x-repmat(rmean,1,n);
x_snv=dr./repmat(sqrt(sum(dr.^2,2)/(n-1)),1,n);
主函数:
% CA1 = csvread('G:\master\high_data\fish_duzi(1).csv');
clc;
clear;
% close all;
%% 打开文件
%%%%%%%%%
CA1 = csvread('G:\master\high_data\fish_duzi.csv');
Data = CA1;
%%%%%%%%%
%% 作图,原始图
figure(1);
title('光谱图');
xlabel('Wavenumber(cm-1)');
ylabel('Absorbance');
hold on;
plot(Data');
% %% 数据处理
%
% Absorbance = Data;
% [Absorbance_m,Absorbance_n]=size(Absorbance);
% Absorbance_mean = mean(Absorbance);
%% 多元散射校正MSC
msc_file_name = 'G:\master\high_data\newfish.csv';
a=1
Absorbance_snv=x_snv(Data);
csvwrite(msc_file_name,Absorbance_snv,0,0);
figure(2);
title('标准正交变换SNV');
xlabel('Wavenumber(cm-1)');
ylabel('Absorbance');
hold on;
plot(Absorbance_snv');
运行结果: