MATLAB计算连续月份的不同栅格数据间的相关系数(输出为tif影像)

%先导入投影信息,某个影像的路径就行(最好是你分析的数据中的一个)
[a,R]=readgeoraster('G:\SIF\Global-AI_monthly_v3\bi\199001.tif');
info=geotiffinfo('G:\SIF\Global-AI_monthly_v3\bi\199001.tif');
[m,n]=size(a);
i=1;
 
gw=zeros(m*n,24); 
%此处要修改,共多少个月就写多少个月,我这里一共51个月,gw是我自己的变量名,可以根据需求修改
 
    for year=1990:1991
        for month=1:12
        filename=strcat('G:\SIF\Global-AI_monthly_v3\bi\',int2str(year),num2str(month,'%02d'),'.tif');
        %上述是文件名字的写法,我这里的例子是YYYYMM,根据自己文件命名修改
        data=importdata(filename);
        data=reshape(data,m*n,1);
        gw(:,i)=data; 
        i=i+1;
        end
    end
   
    % 可以看出每一年只挑选3-5月份的数据,用的双层循环,如果是每年的十二个月,就month=1:12
 
i=1;  %前面一个参数,下面导入另一个参数rssm,这里需要重新命i=1!
rssm=zeros(m*n,24);
   for year=1990:1991
        for month=1:12
        filename=strcat('G:\GPP_he\npp\test\',int2str(year),num2str(month,'%02d'),'.tif');
        data=importdata(filename);
        data=reshape(data,m*n,1);
        rssm(:,i)=data; 
        i=i+1;
        end
   end
%求相关性和显著性
 
grw_sm_xgx=zeros(m,n);
grw_sm_p=zeros(m,n);
for tl=1:length(gw)     %tl=timeline 时间长度,其实就是前面的51.
    grw=gw(tl,:);
    ssm=rssm(tl,:);
    [r2,p2]=corr(grw',ssm','type',"Pearson"); 
    %这里可以选自己想要的相关性,有三种。常用Pearson
    grw_sm_xgx(tl)=r2;
    grw_sm_p(tl)=p2;
end
 
filename1='G:\SIF\Global-AI_monthly_v3\result\相关性.tif';   %相关性
filename2='G:\SIF\Global-AI_monthly_v3\result\显著性.tif';   %显著性
 
%输出图像
geotiffwrite(filename1,grw_sm_xgx,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
geotiffwrite(filename2,grw_sm_p,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);

参考博文:https://blog.csdn.net/SophiaMnn/article/details/128156752?

https://blog.csdn.net/SophiaMnn/article/details/128156752?

你可能感兴趣的:(matlab,开发语言)