Matlab编程对MODIS产品进行质量控制
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;%利用质量掩膜来提取质量好的像元