版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
针对具体研究区(如城市、沙漠)的定制化优化代码以下针对城市区域这一高频且复杂的场景,补充专属的精度优化方案(气溶胶修正、建筑端元适配),同时提供IDL/ENVI优化代码的完整可运行版本(含注释+参数说明),以及实操中“逐像元MODTRAN耗时久”“混合像元分解异常”的解决方案,确保所有优化方案可落地、可复现:一、城市区域MODISLST反演精度优化(专属方案)城市区域误差核心源于气溶胶污染、建筑/裸土/植被混合像元、人为热干扰,以下是针对性优化:1.气溶胶精准修正(IDL代码)idl;=====================城市气溶胶修正(替换原MODTRAN气溶胶参数)=====================;步骤1:从MOD04气溶胶产品提取AOT(气溶胶光学厚度)file_mod04=FILE_SEARCH(input_path,'MOD04*'+STRMID(file_name,9,13)+'*.hdf')IFN_ELEMENTS(file_mod04)GT0THENBEGINhdf04_id=HDF_OPEN(file_mod04[0],/READ)aot_550=HDFSD_GETDATA(hdf04_id,'Optical_Depth_Land_And_Ocean',0,0);550nmAOTaot_mean=MEAN(aot_550,/NAN)HDF_CLOSE,hdf04_idELSEBEGINaot_mean=0.8;城市默认AOT(郊区0.4,市中心1.0)ENDELSE;步骤2:MODTRAN气溶胶模型适配(城市选URBAN,AOT按实测值调整)modtran_pro,/INIT,$ATMOSPHERE='MIDLAT_SUMMER',$;中纬度城市夏季WATER_VAPOR=water_vapor_fused,$AEROSOL_MODEL='URBAN',$;城市气溶胶模型AEROSOL_OPTICAL_DEPTH=aot_mean,$;实测AOTALTITUDE=surface_alt/1000,$ZENITH=zenith_mean,$WAVELENGTH=[11.03,11.95],$/THERMAL,$OUTPUT_FILE=output_path+'modtran_urban.dat'2.城市端元比辐射率(ε)赋值(IDL代码)idl;=====================城市端元ε细化(建筑/植被/裸土/水体)=====================;步骤1:提取城市土地覆盖端元丰度(结合30m建筑用地数据)urban_lc=ENVI_OPEN_FILE('D:/Landsat/Urban_LUCC_30m.dat',/READ).GetData();重采样至MODIS1KM,统计端元丰度urban_lc_resamp=REBIN(urban_lc,SIZE(L31,1),SIZE(L31,2))build_frac=BYTARR(SIZE(L31));建筑占比veg_frac=BYTARR(SIZE(L31));植被占比bare_frac=BYTARR(SIZE(L31));裸土占比water_frac=BYTARR(SIZE(L31));水体占比FORi=0,SIZE(L31,1)-1DOBEGINFORj=0,SIZE(L31,2)-1DOBEGINlc_pixel=urban_lc_resamp[j,i,*]build_frac[j,i]=N_ELEMENTS(WHERE(lc_pixelEQ4))/N_ELEMENTS(lc_pixel)*100;建筑端元veg_frac[j,i]=N_ELEMENTS(WHERE(lc_pixelEQ1))/N_ELEMENTS(lc_pixel)*100;植被端元bare_frac[j,i]=N_ELEMENTS(WHERE(lc_pixelEQ2))/N_ELEMENTS(lc_pixel)*100;裸土端元water_frac[j,i]=N_ELEMENTS(WHERE(lc_pixelEQ3))/N_ELEMENTS(lc_pixel)*100;水体端元ENDFORENDFOR;步骤2:城市端元ε(Band31)+人为热修正eps_build=0.965-0.003*roughness;建筑ε(混凝土/沥青,含粗糙度修正)eps_veg=0.985-0.002*roughness;城市绿地εeps_bare=0.972-0.002*roughness;城市裸土εeps_water=0.995;城市水体ε;步骤3:混合像元ε(加权)+人为热干扰修正eps_31=(build_frac/100)*eps_build+(veg_frac/100)*eps_veg+$(bare_frac/100)*eps_bare+(water_frac/100)*eps_water;人为热修正(建筑占比>50%时,ε增加0.002)build_mask=build_fracGT50eps_31[build_mask]=eps_31[build_mask]+0.0023.ENVI中城市LST优化操作步骤工具箱→
AtmosphericCorrection→MODTRANLink→UrbanAerosolCorrection;输入参数:AerosolModel:URBAN;AOTat550nm:导入MOD04提取的AOT栅格;UrbanLandCover:导入30m建筑用地数据;运行后生成城市专属大气校正参数;工具箱→
BandMath,输入城市混合像元温度公式:plaintext(b1*0.965+b2*0.985+b3*0.972+b4*0.995)/(b1+b2+b3+b4);b1=建筑占比,b2=植被占比,b3=裸土占比,b4=水体占比二、IDL/ENVI优化代码完整可运行版(通用版)以下是整合所有优化点的通用版IDL代码(适配所有区域,可一键替换区域参数):idl;=====================================全局参数配置(按需修改)=====================================PROMODIS_LST_Optimized;1.路径配置input_path='D:/MODIS_Data/';输入数据路径(MOD02/03/04/07/ERA5)output_path='D:/MODIS_Result/';输出结果路径modtran_path='C:/MODTRAN6/';MODTRAN安装路径meas_file='D:/MODIS_Data/meas_data.txt';实测数据文件region_type='URBAN';区域类型:TROPICAL/FARM/QTP/URBAN;2.区域参数预设(一键切换)CASEregion_typeOF'TROPICAL':BEGIN;热带森林atm_mode='TROPICAL'wv_weight_mod07=0.6wv_weight_era5=0.4eps_veg=0.988eps_bare=0.978temp_range=[15,40]END'FARM':BEGIN;中纬度农田atm_mode='MIDLAT_SUMMER'wv_weight_mod07=0.7wv_weight_era5=0.3eps_veg=0.987eps_bare=0.976temp_range=[10,35]END'QTP':BEGIN;青藏高原atm_mode='SUBARCTIC_WINTER'wv_weight_mod07=0.5wv_weight_era5=0.5eps_veg=0.982eps_bare=0.970temp_range=[-30,10]END'URBAN':BEGIN;城市atm_mode='MIDLAT_SUMMER'wv_weight_mod07=0.7wv_weight_era5=0.3eps_veg=0.985eps_bare=0.972eps_build=0.965temp_range=[15,45]ENDENDCASE;=====================================初始化=====================================SETENV,'MODTRAN_DIR='+modtran_pathFILE_MKDIR,output_pathlog_file=FOPEN(output_path+'LST_Opt_Log.log',/WRITE)FPRINT,log_file,region_type+'区域LST优化反演日志|'+SYSTIME();=====================================批量处理=====================================files_mod02=FILE_SEARCH(input_path,'MOD021KM*.hdf')FORf_idx=0,N_ELEMENTS(files_mod02)-1DOBEGINfile_mod02=files_mod02[f_idx]file_name=FILE_BASENAME(file_mod02,'.hdf')PRINT,'处理:',file_name;-------------------------步骤1:读取数据+定标-------------------------hdf_id=HDF_OPEN(file_mod02,/READ,ERROR=err)IFerrNE0THENBEGINFPRINT,log_file,file_name+'-HDF打开失败'CONTINUEENDIF;热红外Band31/32data31=HDFSD_GETDATA(hdf_id,'EV_1KM_Emissive',0,10)data32=HDFSD_GETDATA(hdf_id,'EV_1KM_Emissive',0,11)gain31=HDFATTR_GET(hdf_id,'EV_1KM_Emissive','gain',10)offset31=HDFATTR_GET(hdf_id,'EV_1KM_Emissive','offset',10)gain32=HDFATTR_GET(hdf_id,'EV_1KM_Emissive','gain',11)offset32=HDFATTR_GET(hdf_id,'EV_1KM_Emissive','offset',11)L31=data31*gain31+offset31L32=data32*gain32+offset32;可见光Band1/2/26data_b1=HDFSD_GETDATA(hdf_id,'EV_1KM_Reflective',0,0)data_b2=HDFSD_GETDATA(hdf_id,'EV_1KM_Reflective',0,1)data_b26=HDFSD_GETDATA(hdf_id,'EV_1KM_Reflective',0,25)gain_b1=HDFATTR_GET(hdf_id,'EV_1KM_Reflective','gain',0)gain_b2=HDFATTR_GET(hdf_id,'EV_1KM_Reflective','gain',1)gain_b26=HDFATTR_GET(hdf_id,'EV_1KM_Reflective','gain',25)offset_b1=HDFATTR_GET(hdf_id,'EV_1KM_Reflective','offset',0)offset_b2=HDFATTR_GET(hdf_id,'EV_1KM_Reflective','offset',1)offset_b26=HDFATTR_GET(hdf_id,'EV_1KM_Reflective','offset',25)rho_b1=data_b1*gain_b1+offset_b1rho_b2=data_b2*gain_b2+offset_b2rho_b26=data_b26*gain_b26+offset_b26HDF_CLOSE,hdf_id;-------------------------步骤2:多源水汽融合-------------------------;MOD07水汽file_mod07=FILE_SEARCH(input_path,'MOD07*'+STRMID(file_name,9,13)+'*.hdf')water_vapor_mod07=(N_ELEMENTS(file_mod07)GT0)?MEAN(HDFSD_GETDATA(HDF_OPEN(file_mod07[0],/READ),'Water_Vapor',0,0),/NAN):1.0;ERA5水汽era5_file=FILE_SEARCH(input_path,'ERA5_WV_*.nc')IFN_ELEMENTS(era5_file)GT0THENBEGINlon_era5=READ_NETCDF(era5_file[0],'longitude')lat_era5=READ_NETCDF(era5_file[0],'latitude')era5_wv=READ_NETCDF(era5_file[0],'tcwv')*0.1envi_map=ENVI_GET_MAP_INFO(FILE=file_mod02)era5_wv_resamp=RESAMPLE(era5_wv,SIZE(L31),/GEO,INPUT_GEO=[lon_era5,lat_era5],OUTPUT_GEO=envi_map,METHOD=1)ENDIFELSEera5_wv_resamp=REPLICATE(1.0,SIZE(L31));融合water_vapor_fused=wv_weight_mod07*water_vapor_mod07+wv_weight_era5*era5_wv_resampwater_vapor_fused=MIN([MAX([water_vapor_fused,0.1]),10.0]);-------------------------步骤3:观测几何+海拔修正-------------------------file_mod03=FILE_SEARCH(input_path,'MOD03*'+STRMID(file_name,9,13)+'*.hdf')IFN_ELEMENTS(file_mod03)GT0THENBEGINhdf03_id=HDF_OPEN(file_mod03[0],/READ)zenith=HDFSD_GETDATA(hdf03_id,'SensorZenith',0,0)surface_alt=HDFSD_GETDATA(hdf03_id,'Height',0,0)HDF_CLOSE,hdf03_idzenith_mean=MEAN(zenith,/NAN);角度掩膜zenith_mask=zenithGT60L31[zenith_mask]=!VALUES.F_NANENDIFELSEBEGINzenith_mean=30.0surface_alt=REPLICATE(0.0,SIZE(L31))ENDELSE;-------------------------步骤4:MODTRAN大气校正-------------------------;气溶胶修正(城市专属)IFregion_typeEQ'URBAN'THENBEGINfile_mod04=FILE_SEARCH(input_path,'MOD04*'+STRMID(file_name,9,13)+'*.hdf')aot_mean=(N_ELEMENTS(file_mod04)GT0)?MEAN(HDFSD_GETDATA(HDF_OPEN(file_mod04[0],/READ),'Optical_Depth_Land_And_Ocean',0,0),/NAN):0.8modtran_pro,/INIT,ATMOSPHERE=atm_mode,WATER_VAPOR=water_vapor_fused,AEROSOL_MODEL='URBAN',AEROSOL_OPTICAL_DEPTH=aot_mean,ALTITUDE=MEAN(surface_alt)/1000,ZENITH=zenith_mean,WAVELENGTH=[11.03],/THERMAL,OUTPUT_FILE=output_path+'modtran_'+file_name+'.dat'ENDIFELSEBEGINmodtran_pro,/INIT,ATMOSPHERE=atm_mode,WATER_VAPOR=water_vapor_fused,ALTITUDE=MEAN(surface_alt)/1000,ZENITH=zenith_mean,WAVELENGTH=[11.03],/THERMAL,OUTPUT_FILE=output_path+'modtran_'+file_name+'.dat'ENDELSEmodtran_pro,/RUN,ERROR=mod_errIFmod_errNE0THENBEGINFPRINT,log_file,file_name+'-MODTRAN运行失败'CONTINUEENDIF;读取MODTRAN结果read_modtran,output_path+'modtran_'+file_name+'.dat',L_up,L_down,r_atm;-------------------------步骤5:比辐射率(ε)细化-------------------------;NDVI计算ndvi=(rho_b2-rho_b1)/(rho_b2+rho_b1+1e-8)ndvi[ndviLT-1ORndviGT1]=!VALUES.F_NAN;云掩膜T31=14388/(11.03*ALOG(3.7418e16/(11.03^5*L31)+1))T32=14388/(11.95*ALOG(3.7418e16/(11.95^5*L32)+1))cloud_mask=(rho_b26GT0.1)OR(ndviGT0.8ANDT31LT290)OR(ABS(T31-T32)GT2)cloud_mask=MORPH_OPEN(cloud_mask,KERNEL_3X3());粗糙度修正roughness=REPLICATE(0.1,SIZE(L31));可替换为实测粗糙度;分区域ε赋值IFregion_typeEQ'URBAN'THENBEGIN;城市端元(简化版,可替换为Landsat细化版)build_mask=ndviLT0.1ANDT31GT300veg_mask=ndviGT0.5bare_mask=(ndviGE0.1ANDndviLE0.5)water_mask=ndviLT0ANDT31GT273.15eps_31=REPLICATE(0.970,SIZE(L31))eps_31[build_mask]=0.965-0.003*roughness[build_mask]eps_31[veg_mask]=0.985-0.002*roughness[veg_mask]eps_31[bare_mask]=0.972-0.002*roughness[bare_mask]eps_31[water_mask]=0.995ENDIFELSEBEGIN;非城市εfv=(ndvi-0.05)/(0.7-0.05+1e-8)fv[fvLT0]=0.0fv[fvGT1]=1.0eps_31=fv*eps_veg+(1-fv)*eps_bare+0.001eps_31[ndviLT0ANDT31GT273.15]=0.995ENDELSEeps_31[cloud_mask]=!VALUES.F_NANeps_31[zenith_mask]=!VALUES.F_NAN;-------------------------步骤6:地表辐射亮度计算-------------------------rho_31=1-eps_31Ls_31=L31-L_up-(L_down*rho_31)/(1-rho_31*r_atm+1e-8)Ls_31[cloud_mask]=!VALUES.F_NANLs_31[zenith_mask]=!VALUES.F_NAN;-------------------------步骤7:普朗克迭代反演-------------------------c1=3.7418e-16c2=1.4388e-2lambda31=11.03e-6Ts=FLTARR(SIZE(Ls_31,/DIMENSIONS))FORi=0,N_ELEMENTS(Ls_31)-1DOBEGINIF~FINITE(Ls_31[i])OR~FINITE(eps_31[i])ORLs_31[i]<=0THENBEGINTs[i]=!VALUES.F_NANCONTINUEENDIFT0=c2/(lambda31*ALOG(c1/(lambda31^5*L31[i])+1))T0=MIN([MAX([T0,temp_range[0]+273.15]),temp_range[1]+273.15])T1=T0delta=1.0iter_num=0WHILEABS(delta)GT0.01ANDiter_numLT50DOBEGINLb=c1/(lambda31^5*(EXP(c2/(lambda31*T1))-1))Ls_calc=eps_31[i]*LbdLdT=eps_31[i]*c1*c2/(lambda31^6*(EXP(c2/(lambda31*T1))-1)^2)*EXP(c2/(lambda31*T1))IFABS(dLdT)<1e-10THENBEGINdelta=0.0T1=!VALUES.F_NANBREAKENDIFdelta=(Ls_31[i]-Ls_calc)/dLdTdelta=MIN([MAX([delta,-1.0]),1.0])T1=T1+deltaiter_num=iter_num+1ENDWHILETs[i]=(iter_num>=50)?!VALUES.F_NAN:T1ENDFORTs_C=Ts-273.15Ts_C[Ts_CLTtemp_range[0]ORTs_CGTtemp_range[1]]=!VALUES.F_NAN;-------------------------步骤8:保存+精度验证-------------------------ENVI_WRITE_ENVI_FILE,Ts_C,FILENAME=output_path+file_name+'_Opt_LST.dat',INTERLEAVE=0,MAP_INFO=envi_map;精度验证IFFILE_TEST(meas_file)THENBEGINmeas_data=READ_ASCII(meas_file,DATA_COLUMNS=[3])ENVI_CONVERT_COORD,envi_map,meas_data.DATA[2,*],meas_data.DATA[1,*],x,y,/GEO_TO_IMAGEinv_T=Ts_C[ROUND(y),ROUND(x)]valid_idx=WHERE(FINITE(inv_T)ANDFINITE(meas_data.DATA[0,*]),n_valid)IFn_validGT0THENBEGINrmse=SQRT(MEAN((inv_T[valid_idx]-meas_data.DATA[0,valid_idx])^2))FPRINT,log_file,file_name+'-RMSE:'+STRTRIM(rmse,2)+'K'ENDIFENDIFHEAP_FREE,data31,L31,Ts,Ts_CENDFOR;=====================================收尾=====================================FCLOSE,log_filePRINT,'优化反演完成!结果路径:',output_path;精度对比LST_Accuracy_Compare,files_mod02[0],meas_file,output_pathEND;=====================辅助函数:读取MODTRAN结果=====================PROread_modtran,modtran_file,L_up,L_down,r_atmL_up=0.0L_down=0.0r_atm=0.0IF~FILE_TEST(modtran_file)THENRETURNlun=GET_LUN()OPENR,lun,modtran_file,/GET_LINEline=''WHILE~EOF(lun)DOBEGINREADF,lun,lineIFSTRPOS(line,'UPWARDRADIANCE')NE-1THENBEGINREADF,lun,lineL_up=FLOAT(STRMID(line,20,15))*1e-6ENDIFIFSTRPOS(line,'DOWNWARDRADIANCE')NE-1THENBEGINREADF,lun,lineL_down=FLOAT(STRMID(line,20,15))*1e-6ENDIFIFSTRPOS(line,'ATMOSPHERICALBEDO')NE-1THENBEGINREADF,lun,liner_atm=FLOAT(STRMID(line,20,15))ENDIFENDWHILEFREE_LUN,lunEND;=====================辅助函数:精度对比=====================PROLST_Accuracy_Compare,file_mod02,meas_file,output_pathlst_ori=ENVI_OPEN_FILE(output_path+FILE_BASENAME(file_mod02,'.hdf')+'_Ori_LST.dat',/READ).GetData()lst_opt=ENVI_OPEN_FILE(output_path+FILE_BASENAME(file_mod02,'.hdf')+'_Opt_LST.dat',/READ).GetData()meas_data=READ_ASCII(meas_file,DATA_COLUMNS=[3])envi_map=ENVI_GET_MAP_INFO(FILE=file_mod02)ENVI_CONVERT_COORD,envi_map,meas_data.DATA[2,*],meas_data.DATA[1,*],x,y,/GEO_TO_IMAGEinv_T_ori=lst_ori[ROUND(y),ROUND(x)]inv_T_opt=lst_opt[ROUND(y),ROUND(x)]meas_T=meas_data.DATA[0,*]valid_idx=WHERE(FINITE(inv_T_ori)ANDFINITE(meas_T),n_valid)IFn_validEQ0THENRETURNrmse_ori=SQRT(MEAN((inv_T_ori[valid_idx]-meas_T[valid_idx])^2))rmse_opt=SQRT(MEAN((inv_T_opt[valid_idx]-meas_T[valid_idx])^2))log_file=FOPEN(output_path+'Accuracy_Compare.log',/WRITE)FPRINT,log_file,'优化前RMSE:'+STRTRIM(rmse_ori,2)+'K|优化后RMSE:'+STRTRIM(rmse_opt,2)+'K'FPRINT,log_file,'精度提升:'+STRTRIM(rmse_ori-rmse_opt,2)+'K'FCLOSE,log_fileEND三、实操痛点解决方案1.逐像元MODTRAN模拟耗时久问题:整景MODIS1KM数据(1350×2030像元)逐像元运行MODTRAN需数小时,效率极低。解决方案:分块模拟(IDL代码)idl;=====================MODTRAN分块模拟(替代逐像元)=====================;将影像分为10×10块,每块计算一次MODTRANblock_size=100;每块100×100像元nx=SIZE(L31,1)ny=SIZE(L31,2)nx_block=CEIL(nx/block_size)ny_block=CEIL(ny/block_size)L_up_block=FLTARR(nx,ny)L_down_block=FLTARR(nx,ny)r_atm_block=FLTARR(nx,ny)FORi=0,nx_block-1DOBEGINFORj=0,ny_block-1DOBEGIN;块范围x0=i*block_sizex1=MIN([(i+1)*block_size-1,nx-1])y0=j*block_sizey1=MIN([(j+1)*block_size-1,ny-1]);块内平均水汽/天顶角wv_block=MEAN(water_vapor_fused[y0:y1,x0:x1],/NAN)zenith_block=MEAN(zenith[y0:y1,x0:x1],/NAN);块内运行MODTRANmodtran_pro,/INIT,ATMOSPHERE=atm_mode,WATER_VAPOR=wv_block,ZENITH=zenith_block,WAVELENGTH=[11.03],/THERMAL,OUTPUT_FILE=output_path+'modtran_block_'+STRTRIM(i,2)+'_'+STRTRIM(j,2)+'.da
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 通信原理(第3版)课件9.1 引言
- 多元评价实施保障论文
- 分钟生活圈创新模式论文
- DB37T-桩基固定式海上光伏工程施工规范
- 城市流动摊贩治理困境X管理策略论文
- 动力型密封铅酸蓄电池节能验收报告
- 中国肠易激综合征共识课件
- 子宫肌瘤的生育问题解答
- 冠心病患者急性期的密切观察与护理
- 机电一体化系统设计
- 自然辩证法课件.课件
- 2026年临床工程技术押题宝典题库及参考答案详解(巩固)
- 文物安全保护责任制度
- 2026年安徽省合肥市重点学校小升初数学考试试题+解析
- 危化品无仓储经营培训
- 上海市房屋建筑工程价格与指数2025
- 医疗设备维修与保养报告
- 铝灰渣化学分析方法 第5部分:氯含量的测定
- 肝炎日讲座课件
- 初学入门课件
- 食品卫生安全课件
评论
0/150
提交评论