美文网首页生态遥感的学习笔记遥感生态笔记
使用Matlab对MODIS数据进行SG滤波

使用Matlab对MODIS数据进行SG滤波

作者: 荔枝猪 | 来源:发表于2019-11-19 09:43 被阅读0次

    需求

    Savitzky-Golay滤波器(简称为S-G滤波器),是一种在时域内基于局域多项式最小二乘法拟合的滤波方法。
    因为云覆盖、气溶胶等大气因素会对MODIS数据等造成噪声影响,有必要用滤波等方法来减小或消除这种影响。

    以处理植被指数EVI数据为例

    %% 读取一个现有文件,获取EVI数据的矩阵行列大小
    [a,R] = geotiffread('D:\MODIS\EVI\evi20010101.tif');
    info = geotiffinfo('D:\MODIS\EVI\evi20010101.tif');
    [m,n] = size(a);    
    
    %% 读取EVI并进行重排列
    evi_dz = dir('D:\MODIS\EVI\*.tif');     % 获取所有tif文件名
    qs = length(evi_dz);                    % 总期数
    evisum = zeros(m*n,1)+NaN;              % 构建和EVI同大小的NaN矩阵
    k = 1;                                  % 初始化为1
    for i = 1:length(evi_dz)
        filename = strcat(evi_dz(i).folder,'\',evi_dz(i).name); % 文件路径和文件名
        evi = double(importdata(filename)); % 获取evi数据
        evi = reshape(evi,m*n,1);           % 转为1列,方便处理
        evi(evi<-0.2) = NaN;                % 缺失值设为nan
        evisum(:,k) = evi;                  % 第一列为第一个时间的evi          
        k = k+1;  
    end
    
    %% 因为有部分缺失数据,所以先进行插值
    evisum = fillmissing(evisum,'linear',2); % 对每行进行线性插值,可能会产生超出正常范围的值
    evisum(evisum<-0.2) = NaN;               % 将小于正常范围最小值-0.2的值设为NAN
    evisum(evisum>1)= NaN;                   % 将大于正常范围最大值1的值设为NAN
    
    %% SG滤波
    for i = 1:m*n
        data1 = evisum(i,:);
        data_sg = sgolayfilt(data1,3,5);     % sg滤波,参数设置为默认的3,5
        evisum(i,:) = data_sg;               % 重建EVI
    end
    
    %% 输出tif影像
    for k = 1:qs
        data2 = evisum(:,k);
        evi = reshape(data2,m,n);            % 重排列为原矩阵大小
        evi(evi<-0.2) = NaN;                 % 超出正常范围的设为NaN
        evi(evi>1) = NaN;                    % 超出正常范围的设为NaN
        evi(isnan(evi)) = -9999;             % 将NAN值设为-9999
        filenem2 = ['D:\MODIS\EVI2\',evi_dz(k).name(4:15)];  % 输出文件夹和文件名
        geotiffwrite(filenem2,evi,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);  % 输出
    end
    

    补充说明

    1. 本例简单粗暴直接对原数据进行了全部滤波,实际中如果是MODIS数据可以考虑根据其质量控制数据,只将其不可信的像元进行滤波处理,可信像元保持原值。如考虑质量控制可参考其他大神的分享:
      基于matlab的MOD13A2-NDVI的植被指数重建-SG滤波与质量控制文件
    2. 批量设NAN值,可方便在ArcGIS中可视化展示
      基于Python的SetNull批量处理

    相关文章

      网友评论

        本文标题:使用Matlab对MODIS数据进行SG滤波

        本文链接:https://www.haomeiwen.com/subject/hxziictx.html