不同栅格数据之间的相关系数计算(输出为tif影像)

两类栅格数据之间的相关性分析终于搞出来了程序。程序的适用如下:比如一个植被指数NDVI与降水量的相关性分析、比如蒸散量与温度的相关性分析等等…只要大家觉得两个参数之间有什么可以分析的,都可以拿以下代码去干,哈哈哈。我这里是分析8年的植被覆盖度与年尺度的地表温度的例子。

1.相关系数具体的计算公式为下:
不同栅格数据之间的相关系数计算(输出为tif影像)_第1张图片
相关系数的范围是[-1,1]。

2.代码如下(matlab):

[a,R]=geotiffread('F:\SMC_V3.0\std_anlisyt\annual\x\FP_FVC_2013.8_class.tif_clp.tif');%先导入投影信息,某个影像的路径就行(最好是你分析的数据中的一个)
info=geotiffinfo('F:\SMC_V3.0\std_anlisyt\annual\x\FP_FVC_2013.8_class.tif_clp.tif');%同上
[m,n]=size(a);

nppsum=zeros(m*n,8);%此处要修改,共几年就填写多少,我这里是8年的
for year=2013:2020
    filename=strcat('F:\yz\FVC-time\2013-2020-FVC-time\Re-FVC-time\FVC_farm_perfect-clip\','FP_FVC_',int2str(year),'.8_class.tif_clp.tif');%此处要修改,我这里是八年的每年年均植被覆盖度的数据,注意你的文件名字。
    data=importdata(filename);
    data=reshape(data,m*n,1);
    nppsum(:,year-2012)=data;%此处需要修改,我的数据是从2013开始,此处就为2012.
end

wcsum=zeros(m*n,8);
for year=2013:2020
    filename=strcat('F:\yz\YZ-Date\temperature_date\MOD11B3\autumn(9,10,11)\sample_clip\',int2str(year),'244.sample.tif_clp.tif');%此处要修改,我这里是八年的每年年均地表温度的数据,注意你的文件名字。
    data=importdata(filename);
    data=reshape(data,m*n,1);
    wcsum(:,year-2012)=data;
end

%相关性和显著性
npp_wc_xgx=zeros(m,n);
npp_wc_p=zeros(m,n);
for i=1:length(nppsum)
    npp=nppsum(i,:);
    if min(npp)>0 %注意这里的NPP的有效范围是大于0,如果自己的数据有效范围有小于0的话,则可以不用加这个
        wc=wcsum(i,:);
         [r2,p2]=corrcoef(npp,wc);
         npp_wc_xgx(i)=r2(2);
         npp_wc_p(i)=p2(2);
    end
end

filename5='F:\yz\YZ-Date\temperature_date\MOD11B3\autumn(9,10,11)\std\相关性_LST秋季节尺度.tif';%此处要修改,输出的路径及名字
filename6='F:\yz\YZ-Date\temperature_date\MOD11B3\autumn(9,10,11)\std\显著性_LST秋季节尺度.tif';%同上


%%输出图像
geotiffwrite(filename5,npp_wc_xgx,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);
geotiffwrite(filename6,npp_wc_p,R,'GeoKeyDirectoryTag',info.GeoTIFFTags.GeoKeyDirectoryTag);

注意:一定要将两类栅格数据的坐标系、分辨率和像素行列数搞一致,否则就会出错!具体可参考文章——不同类的栅格数据相关系数计算前的预处理

长路漫漫…
唯有坚持…

有问题大家一起交流~
不同栅格数据之间的相关系数计算(输出为tif影像)_第2张图片

不同栅格数据之间的相关系数计算(输出为tif影像)_第3张图片

你可能感兴趣的:(matlab,matlab)