使用 ENVI + IDL 开发自定义处理算法

本文介绍了IDL编程语言在遥感数据分析中的应用,特别是与ENVI软件的结合。通过ENVIAPI,用户可以创建自定义算法,如Landsat8数据的缨帽变换(TCT),用于提取亮度、绿色度和湿度等信息。文章提供了一个使用IDL实现TCT的代码示例,展示了IDL在处理多光谱数据和地理数据可视化方面的强大功能。
摘要由CSDN通过智能技术生成

一、前言

IDL 用于跨学科提取有意义的信息并从复杂的数字数据创建可视化。 IDL 的前身版本是为分析来自 NASA 任务(例如 Mariner 和国际紫外线探索者)的数据而编写的。 IDL 的这些前身版本是 20 世纪 70 年代在科罗拉多大学博尔德分校的大气和空间物理实验室 (LASP) 开发的。 IDL 的第一个正式版本于 1977 年由 Research Systems Inc. (RSI) 发布。 自 1970 年代首次创建以来,IDL 已经走过了漫长的道路。 我们的工程师不断地为 IDL 添加新功能,以保持它的现代性、灵活性和用户友好性。

由于 IDL 起源于一种面向科学家和工程师处理多维科学数据阵列的编程语言,因此它非常自然地适用于处理来自遥感系统的栅格数据。 1994 年,RSI 发布了 ENVI 的第一个版本。 从那时起,ENVI 和 IDL 就像形影不离的好朋友。 IDL 可以做什么,ENVI 也可以。 ENVI 有一个用 IDL 编写的 API,可用于创建自定义算法、自定义工作流以及遥感数据的批处理。

使用 IDL 扩展 ENVI 的能力是 ENVI 最强大的一个方面。 ENVI API 有一个快速的学习曲线,一旦你弄明白了,你可以用你的数据做什么。 这包括强大的地理数据可视化效果,例如我在下面使用 CONTOUR 函数创建的可视化效果。

ENVI API 的一个更强大的方面是实现自定义算法的能力。这允许用户应用他们在科学文献中阅读过的算法或试验他们自己的图像分析算法。 让我们继续看看如何使用 IDL 在 ENVI 中实现自定义算法。 在这个例子中,我们将使用 Landsat 8 的缨帽变换 (TCT)。TCT 最初是为 1972 年发射的 Landsat 多光谱扫描仪 (MSS) 设计的。TCT 的后续改编已在科学杂志上发表 Landsat Thematic Mapper (TM)、Landsat Enhanced Thematic Mapper (ETM) 和 Landsat Enhanced Thematic Mapper Plus (ETM+) 传感器的文献。 在 Landsat MSS、TM、ETM 和 ETM+ 图像上执行 TCT 的能力是开箱即用的 ENVI。 然而,Landsat Operational Land Imager (OLI) 传感器的 TCT 算法最近才发布,尚未进入 ENVI 工具箱。 但是,由于该算法现已在科学文献中可用,我们可以使用 ENVI API 将此算法应用于 Landsat 8 数据。 该算法采用 Landsat 8 图像并计算包含 6 个波段的新图像文件,每个波段包含有关场景的唯一信息,例如反照率(亮度)、植被健康(绿度)和水分含量(湿度)。

下面的示例代码可以在 ENVI + IDL 中实现,以对 Landsat 8 数据执行 TCT:基于 Landsat 8 卫星反射率的穗帽变换的推导

二、代码过程

; Copyright (c) 1988-2015, Exelis Visual Information Solutions, Inc. All rights reserved.

pro tasseledcapidl



; Set compile options - this is a standard compatibility line that is recommended for use in all IDL code

compile_opt IDL2

 

; Use the current session of ENVI

e=envi(/current)

 

; Path and filename to a pre-calibrated Landsat 8 image file

; Input file should be radiometrically calibrated and optionally atmospherically corrected

inputRaster = e.OpenRaster('C:\Data\Naples\LC80160422015028LGN00_RadCal_MS_Subset.dat')

 

; Subset the input raster - only these 6 bands are needed for the TCT calculation

subsetRaster=ENVIsubsetRaster(inputRaster, BANDS=[1,2,3,4,5,6])



; Set up output raster file

outputRaster = ENVIRaster(URI=outputURI, INHERITS_FROM=subsetRaster)



; Create tiles - creating tiles allows ENVI + IDL to iterate through the tiles, which is a good idea

; when you want to minimize the impact of image processing on your computer's resources

tiles = subsetRaster.CreateTileIterator(MODE='spectral')



; Iterate through tiles 

FOREACH tile, tiles DO BEGIN

; band 1 

b1 = tile[*,0]

; band 2

b2 = tile[*,1]

; band 3

b3 = tile[*,2]

; band 4

b4 = tile[*,3]

; band 5

b5 = tile[*,4]

; band 6

b6 = tile[*,5]

dims= size(tile,/DIMENSIONS)

data = make_array(dims,/FLOAT)

 

; Use IDL to do the TCT calculations

; Calculate brightness

data[*,0] = (b1 * 0.3029) + (b2 * 0.2786)+ (b3*0.4733) + (b4*0.5599) + (b5*0.508) + (b6*0.1872)

; Calculate greenness

data[*,1] = (b1 * (-0.2941)) + (b2 * (-0.243))+ (b3 * (-0.5424)) + (b4 * 0.7276) + (b5 * 0.0713)

; Calculate wetness

data[*,2] = (b1 * 0.1511) + (b2 * 0.1973)+ (b3 * 0.3283) + (b4 * 0.3407) + (b5 * (-0.7117)) + (b6*(-0.4559))

; Calculate TCT4 (Haze)

data[*,3] = (b1 * (-0.8239)) + (b2 * 0.0849)+ (b3 * 0.4396) + (b4 * (-0.058)) + (b5 * 0.2013) + (b6*(-0.2773))

; Calculate TCT5

data[*,4] = (b1 * (-0.3294)) + (b2 * 0.0557)+ (b3 * 0.1056) + (b4 * 0.1855) + (b5 * (-0.4349)) + (b6 *0.8085)

; Calculate TCT6

data[*,5] = (b1 * 0.1079) + (b2 * (-0.9023))+ (b3 * 0.4119) + (b4 * 0.0575) + (b5 * (-0.0259)) + (b6 *0.0252)



; Write to ouput file

outputRaster.SetTile, data, tiles

 

ENDFOREACH



; Add appropriate Band Names to the HDR file

metadata = outputRaster.METADATA

metadata.UpdateItem, 'BAND NAMES', ['Brightness','Greenness','Wetness','TCT4','TCT5','TCT6']



; Save changes to output file

outputRaster.save



; Display output file in ENVI Display

view=e.getview()

layer=view.createlayer(outputRaster)



end

三、结果展示

此示例的输入文件由 Landsat 8 于 2015 年 1 月 28 日在佛罗里达州那不勒斯上空捕获。下面的 ENVI 显示屏屏幕截图显示了场景的彩色红外表示,以及计算出的亮度、绿色度和湿度带 流苏帽改造。 这只是 IDL 的强大功能如何使自定义算法的实现变得如此简单的一个例子。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾城一少

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值