光谱测量数据处理(matlab)

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


一、数据格式

导出文件:

在这里插入图片描述

文件内容:

在这里插入图片描述

内容说明:

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中,光谱数据处理是一个常见的任务。根据引用中提到的代码,可以使用`textscan`函数来读取光谱数据文件。该函数可以将文件中的数据按照指定的格式进行解析,例如读取两列数据(频率和幅度)。在读取数据之后,可以使用不同的算法和方法对光谱数据进行处理。 光谱数据处理的具体步骤会根据具体的需求和应用而有所不同。一般来说,光谱数据处理的主要目标包括去噪、平滑、峰值检测、峰值拟合、峰值提取等。可以使用滤波器对数据进行去噪和平滑处理,例如低通滤波器或中值滤波器。峰值检测可以通过寻找数据中的局部极大值点来实现,而峰值拟合则可以使用曲线拟合算法来拟合光谱中的峰值形状。最后,峰值提取可以通过计算峰值的位置、强度和宽度等参数来提取光谱数据中的关键特征。 除了光谱数据处理外,Matlab还提供了丰富的工具和函数用于信号处理、图像处理和路径规划等方面的任务,如引用所示。这些功能可以结合光谱数据处理一起使用,以实现更复杂的应用。例如,在图像处理中,可以使用光谱数据来增强图像的特定频率成分或进行颜色调整。在路径规划中,可以使用光谱数据来辅助寻找最佳路径或避开噪声干扰。 如果您需要更具体的光谱数据处理方法或代码示例,可以参考引用中的论文或其他相关资料。这篇论文提出了一种基于三维荧光图谱分析的新方法,并给出了相应的代码实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [基于MATLAB进行荧光光谱数据处理包括三维荧光光谱图、等高线图、激发光谱图、发射光谱图](https://blog.csdn.net/m0_60703264/article/details/130072605)[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_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值