ENVI 5.2二次开发更加智能、全面(续)
图:ENVI 5.2中提供的ENVITasks
面向对象图像分割
PRO test_FXSegmentation COMPILE_OPT idl2 ; 启动 ENVI 5.2 e = ENVI() ; 打开遥感图像 File = FILEPATH('qb_boulder_msi', Subdir=['data'], $ Root_Dir=e.ROOT_DIR) Raster = e.OpenRaster(File) ; 初始化 FXSegmentation Task Task = ENVITASK('FXSegmentation') ; 设置输入参数:输入图像、分割尺度、合并尺度 Task.INPUT_RASTER = Raster Task.SEGMENT_VALUE = 50.0 Task.MERGE_VALUE = 90.0 ; 设置输出栅格路径(位于ENVI临时目录下) Task.OUTPUT _MEANS_RASTER_URI = e.GetTemporaryFilename() ; 执行面向对象分割 Task.Execute ; 将分割结果添加到 Data Manager 中 DataColl = e.DATA DataColl.Add, Task.OUTPUT _MEANS_RASTER ; 在ENVI中显示分割结果 View1 = e.GetView() Layer1 = View1.CreateLayer(Task.OUTPUT _MEANS_RASTER) END |
图:FXSegmentation进度条
PRO EXAMPLE_FX_SEGMENTONLY_DOIT COMPILE_OPT IDL2 ;启动ENVI e = ENVI() ;打开遥感图像 File = FILEPATH('qb_boulder_msi', Subdir=['data'], $ Root_Dir=e.ROOT_DIR) Raster = e.OpenRaster(File) fid = ENVIRasterToFID(Raster) ; 设置输入输出参数 SegImage = e.GetTemporaryFilename() dims = [-1L, 0, raster.NCOLUMNS-1, 0, raster.NROWS-1] pos = LINDGEN(raster.NBANDS) ; 执行面向对象分割 ENVI_DOIT, 'envi_fx_segmentonly_doit', $ fid=fid, pos=pos, dims=dims, $ r_fid=r_fid, $ merge_level=90.0, scale_level=50.0, $ segmentation_raster_filename=SegImage ; 在ENVI中加载显示分割结果 oSegImage = e.OpenRaster(SegImage) view1 = e.GetView() layer1 = view1.CreateLayer(oSegImage) END |
虚拟栅格对象
-
输入数据为两景TM多光谱影像,空间分辨率均为30米;
-
输出要求进行3个处理步骤:
-
经过匀色的镶嵌结果
-
将空间分辨率重采样为90米
-
只保留R、G、B三个波段
PRO test_VirtualRaster COMPILE_OPT idl2 ;启动ENVI e=ENVI() ;设置输入文件 input1='D:\temp\mosaic_1.img' input2='D:\temp\mosaic_2.img' ;打开输入文件 Raster1=e.OpenRaster(input1, data_ignore_value=0) Raster2=e.OpenRaster(input2, data_ignore_value=0) ;查看输入文件的空间分辨率为 Ref1=Raster1.SPATIALREF PRINT, Ref1.PIXEL_SIZE ;创建 ENVIRaster 对象数组 Scenes=[Raster1,Raster2] ;创建 ENVIMosaicRaster 对象 MRaster=ENVIMOSAICRASTER(Scenes) ;设置匀色算法 MRaster.COLOR_MATCHING_METHOD = 'histogram matching' ;对 ENVIMosaicRaster 对象进行重采样 ResampleRaster=ENVIResampleRaster(MRaster,PIXEL_SCALE=3.0) ;对 ResampleRaster 对象进行波段裁剪,只保留3个波段 RGBRaster=ENVISubsetRaster(ResampleRaster,Bands=[0,1,2]) ;输出最终镶嵌结果 RGBRaster.Export, 'D:\temp\result.dat', 'envi' END |
图:查看结果空间分辨率为90米