光谱测量数据处理(matlab)
一、数据格式
导出文件:
文件内容:
内容说明:
Column | name |
---|---|
1 | Wavelengths (nanometers) |
2 | Reference Values (see below) |
3 | Target Values (see below) |
4 | Reflectance (percent) |
二、数据处理
2.1 数据导出
将光谱仪测的不同地物的光谱数据以SVC软件中导出到计算机中,并按不同地物类型存储在不同Excel表格中。
2.2 数据处理
(一)原理公式
实验采用垂直测量方法,计算公式为
式中,L——测得地物反射辐射通量,Rr 为白板反射率(已知) ; Lr 为测得白板反射辐射能量;
(二)处理步骤
Step1:共100多组数据,观察每个数据的图片结合实地记录筛选可以利用的数据
Step2:由于仪器光谱突变,将筛选好的数据进行在SVC HR软件中的平滑操作(overlay)
Step3:将处理后的数据去除文件头,生成裸数据并保存到txt文本文件中
Step4:求每类地物的光谱数据平均值,生成每类地物的光谱数据
Step5:由于白板反射率波段和每类地物的光谱波段不匹配,对实测数据进行插值
Step6:根据反射率公式选取文件中第四列数据(百分比)与白板反射率的相乘操作
Step7:根据不同需要进行制图输出
(三)matlab处理代码
%----------------------------------------------------------------
%光谱处理代码
%
%时间:2019年6月19日
%----------------------------------------------------------------
%去除文件头代码
%输入.sig文件
fileFolder=fullfile('E:\2019-06-11-下');
%引号内是需要遍历的路径,填绝对路径,然后保存在fileFolder
dirOutput = dir(fullfile(fileFolder,'*.sig'));
%引号内是文件的后缀,写'.txt'则读取后缀为'.txt'的文件
fileNames = {dirOutput.name};
%将所有文件名,以矩阵形式按行排列,保存到fileNames中
for i=fileNames
i_trace = strcat('E:\2019-06-11-下\',i)%将字符串组合起来
i_trace=char(i_trace)
i=char(i)
ind=findstr(i-1,'.');
i=i(1:ind)
M = dlmread(i_trace,'',25,0)
i_trace_txt=strcat('E:\2019-06-11-下\',i,'txt')
%num1, num2, num3, num4]=textread(i_trace,'%f %f %f f','headerlines',29);
% A={num1,num2,num3,num4};
% eval(['T',num2str(n),'=','load(i_trace{1,1})',';']);
dlmwrite(i_trace_txt, M, 'delimiter', '\t','precision', 6,'newline', 'pc')
end
%生成平均值代码
clc;
clear all;
close all;
fileFolder=fullfile('E:\txt\柏油路');
%引号内是需要遍历的路径,填绝对路径,然后保存在fileFolder
dirOutput=dir(fullfile(fileFolder,'*.txt'));
%引号内是文件的后缀,写'.txt'则读取后缀为'.txt'的文件
fileNames={dirOutput.name};
%将所有文件名,以矩阵形式按行排列,保存到fileNames中
sumM = zeros(741,2);
for i=fileNames
i
i_trace = strcat('E:\txt\柏油路\',i); %将字符串组合起来
i_trace=char(i_trace);
i = char(i);
ind=findstr(i,'.');
i=i(1:ind-1);
M = dlmread(i_trace,'',0,0);
sumM(:,1) = M(:,1);
sumM(:,2) = sumM(:,2) + M(:,4);
%i_trace_txt=strcat('E:\2019-06-11-下\ave.txt''.txt');
%dlmwrite(i_trace_txt, M, 'delimiter', '\t','precision', ,'newline', 'pc')
end
sumM;
aveM(:,1)=sumM(:,1);
aveM(:,2)=sumM(:,2)/11.0;
aveM
save('E:\txt\柏油路\ave.txt','aveM','-ascii');
%插值以及计算反射率代码
clc;
clear all;
close all;
fileName='E:\txt\110-116 118-121小路\ave.txt';
[Target_Lambda,Target_Percent]=textread('E:\txt\110-116 118-121小路\ave.txt','%f %f','headerlines',0);
% M = dlmread('E:\txt\柏油路\ave.txt','',0,0)
% title('柏油路光谱曲线',);
[Whiteboard_Lambda,Whiteboard_Reflectance]= textread('E:\白板定标文件.txt',' %f %f','headerlines',10);
Target_interp = interp1(Target_Lambda,Target_Percent,Whiteboard_Lambda);
Target_Reflectance=Target_interp.*Whiteboard_Reflectance;
A=zeros(957,2);
A(:,1)=Whiteboard_Lambda;
A(:,2)=Target_Reflectance;
save('E:\txt\110-116 118-121小路\光谱曲线.txt','A','-ascii');
处理后导出数据
%制图输出
figure,
plot(Whiteboard_Lambda,Target_Reflectance);
hold on;
plot(Whiteboard_Lambda,Target_interp);
legend('柏油路反射率','柏油路百分比原图像', 'Location', 'SouthEast');
xlabel('波段(nm)','fontsize',12,'fontweight','bold','color','b');
ylabel('反射率/百分比(%)','fontsize',12,'fontweight','bold','color','b');
title('柏油路反射率和百分比','fontsize',15,'fontweight','bold');
grid on;
figure,
plot(Whiteboard_Lambda,Target_Reflectance);
% legend('柏油路反射率', 'Location', 'SouthEast');
xlabel('波段(nm)','fontsize',12,'fontweight','bold','color','b');
ylabel('反射率(%)','fontsize',12,'fontweight','bold','color','b');
title('柏油路反射率','fontsize',15,'fontweight','bold');
grid on;
2.3 处理结果
三、地物光谱特征分析
3.1 光谱曲线平滑
(一)处理代码
% smooths平滑操作代码
Reflectance_Smooth = smooth(Target_Reflectance,30,'lowess');
figure,
plot(Whiteboard_Lambda,Reflectance_Smooth);
(二)处理结果
3.2 光谱曲线一阶导数
(一)处理代码
% 一阶导数代码
figure,
plot(Whiteboard_Lambda,Reflectance_Smooth);
h=get(gca,'children')
x = get(h,'XData');
y = get(h,'YData');
dy = diff(y) ./ diff(x);
axis tight;
plot(x(1:end-1),dy,'r')
xlabel('波段(nm)','fontsize',12,'fontweight','bold','color','b');
ylabel('导数','fontsize',12,'fontweight','bold','color','b');
title('柏油路反射率:一阶导数','fontsize',15,'fontweight','bold');
% legend('柏油路反射率:一阶导数');
grid on;
(二)处理结果