读取csv格式高光谱文件,并预处理。

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');

运行结果:

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值