Floating point 创建代码以计算IDL中的NDVI

Floating point 创建代码以计算IDL中的NDVI,floating-point,byte,idl-programming-language,Floating Point,Byte,Idl Programming Language,我是IDL的新手,0级。我想知道是否有人可以帮我计算BIL或BIP文件的NDVI。我有一个文件。我理解NDVI的概念,NIR和R之间的反向关系。我只是不知道如何将其放入代码中 另外,我知道NDVI是浮点型的,但是,我需要以字节为单位保存最终的NDVI产品 有人能帮忙吗?谢谢。数据文件的格式是什么?如果它是一种图像格式,那么使用READ_XXXX例程非常容易,因此我将使用更难的情况,即它只是一个二进制文件。我假设您知道图像的大小(n_波段,n_样本,n_行),交织(BIL或BIP)和数据类型(下方

我是IDL的新手,0级。我想知道是否有人可以帮我计算BIL或BIP文件的NDVI。我有一个文件。我理解NDVI的概念,NIR和R之间的反向关系。我只是不知道如何将其放入代码中

另外,我知道NDVI是浮点型的,但是,我需要以字节为单位保存最终的NDVI产品


有人能帮忙吗?谢谢。

数据文件的格式是什么?如果它是一种图像格式,那么使用
READ_XXXX
例程非常容易,因此我将使用更难的情况,即它只是一个二进制文件。我假设您知道图像的大小(
n_波段
n_样本
n_行
),交织(BIL或BIP)和数据类型(下方浮动),以及NIR(
NIR_波段
)和R(
R_波段
)的波段索引

im = fltarr(n_samples, n_bands, n_lines)  ; this is BIL
; use im = fltarr(n_bands, n_samples, n_lines) for BIP

; nir_band is an index, 0..n_bands - 1, representing near infrared light
; r_band is an index, 0..n_bands representing the visible light

nir = float(im[*, nir_band, *])
r = float(im[*, r_band, *])
ndvi = (nir - r) / (nir + r)

; you might want to use the MIN and MAX if you want to scale in a certain
; manner
byte_ndvi = bytscl(ndvi)