天天看點

ENVI/IDL 批量裁剪同一地區的多幅影像-第四篇

之前采用的函數是envi_layer_stacking_doit,最近發現了一個十分高效的方法 RegridRaster task

代碼如下:

function y_layer_stack,Raster_based,Raster_toresize,respath

  ;将raster_toresize 影像進行重采樣,行列号以及投影與 raster_based保持一緻

  ; Retrieve the grid parameters of the based raster

  PixelSize = Raster_based.SPATIALREF.PIXEL_SIZE

  CoordSysString = Raster_based.SPATIALREF.COORD_SYS_STR

  NumRows = Raster_based.NROWS

  NumCols = Raster_based.NCOLUMNS

  TiePointMap = Raster_based.SPATIALREF.TIE_POINT_MAP

  TiePointPixel = Raster_based.SPATIALREF.TIE_POINT_PIXEL

  CoordSys = ENVICoordSys(COORD_SYS_STR = CoordSysString)

  ; Create a grid definition for the original based raster

  Grid = ENVIGridDefinition(CoordSys, $

    PIXEL_SIZE=PixelSize, $

    NROWS=NumRows, $

    NCOLUMNS=NumCols, $

    TIE_POINT_MAP=TiePointMap, $

    TIE_POINT_PIXEL=TiePointPixel)

  ; Reproject the TM band to the spatial grid

  RegridTask = ENVITask('RegridRaster')

  RegridTask.INPUT_RASTER = Raster_toresize

  RegridTask.GRID_DEFINITION = Grid

  RegridTask.RESAMPLING = 'Nearest Neighbor'; consider landcover not use Bilinear

  RegridTask.OUTPUT_RASTER_URI = respath

  RegridTask.Execute

  print,'RegridRaster Done!'

  Raster_toresize.Close

  return, RegridTask.OUTPUT_RASTER

end

調用方法:

img1=e.OpenRaster('img1') ;基礎影像

img2=e.OpenRaster('img2')

t=y_layer_stack(img1,img2,'img2_regrid');

如果要批量的話,添加for循環即可