• 大小: 0M
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: 其他
  • 标签: 其他  

资源简介

3f43610efc41412ee54a01d2fed70e5b.rar

资源截图

代码片段和文件信息

clc
clear
close all
load leafname.mat;   %载入光谱数据,一行代表一个样本
matrix = leafspectral_matrixZT;       % 将载入的光谱数据赋给matrix   
leafmsc = msc(matrix);                % 对光谱数据进行msc多元散射校正
%%                               绘制图像进行对比 msc前后的对比
plot(leafmsc‘)
figure(2)
plot(matrix‘)
leafmsc = leafmsc‘;
%%                               进行 sgolya平滑 和SG-1阶平滑
N = input(‘请输入拟合次数‘);    % 设置SG滤波器中多项式的阶数
F = input(‘设置窗口参数(奇数)‘);   % 设置SG滤波器中框架的边长
%%
[bg]=sgolay(NF);             % sgolay滤波器函数调用
                               % b的维度是F*F的.b的每一行代表一个滤波器的系数。中间那行用于稳态数据的平滑,
                               %b中间那行的前面所有行代表信号的末端数据,
                               %后面所有行代表信号起始阶段的数据。
[m n] = size(leafmsc)
%%   使用b中数据进行SG平滑
figure(3)
for i = 1:n
    ycenter = conv(leafmsc(:i)b((F+1)/2:)‘valid‘);    % 求稳态数据的平滑结果
    ybegin = b(end:-1:(F+3)/2:) * leafmsc(F:-1:1i);   % 求初始阶段数据的平滑结果(b和intensity的数据是矩阵想乘的关系,但要注意二者数据的顺序进行了颠倒)
    yend = b((F-1)/2:-1:1:) * leafmsc(end:-1:end-(F-1)i);  % 求末阶段段数据的平滑结果(b和intensity的数据是矩阵想乘的关系,但要注意二者数据的顺序进行了颠倒)

    Y = [ybegin;ycenter;yend];
    plot(Y)
    hold on;    
end
%% 使用g中数据进行SG平滑。g中数据代表不同阶的SG平滑效果。第一列代表0阶,第二列代表1阶.....
figure(4)     % 绘制SG_2阶的数据
for j = 1:n
   dy = zeros(m4);
   for p = 0:3
       dy(:p+1) = conv(leafmsc(:j) factorial(p)/(-4.44)^p * g(:p+1) ‘same‘);  % g(:1):平滑系数,g(:2):一阶导数系数。利用求导的方法求解系数,式中/(4.44)^p
   end
    
    plot(dy(:2));    % 改变  dy(:value)中的value可以画出不同阶数的SG平滑,1代表0阶,2代表1阶
    hold on
end
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       1859  2018-09-01 10:08  spectralmatrix_msc_sgolay.m

----------- ---------  ---------- -----  ----

                 1859                    1


评论

共有 条评论