Matlab编程对MODIS产品进行质量控制

发布时间 2023-04-01 07:33:30作者: 夜的爱好者

https://zhuanlan.zhihu.com/p/378908494?utm_id=0

本文以MODIS 8天地表温度产品(MOD11A1)为例,简要记录质量文件的使用方法。内容并非原创,仅作个人学习记录之用。

由于存在云和其他因素的干扰,MODIS产品的每一个像元质量并不都是可靠的,因此产品中提供了质量控制文件,描述了其对应像元值的可信程度。用户可根据研究需要,自行提取出质量较好的像元,供后续分析使用。

MOD11A1产品中包含2个质量文件图层,分别是QC_Day和QC_Night

首先,利用MRT软件将地表温度图层LST_Day和对应的QC_Day图层提取出来。提取出的QC图像的像元值代表了以8位二进制存储的像元质量信息,用户手册中对具体质量信息的描述如下:

MOD11产品用户手册第21页

QC图层的像元值本身是十进制的,使用时需要将其转换为8位二进制。

假设我们需要提取Mandatory QA flags=00(质量良好)的数据,那么需要将QC图层的数值转换为8位2进制,并且读取0bit和1bit位上的数值,判断其是否等于0. 若等于0,便保留该像元值,否则去掉该像元值。

%%制作QC文件掩膜
        [x, y] = size(QC);%获取矩阵的行列
        QC_dec = dec2bin(QC,8);%十进制转二进制%按列转换
        QC_78 = QC_dec(:,7:8);%LST的Mandatory QA是0bit和1bit,也就是二进制八位数的最右两位,即第七和第八位
        QC78 = str2num(QC_78);%字符串转数值,判断是否符合要求
        data0 = reshape(QC78,x,y);

        data0(data0==10)=NaN;%将质量差的像元设为Nodata
        data0(data0==11)=NaN;
        data0(data0==00)=1;%将可用的像元设为1
        data0(data0==01)=1;

        data1 = double(lstdata);%为了保存小数点,double可以保存15位小数%%lstdata是之前读进去的lst数据,此处未展示完整代码
        qc = double(data0);
        data2 = data1*0.02-273.16;%LST的系数为0.02,单位为开尔文,根据需要换算成摄氏度
        data3 = data2.*qc;%利用质量掩膜来提取质量好的像元