光谱测量数据处理(matlab)

本文详细介绍了光谱测量数据的处理流程,包括数据格式、数据导出与处理,以及地物光谱特征分析。使用MATLAB进行数据处理,涉及光谱曲线平滑和一阶导数计算。通过对实验数据的筛选、平滑和插值,计算了地物反射率,并进行了制图输出,揭示了地物的光谱特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、数据格式

导出文件:

在这里插入图片描述

文件内容:

在这里插入图片描述

内容说明:

Columnname
1Wavelengths (nanometers)
2Reference Values (see below)
3Target Values (see below)
4Reflectance (percent)

二、数据处理

2.1 数据导出

将光谱仪测的不同地物的光谱数据以SVC软件中导出到计算机中,并按不同地物类型存储在不同Excel表格中。

2.2 数据处理

(一)原理公式

在这里插入图片描述
实验采用垂直测量方法,计算公式为

在这里插入图片描述
式中,L——测得地物反射辐射通量,Rr 为白板反射率(已知) ; Lr 为测得白板反射辐射能量;

(二)处理步骤

Step1:共100多组数据,观察每个数据的图片结合实地记录筛选可以利用的数据

Step2:由于仪器光谱突变,将筛选好的数据进行在SVC HR软件中的平滑操作(overlay)

Step3:将处理后的数据去除文件头,生成裸数据并保存到txt文本文件中

Step4:求每类地物的光谱数据平均值,生成每类地物的光谱数据

Step5:由于白板反射率波段和每类地物的光谱波段不匹配,对实测数据进行插值

Step6:根据反射率公式选取文件中第四列数据(百分比)与白板反射率的相乘操作

Step7:根据不同需要进行制图输出

(三)matlab处理代码

%----------------------------------------------------------------
%光谱处理代码
%
%时间:2019619%----------------------------------------------------------------
%去除文件头代码
%输入.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; 

(二)处理结果

在这里插入图片描述

matlab中,sig文件是光谱测量数据的一种文件格式。通常,我们可以通过一些处理代码来处理sig文件并将其转换为其他形式的数据。有两个方法可以处理sig文件。 第一个方法是将sig文件中的数据部分提取出来并保存为Excel文件。首先,需要使用一段代码将sig文件的头部代码去除,然后将数据部分保存为Excel文件。具体的代码可以参考引用中的示例代码。 第二个方法是将生成的多个Excel文件合并成一个Excel文件,其中每个文件作为一个sheet,每个sheet的名称可以根据需要设置为测试序号。首先,需要将所有的Excel文件读取进来,然后使用一段代码将它们合并成一个文件,并设置sheet的名称。具体的代码可以参考引用中的示例代码。 这两种方法可以根据实际需求选择使用。如果需要进一步处理光谱测量数据,可以先将sig文件转换为Excel文件,然后再使用matlab中的相关函数进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SVC光谱数据(sig格式)matlab初步处理](https://blog.csdn.net/weixin_52726311/article/details/128749276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值