ENVI时态分析工具
ENVI 时态分析工具展示了利用9景1975到2014年每年5月份的陆地卫星数据构建一个内华达州拉斯维加斯的时间序列。此工具展现了如何使用系列的管理实现时态分析以及动画视频导出。此工具同样包含代码示例,演示如何使用ENVI应用程序编程接口(API)在批处理模式下执行这些任务。
1、使用数据
本专题使用的数据来自ENVI Resource DVD Landsat Case Studies\Time Series路径下的数据。
数据为陆地卫星影像来自美国地质调查局(USGS)Earth Explorer网站下载,经过了如下预处理:
·
·
·
·
2、案例分析:拉斯维加斯发展
拉斯维加斯是美国增长最快的大都市之一。据美国人口普查局,拉斯维加斯,恒基兆业,永乐,NV大都市统计区(MSA)的人口在1970年是273288人。今天的人口约200万人。
遥感图像可以被用来监测市区随时间的扩展。高空间分辨率的图像是优选的城市范围内学习不同的功能。尤其是不透水表面随着时间的推移(道路,建筑物,停车场等)不断增加,获取整个大都市的高分辨率图像较难,同时存储消耗大量的磁盘空间。较低分辨率的图像,如陆地卫星传统产品可从USGS上免费获取,同时,此数据也常常适用于研究城市扩张过大的空间范围。
下面的变化检测的图像显示了从1980年至今的认为影响的差异。利用SPEAR变化检测工具从1980年的Landsat TM图像和2014年的Landsat-8的影像获取归一化建筑物指数用于检测城市的整体发展,其红色区域为自1980年以来城市的往外扩展区域。
变化检测只能提供变化“之前和之后”的情景;时态分析提供一种随着时间的推移研究城市发展模式以及城市的关键变化的机会。使用此工具可以展现,对于过去40年的时间,每隔5年的城市发展状态。
3、构建时间序列
采用时态分析工具将构建一个栅格数据集,此栅格数据集主要应用于时空分析。此工具创建的栅格数据集文件只是一个以.series文件扩展的元数据文件。该文件不包含任何图像;它只是引用源栅格的文件位置。
如果与ENVI头文件关联的栅格影像文件包含有时间元数据字段,你必须通过时间来订购该系列中的选项。
1.
2.
3.
4.
5.
6.
7.
4、显示时间序列文件
ENVI创建成功时态序列文件以后,将在ENVI 界面的左侧列表中显示。这些栅格影像文件以最早的时间为第一帧显示(LasVegasMay1975.dat),该显示组件的功能描述如下:
ENVI中每一个时间序列都是一个单独的图层,在数据管理中显示并且以显示的数据图表来展示。
任何显示操作,如缩放、旋转或拉伸都将适用于整个时间序列,此时间序列中没有任何特定影像需求。同样,图层管理中显示了当前影像显示图层情况,比如,当前显示
通过以下步骤操作时态分析工具:
1、
2、
3、
4、
5、
6、
7、
对于导入的感兴趣的影像数据,除去不能动态显示,可采用ENVI下的任何处理工具进行处理运算。
8、右击图层TM_Time,选择Remove,移除图层显示。
1)
如果每景影像包含了其对应的影像获取时间,可以通过注记工具在影像显示窗口中展示。在创建文本注记以前,为了显示更美观舒适,需要进行以下参数的设置:
1.
2.
3.
o
o
o
o
o
o
o
o
4.
5.
6.
注:还可以添加其他注记,如数据名,波段名
7.
8.
9.
2) 创建Video文件
l
l
l
l
l
5、ENVI API 代码示例
ENVI API代码示例可以从ENVI Resource DVD中获取。
预处理
此应用程序是用来预处理陆地卫星图像的,为时间序列分析做准备。此程序在最后的处理工作流中不包括添加影像获取时间头文件的功能,此操作必须手动完成。用户可根据自己的需求使用此脚本,确保在文件搜索中更更改磁盘的名称与地址目录。E
PRO PreprocessLandsatSeries
COMPILE_OPT IDL2
; Start the application
e = ENVI()
; Select input files. Select the *MTL.txt files for
; Landsat TM, -8, and some MSS images distributed
; by the USGS. For Landsat MSS images in .met format,
; change this line to search for '*.met' files.
files = File_Search('C:\Data', '*MTL.txt')
Foreach file, files DO BEGIN
Raster = e.OpenRaster(file)
VisNIRBands = Raster[0]
; This is the area of interest:
UpperLeftLat = 36.4
UpperLeftLon = -115.4
LowerRightLat = 35.94
LowerRightLon = -114.8
; Convert these coordinates from degrees to map
; coordinates in meters. Then define a spatial subset
; around the area of interest for the multispectral raster.
SpatialRef = VisNIRBands.SpatialRef
SpatialRef.ConvertLonLatToMap, UpperLeftLon, $
UpperLeftLat, MapX, MapY
SpatialRef.ConvertLonLatToMap, LowerRightLon, $
LowerRightLat, MapX2, MapY2
Subset = ENVISubsetRaster(VisNIRBands, $
SPATIALREF=SpatialRef, $
SUB_RECT=[MapX, MapY2, MapX2, MapY])
; Calibrate to top-of-atmosphere reflectance
RCTask = ENVITask('RadiometricCalibration')
RCTask.Input_Raster = Subset
RCTask.Calibration_type = 'Top-of-Atmosphere Reflectance'
RCTask.Output_Raster_URI = e.GetTemporaryFilename()
RCTask.Execute
; Perform QUAC atmospheric correction
QUACTask = ENVITask('QUAC')
QUACTask.Input_Raster = RCTask.Output_Raster
QUACTask.Sensor = 'Unknown'
QUACTask.Output_Raster_URI = e.GetTemporaryFilename()
QUACTask.Execute
; Create a spatial grid definition
; Coordinate system: UTM Zone 11N, WGS-84
; Spatial extent: 35.94N to 36.4N, 114.8W to 115.4W
; Pixel size: 30 meters
CoordSys = ENVICoordSys(COORD_SYS_CODE=32611)
Grid = ENVIGridDefinition(CoordSys, $
EXTENT=[MapX, MapY, MapX2, MapY2], $
PIXEL_SIZE=[30.0D, 30.0D])
; Reproject each raster to the common spatial grid
RegridTask = ENVITask('RegridRaster')
RegridTask.Input_Raster = QUACTask.Output_Raster
RegridTask.Grid_Definition = Grid
RegridTask.Output_Raster_URI = e.GetTemporaryFilename()
RegridTask.Execute
ReprojectedRaster = RegridTask.Output_Raster
; Get the year from the file name. For
; Landsat TM and -8 filenames, use this format:
year = Fix(Strmid(File_BaseName(file), 9, 4))
; For Landsat MSS images with a .met metadata file:
; year = Fix(Strmid(File_BaseName(file), 10, 4))
; Export the reprojected raster to disk in the
; system's temporary directory
outFile = Filepath('LasVegasMay'+StrTrim(year,2)+'.dat',/TMP)
ReprojectedRaster.Export, outFile, 'ENVI'
ReprojectedRaster.Close
Endforeach
END
构建时态分析数据
影像在预处理结束后被保存为envi的标准格式,即可采用下面的程序构建时间动态数据。ENVI API目前并不支持注释,在此视频中只是显示影像的时态序列数据。
PRO BuildAnimateTimeSeries
COMPILE_OPT IDL2
; Start the application
e = ENVI()
; Select input files
Files = File_Search('C:\Data\', 'LasVegasMay*.dat')
; Build a time series
Task = ENVITask('BuildTimeSeries')
Task.Input_Raster_URI = Files
Task.Output_Rasterseries_URI = e.GetTemporaryFilename('series')
Task.Execute
Series = Task.Output_RasterSeries
; Create a time series layer
View = e.GetView()
Layer = View.CreateLayer(Series)
View.Zoom, /FULL_EXTENT
; Animate the series and export a video file
VideoFile = e.GetTemporaryFilename('mp4')
View.ChipToVideo, VideoFile, 'mp4', $
SERIES_LAYER=Layer, DURATION=18.0
END