MATLAB对TIFF遥感影像批量辐射定标

将HDF格式的MODIS数据批量拼接、投影及格式转换、重采样、裁剪到研究区后,想批量对数据进行辐射定标(把DN值计算为具有物理意义的值),这里以MOD13A2产品为例

inpath='E:\1SMAPDATA\NDVIREF2016_2019\05CATEGORY\02CLASS\NDVI';%NDVI原始数据 NDVI文件夹下都是TIFF格式的NDVI遥感影像
outpath='E:\1SMAPDATA\NDVIREF2016_2019\06SCALE';%输出路径
min=-2000; %最小值
max=10000;%最大值
fill=-3000;%填充值
back=-32768;%背景值 这个需要注意 需要先在MATLAB中先读取一幅影像后确定 有时为65535(LST)
scale=0.0001;%缩放因子
off=0;%偏移量
EqualFillBackSca(inpath,outpath,fill,back,min,max,scale,off);%统一辐射定标函数

% fill back min max scale off  MOD13A2
% REF: -1000 -32678 0 10000 0.0001
% NDVI EVI :-3000 -32678 -2000 10000 0.0001

% min=0; 
% max=10000;
% fill=-1000;
% back=-32768;
% scale=0.0001;
% off=0;

%读取TIFF数据
[A,R]=geotiffread('E:\02CLASS\blue\A2015353.1_km_16_days_blue_reflectance.tif');

统一辐射定标函数:

function [] = EqualFillBackSca(imagepath,outpath,fill,background,min,max,scale,offset)
%EqualFillBackSca  
%imagepath表示含有某一种类数据的文件夹 
%outpath 影像输出路径
%有些影像没有offset值,相应位置就为0
%统一至:背景值 填充值均为nan 这样在ArcGIS中显示时就是正常范围
%背景值可能是最大的LST:65535 也可能是0 建议先读取数据确认
%Fill值一般是产品说明中有的,还是再确定一些比较好
% 要在有效值范围内
fileFolder=fullfile(imagepath);
dirOutput=dir(fullfile(fileFolder,'*.tif')); 
fileNames={dirOutput.name}'; l
for i=1:length(fileNames)
filepath=[imagepath,'\',fileNames{i}];
[A,R]=geotiffread(filepath);%注意这里读取的数据矩阵A是不是double格式,这个格式不能为负数或者是nan
A=double(A);
A(A==fill)=nan;
A(A==background)=nan;
A((A<min))=nan;
A((A>max))=nan;
A=A*scale+offset;
info = geotiffinfo(filepath);
geotiffwrite([outpath,'\',fileNames{i}],A,R,'GeoKeyDirectoryTag', info.GeoTIFFTags.GeoKeyDirectoryTag);
end
end

最后结果:

 

posted @ 2020-03-13 15:02  icydengyw  阅读(1621)  评论(0编辑  收藏  举报