版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
注:该程序是在ENVI5.3+IDL8.5中进行,而ENVI5.3不支持国产卫星的打开,可到ENVI官网上下载envi_china_satellites_support该扩展工具进行打开与处理。
本实例实现利用IDL调用ENVITask实现高分2号影像的预处理。
高分2号的预处理流程是:
说明:1. 针对不同的应用,有不同的处理流程,上图中列出了两种常用的预处理流程。流程一主要针对高精度的定量遥感应用,也就是对大气校正精度要求比较高应用,比如:植被参数定量反演等;流程二主要针对定性遥感或者对大气校正精度要求比较低的遥感应用,比如:土地利用类型分类等。本文介绍的主要是流程二的详细操作步骤。
效果图
代码:
;函数1:解压tar.gz压缩文件
Function Untar1, inputfile,tarout_folder
tarout_folder = FILE_DIRNAME(inputfile)+'\'+FILE_BASENAME(inputfile,'.tar.gz')
;解压GZ
FILE_GUNZIP, inputfile
;创建解压后gz同名文件夹,否则默认解压到当前文件夹
IF ~FILE_TEST(tarout_folder) THEN FILE_MKDIR,tarout_folder
;解压tar
FILE_UNTAR, FILE_DIRNAME(inputfile)+'\'+FILE_BASENAME(inputfile,'.tar.gz')+'.tar',tarout_folder
FILE_DELETE,FILE_DIRNAME(inputfile)+'\'+FILE_BASENAME(inputfile,'.tar.gz')+'.tar';删除中间解压tar文件
return,tarout_folder;返回解压后文件夹名
END
;函数2:标准预处理流程
FUNCTION Pre,Root_path=Root_path,inputfile=inputfile,input_DEM=DEM,out_path = out_path,e=e
COMPILE_OPT IDL2
;开始处理:压缩文件解压
;明确压缩文件名
data_path = Untar1(inputfile)
Raster_mss=ENVI_Open_GF2_Raster(file_search(data_path,'*-MSS1.xml'))
Raster_pan=ENVI_Open_GF2_Raster(file_search(data_path,'*-PAN1.xml'))
;----------多光谱正射校正-----------
demfile=e.OpenRaster(DEM)
Task1=ENVITASK('RPCOrthorectification')
Task1.Input_Raster=Raster_mss
Task1.Output_Pixel_Size=4
Task1.Resampling='Cubic Convolution'
Task1.Output_Raster_URI =e.GetTemporaryFilename()
Task1.DEM_Raster=demfile
Task1.Execute, Error=error
; ;--------------多光谱辐射定标---------
Task2=ENVITASK('RadiometricCalibration')
Task2.Input_Raster=Task1.Output_Raster
Task2.Calibration_Type='Radiance'
Task2.Output_Data_Type='Float'
Task2.Scale_Factor=0.10
Task2_Output_Raster_URI =e.GetTemporaryFilename()
Task2.Execute
;----------全色正射校正--------------
demfile=e.OpenRaster(DEM)
Task3=ENVITASK('RPCOrthorectification')
Task3.Input_Raster=raster_pan
Task3.Output_Pixel_Size=1
Task3.Resampling='Cubic Convolution'
Task3.Output_Raster_URI =e.GetTemporaryFilename()
Task3.DEM_Raster=demfile
Task3.Execute, Error=error
; -------------图像融合--------------
Task7=ENVITask('GramSchmidtPanSharpening')
Task7.INPUT_LOW_RESOLUTION_RASTER=Task2.Output_Raster
Task7.INPUT_HIGH_RESOLUTION_RASTER=Task3.Output_Raster
Task7.Output_Raster_URI = e.GetTemporaryFilename()
Task7.IGNORE_VALIDATE=0
Task7.Execute, Error=error
; ----------快速大气校正-----------
Task4=ENVITASK('QUAC')
Task4.Input_Raster=Task7.Output_Raster
Task4.SENSOR='Generic / Unknown Sensor'
Task4.Output_Raster_URI = '';放最终结果输出路径
Task4.Execute
print,Task4.Output_Raster_URI
end
;主程序:包括解压和预处理
PRO pre,Root_path=Root_path,inputfile=inputfile,input_DEM=DEM,out_path = out_path
COMPILE_OPT IDL2
;打开envi
e=ENVI(/headless)
start = systime(/second)
;envi_batch_status_window,/on ;开启二次开发进度条
;相关输入参数:预处理:原始数据+DEM文件+输出文件夹
Root_path='E:\NJPRO\Dataprocess'
inputfile = Root_path+'\OriginData\GF2_PMS1_E113.6_N34.8_20180416_L1A0003126793.tar.gz';传入GF1压缩文件
DEM='C:\Program Files\Exelis\ENVI53\data\GMTED2010.jp2'
Restore,'C:\Program Files\Exelis\ENVI53\extensions\envi_china_satellites_support.sav' ;需要sav文件完整路径
out_path='';自定义输出文件位置
;执行预处理,返回融合后栅格文件
Sharpen_file = Pre(Root_path=Root_path,inputfile=inputfile,input_DEM=DEM,out_path=out_path,e=e)
endtime = systime(/second)
print,'running time ',endtime-start
end
;
如有做的不好的地方,欢迎指正。