1、sen代码:

    % @author yinlichang3064@163.com [a,R]=geotiffread(‘D:\NDVI\7NDVI_Year\2006.tif’);%先导入投影信息 info=geotiffinfo(‘D:\NDVI\7NDVI_Year\2006.tif’); [m,n]=size(a); cd=2020-2006+1;%时间跨度,根据需要自行修改 datasum=zeros(mn,cd)+NaN;
    k=1; for year=2006:2020 %起始年份 filename=[‘D:\NDVI\7NDVI_Year\’,int2str(year),’.tif’]; data=importdata(filename); data=reshape(data,m
    n,1); datasum(:,k)=data;

    1. k=k+1;

    end

    result=zeros(m,n)+NaN;

    for i=1:size(datasum,1)

    1. data=datasum(i,:);
    2. if min(data)>0 %判断是否是有效值,我这里的有效值必须大于0
    3. valuesum=[];
    4. for k1=2:cd
    5. for k2=1:(k1-1)
    6. cz=data(k1)-data(k2);
    7. jl=k1-k2;
    8. value=cz./jl;
    9. valuesum=[valuesum;value];
    10. end
    11. end
    12. value=median(valuesum);
    13. result(i)=value;
    14. end

    end

    filename=[‘D:\NDVI\7NDVI_Year\趋势\sen.tif’];

    geotiffwrite(filename,result,R,’GeoKeyDirectoryTag’,info.GeoTIFFTags.GeoKeyDirectoryTag)

    2、mk代码:

    % @author yinlichang3064@163.com

    clear

    [a,R]=geotiffread(‘D:\NDVI\7NDVI_Year\2006.tif’); %先导入投影信息

    info=geotiffinfo(‘D:\NDVI\7NDVI_Year\2006.tif’);%先导入投影信息

    [m,n]=size(a);

    cd=15; %时间跨度

    datasum=zeros(m*n,cd)+NaN;

    p=1;

    for year=2006:2020 %起始年份

    1. filename=['D:\NDVI\7NDVI_Year\',int2str(year),'.tif'];
    2. data=importdata(filename);
    3. data=reshape(data,m*n,1);
    4. datasum(:,p)=data; %
    5. p=p+1;

    end

    sresult=zeros(m,n)+NaN;

    for i=1:size(datasum,1) %

    1. data=datasum(i,:);
    2. if min(data)>0 % 有效格点判定,我这里有效值在0以上
    3. sgnsum=[];
    4. for k=2:cd
    5. for j=1:(k-1)
    6. sgn=data(k)-data(j);
    7. if sgn>0
    8. sgn=1;
    9. else
    10. if sgn<0
    11. sgn=-1;
    12. else
    13. sgn=0;
    14. end
    15. end
    16. sgnsum=[sgnsum;sgn];
    17. end
    18. end
    19. add=sum(sgnsum);
    20. sresult(i)=add;
    21. end

    end

    vars=cd(cd-1)(2*cd+5)/18;

    zc=zeros(m,n)+NaN;

    sy=find(sresult==0);

    zc(sy)=0;

    sy=find(sresult>0);

    zc(sy)=(sresult(sy)-1)./sqrt(vars);

    sy=find(sresult<0);

    zc(sy)=(sresult(sy)+1)./sqrt(vars);

    geotiffwrite(‘D:\NDVI\7NDVI_Year\趋势\MK检验结果.tif’,zc,R,’GeoKeyDirectoryTag’,info.GeoTIFFTags.GeoKeyDirectoryTag); %注意修改路径

    %注意:以下代码不要用,因为小于1.96的全设置成空白,图像不美观。 [a,R]=geotiffread(‘D:\NDVI\7NDVI_Year\2006.tif’); %先导入投影信息

    info=geotiffinfo(‘D:\NDVI\7NDVI_Year\2006.tif’);%先导入投影信息

    data=importdata(‘D:\NDVI\7NDVI_Year\趋势\MK检验结果.tif’);

    sen_value=importdata(‘D:\NDVI\7NDVI_Year\趋势\sen.tif’);

    sen_value(abs(data)<1.96)=NaN; %MK结果值高于1.96则认为通过了显著性95%

    geotiffwrite(‘D:\NDVI\7NDVI_Year\趋势\通过显著性95%的MK+sen趋势分析结果.tif’,sen_value,R,’GeoKeyDirectoryTag’,info.GeoTIFFTags.GeoKeyDirectoryTag);%注意修改路径

    3、做完前面两步,打开ArcGIS把两幅tif图像导入进去
    进行重分类操作,「重分类」工具在「ArcToolbox」-「Spatial Analyst工具」-「重分类」-「重分类」
    后续操作参考这里,若链接没了,看如下图
    (1)、对sen图进行重分类,设置的值如下(SNDVI就是sen图各像元的NDVI):

    • SNDVI≤−0.0005 植被退化
    • −0.0005≤SNDVI≤0.0005 植被生长稳定
    • SNDVI≥0.0005 植被改善

    截屏2021-04-06 17.55.06.png

    • 重分类结果:
      • -1:退化
      • 0:稳定
      • 1:改善

    (2)、对mk图进行重分类,设置的值如下:

    • |Zs|≤1.96 未通过95%置信度检验,不显著
    • |Zs|≥1.96 通过95%置信度检验,显著

    截屏2021-04-06 17.55.23.png

    • 重分类结果:
      • 1不显著
      • 2显著

    4、用「ArcToolbox」-「Spatial Analyst工具」-「数学分析」-「乘」工具将分类后的两幅图像进行(栅格)相乘,得到最终趋势变化图像(参考下图)。后续可以进行改变符号颜色、标注、添加图例等操作。

    • -2严重退化
    • -1轻微退化
    • 0稳定不变
    • 1轻微改善
    • 2明显改善

    image.png

    参考:

    袁丽华,蒋卫国,申文明,刘颖慧,王文杰,陶亮亮,郑华,刘孝富.2000—2010 年黄河流域植被覆盖的时空变化.生态学报,2013,33(24): 7798鄄 7806. NDVI时间序列分析之Sen+MK分析全过程梳理 基于matlab 的长时间栅格数据的Sen+MK显著性检验趋势分析