基于MRT的MODIS数据批量拼接与投影——以MOD16为例

原本是打算尝试用python的,但是MRT毕竟是专门用来批量处理MODIS数据的工具,加之本人的python并不算熟练,与MOD16本身的一些数据特点,最终还是选择了MRT,当然,也是我比较懒惰的缘故。
看了很多篇博文教程,过于零碎,在这里总结一下,顺便解释一下MOD16让我纠结的点。

MRT的安装

建议照着这篇做:
MRT下载及安装

数据

MOD16的hv2504和hv2506两个通道,2005-2014年数据,时空分辨率1km,8day。

纠结之处

当我兴冲冲地用ENVI打开2005001的两景影像时,出现了让我非常困惑的一幕:
基于MRT的MODIS数据批量拼接与投影——以MOD16为例_第1张图片

两景影像的空间位置完全重合,而通过MODIS行列号对应区域和经纬度,我们不难看出这两景图像区域应该完全不同才是:
基于MRT的MODIS数据批量拼接与投影——以MOD16为例_第2张图片
在第一张图中我们也可以看到这两幅影像虽然位置相同,但对应的vaule值并不同,说明它确实是两幅影像没错。
在把两幅影像投影之后发现了端倪:
这两幅影像大小相同,但是有数据的区域不同,我们要做的,是把二者有数据的区域拼接起来,没有数据的区域用有数据的区域去覆盖它。(由于两者投影后景象已删,这里就不贴图了)
那这样就有一个问题,无论是ENVI的MOASIC还是python,其遥感影像的拼接通常都是基于地理坐标拼接,以一副或几幅影像为参考,重合部分使用一些算法(最邻近值之类)进行拼接,这种拼接方法并不适合本身就具有大量无效区域的影像。
这也是我最终选择使用MRT的原因,只有基于MRT的moasic才能顺利地、方便地达到我想要的效果。

批量拼接与投影

请参考:
MRT批量拼接与重投影
MRT安装、批量拼接、重投影与格式转换
MRT批量处理MOD数据步骤
写的都十分详细易懂,直接参考即可,此外还有其他大量优秀博文,可自行搜索。
如仍有不解之处,可以去查阅MRT官方文档。
这个方法批量拼接时需要自己创一个文档将需要处理MODIS数据的文件名写进去,自己做还是比较麻烦,用编程可以很方便也很简单,我这里贴一个matlab代码:

file=dir('D:\D:\data\ET\raw_data\data\*.hdf');
filename='D:\data\ET\raw_data\data\';
for i=1:92
    name{i}=[filename,file(i).name];
end
fid=fopen('D:\data\ET\raw_data\data\MOSAICINPUT.txt','w');
for i=1:92
    fprintf(fid,'%s\n',name{i});
end
fclose(fid);

因为代码过于简单的缘故,这里就不写注释了。
PS:当仅仅使用MODIDS Tool进行单个处理时,你是可以同时完成拼接与重投影的,但令人遗憾的是,笔者在寻找尝试一下午后,仍然没有摸索出同时实现这两个功能批处理的方法,只能分开来做了,个人建议先做拼接再做投影,本人投影选择WGS84椭球的Albers Equal Area投影。

你可能感兴趣的:(笔记)