对遥感影像进行二值化,在进行分类,之后把分类结果矢量化(提取出矢量边界)。
PRO test_Build_Footprint
COMPILE_OPT idl2
e=envi()
file = FILE_DIRNAME(ROUTINE_FILEPATH())+$
'\data\beijingRGB.dat' ;打开某路径下的ENVI标准格式的数据
Raster = e.OpenRaster(file)
outShpFile = e.GetTemporaryFilename('shp')
;
view = e.GetView()
layer = view.CreateLayer(Raster)
view.zoom, 1, /full_extent
;波段裁剪,制作掩膜文件
band1 = ENVISubsetRaster(Raster, BANDS=[0])
maskRaster = ENVIBinaryGTThresholdRaster(band1, 0)
tmpLayer = view.CreateLayer(maskRaster)
;生成分类结果,并显示
ColorSliceTask = ENVITASK('ColorSliceClassification')
ColorSliceTask.INPUT_RASTER = maskRaster
ColorSliceTask.NUMBER_OF_RANGES = 2
ColorSliceTask.Execute
tmpLayer = view.CreateLayer(ColorSliceTask.OUTPUT_RASTER)
;生成shp文件
ClassToVectorTask = ENVITASK('ClassificationToShapefile')
ClassToVectorTask.INPUT_RASTER = ColorSliceTask.OUTPUT_RASTER
ClassToVectorTask.EXPORT_CLASSES = ['1 to 1']
ClassToVectorTask.OUTPUT_VECTOR_URI = outShpFile
ClassToVectorTask.Execute
shpLayer = View.CreateLayer(ClassToVectorTask.OUTPUT_VECTOR)
;删除临时结果
; STOP
; Raster.Close, error=err
; maskRaster.Close, error=err
; ColorSliceTask.OUTPUT_RASTER.Close, error=err
; ClassToVectorTask.OUTPUT_VECTOR.Close, error=err
; tmpFiles = FILE_SEARCH(FILE_DIRNAME(e.GetTemporaryFilename()),$
; '*envi*',COUNT=count)
; IF count NE 0 THEN FILE_DELETE, tmpFiles, /QUIET
END
;maskRaster = ENVIDataValuesMaskRaster(band1, [0,0], /inverse)
;maskRaster.METADATA.removeItem,'data ignore value', error=err
;
;ColorSliceTask.OUTPUT_RASTER.METADATA.UpdateItem,$
; 'CLASS NAMES', ['ROI','Background']