IDL_变化检测

版权声明:转载请注明博文地址 https://blog.csdn.net/weixin_43238426/article/details/89949675

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
原代码如下:

PRO ChangeDetection

  COMPILE_OPT idl2
  e=ENVI()

  ;第一和第二时相数据
  inputFile1 = 'D:\ENVI_outputdata\LC8_20160712_Subset'
  inputFile2 = 'D:\ENVI_outputdata\LC8_20180429_Subset'

  ;输出文件路径
  outputFile = e.GetTemporaryFilename()
  PRINT, outputFile

  Raster1 = e.OPENRASTER(inputFile1)
  Raster2 = e.OPENRASTER(inputFile2)

  View = e.GetView()
  Layer1 = View.CreateLayer(Raster1)
  Layer2 = View.CreateLayer(Raster2)
  View.Zoom, 1, /FULL_EXTENT

  ;快速大气校正
  QUACRaster1 = ENVIQUACRASTER(Raster1)
  QUACRaster2 = ENVIQUACRASTER(Raster2)

  ;计算NDVI
  Index = 'NDVI'
  Subset1 = ENVISpectralIndexRaster(Raster1, Index)
  Subset2 = ENVISpectralIndexRaster(Raster2, Index)

  ;初始化波段差值Task
  ImageBandDiffTask = ENVITASK('ImageBandDifference')
  ;定义输入参数,并执行
  ImageBandDiffTask.INPUT_RASTER1 = Subset1
  ImageBandDiffTask.INPUT_RASTER2 = Subset2
  ImageBandDiffTask.EXECUTE

  ;初始化自动阈值分割Task
  AutoChangeThreshTask = ENVITASK('AutoChangeThresholdClassification')
  ;定义输入参数,默认为OTSU算法
  AutoChangeThreshTask.INPUT_RASTER = ImageBandDiffTask.OUTPUT_RASTER
  ;执行Task
  AutoChangeThreshTask.EXECUTE

  ;初始化平滑Task
  SmoothTask=ENVITASK('ClassificationSmoothing')
  ;定义输入参数,并执行
  SmoothTask.INPUT_RASTER = AutoChangeThreshTask.OUTPUT_RASTER
  SmoothTask.KERNEL_SIZE = 3
  SmoothTask.EXECUTE

  ;初始化聚类Task
  AggregationTask=ENVITASK('ClassificationAggregation')
  ;定义输入参数
  AggregationTask.INPUT_RASTER = SmoothTask.OUTPUT_RASTER
  AggregationTask.MINIMUM_SIZE = 10
  AggregationTask.OUTPUT_RASTER_URI = outputFile

  ;执行Task,输出变化检测栅格结果
  AggregationTask.EXECUTE

  ;加载变化检测栅格结果
  Layer3 = View.CreateLayer(AggregationTask.OUTPUT_RASTER)

  ClassStatistics_and_Barplot, AggregationTask.OUTPUT_RASTER, [3,2]

  ;输出矢量结果
  dotPos = STRPOS(outputFile, '.', /REVERSE_SEARCH)
  outVectorFile = dotPos NE -1 ? $
    STRMID(outputFile, 0, dotPos)+'.shp' : $
    outputFile+'.shp'
  ;初始化Task,栅格转矢量
  ClassToVectorTask = ENVITASK('ClassificationToShapefile')
  ;设置输入参数
  ClassToVectorTask.INPUT_RASTER = AggregationTask.OUTPUT_RASTER
  ClassToVectorTask.EXPORT_CLASSES = ['Big Increase','Big Decrease']
  ClassToVectorTask.OUTPUT_VECTOR_URI = outVectorFile

  ClassToVectorTask.EXECUTE

  ;加载变化检测矢量结果
  Layer4 = View.CreateLayer(ClassToVectorTask.OUTPUT_VECTOR)
END

猜你喜欢

转载自blog.csdn.net/weixin_43238426/article/details/89949675