ENVI FLAASH大气校正常见错误及解决方法(2023年2月更新)
本文汇总了ENVI FLAASH大气校正模块中常见的错误,并给出解决方法,分为两部分:运行错误和结果错误。前面是错误提示及说明,后面是错误解释及解决方法。
FLAASH对输入数据类型有以下几个要求:
1、 波段范围:卫星图像:400-2500nm,航空图像:860nm-1135nm。如果要执行水汽反演,光谱分辨率<=15nm,且至少包含以下波段范围中的一个:
- 1050-1210 nm
- 770-870 nm
- 870-1020 nm
2、 像元值类型:经过定标后的辐射亮度(辐射率)数据,单位是:(μW)/(cm2*nm*sr)。
3、 数据类型:浮点型(Floating Point)、32位无符号整型(Long Integer)、16位无符号和有符号整型(Integer、Unsigned Int),但是最终会在导入数据时通过Scale Factor转成浮点型的辐射亮度(μW)/(cm2*nm*sr)。
4、 文件类型: ENVI标准栅格格式文件,BIP或者BIL储存结构。
5、 中心波长:数据头文件中(或者单独的一个文本文件)包含中心波长(wavelenth)值,如果是高光谱还必须有波段宽度(FWHM),这两个参数都可以通过编辑头文件信息输入(Edit Header)。
运行错误
1、Unable to write to this file.File or directory is invalid or unavailable。
没有设置输出反射率文件名。
解决方法是单击Output Reflectance File按钮,选择反射率数据输出目录及文件名,或者直接手动输入。
2、ACC Error:convert7
IDL Error:End of input record encountered on file unit:0.
平均海拔高程太大。
注意:填写影像所在区域的平均海拔高程的单位是km:Ground Elevation(Km)。
3、ACC error:avrd:
IDL error:Unable to allocate memory:to make array
Not enough space
ACC_AVRD
为了能处理大数据,ENVI采用分块计算的方式,这个提示是分块(Tile)太大了。
在高级设置里面(Advanced Settings),tile size:它默认是File-> preferences ->miscellaneous:cache的大小,这个值正常是1~4Mb(0背景很少的情况下);如果0背景较多,这个值还是需要设置大一些,比如100~200m。
4、ACC error:avrd:No nonblank pixels found
IDL error:
OPENR: Error opening file. Unit: 100,
为了能处理大数据,ENVI采用分块计算的方式,当Tile设置太小,而且有背景值(0),就会出现一个Tile中全部为0的情况,提示这个错误信息。
在高级设置里面(Advanced Settings),tile size:设置稍微大一些,如100~200M等。
5、ACC error:lsmooth2:
IDL error:
ACC_LSMOOTH2:Cannot continue with smoothing calculation
ENVI的FLAASH提供领域纠正功能,但是MODIS、AVHRR等图像分辨率比较低,领域效应区分不出来。
解决方法是在在高级设置里面(Advanced Settings),将领域纠正(Use Adjacency Correction)设置为No。
6、ACC error:modrd5:Nonfinite numbers in coefficient array coef
IDL error:
CDRIVER4V3R2:>>>Wait for MODTRAN4 calculation to finish…
提示传入MODTRAN模型参数有误,常常是由于太阳高度角太小或者太大引起的。提示这个错误之前会出现以下提示框。
解决方法:确认填写的影像中心位置经纬度信息(西经为负数、南纬为负数)、影像成像时间(格林威治时间)是否正确。
7、Problem:The FLAASH program exited with the following errors:
ACC error: modrd5:reading archieve file header
IDL error:
READU:End of file encountered. Unit: 102, File:
C:Users\administrator\AppData\Local\Temp\acc_modroot.fla
ACC_MODRD5
ACC_KTAEROSOL
ACC_HYPER2
ACC_ACC
ENVI_ACC_EVENT
ENVI_FLAASH_PROCESS_MANAGER
IDLRTMAIN
$MAIN$
解决方法:在高级设置里面(Advanced Settings),tile size设置太大,根据内存情况设置小一点的值。tile size的默认值是file->preference中cache size大小。
8 、102错误
在使用FLAASH进行大气校正时候,出现以下102错误:
ACC error:modrd5:reading archive file header
IDL error:
READU:End of file encountered.Unit:102,file:
原因分析:有可能是软件对输出/输入文件读写权限受限,如这里默认输出文件夹"C:\Users\用户名\AppData\Local\Temp"读写权限受限,导致读取不到相应的文件,如下图所示:
解决方法:将Output Directory for FLAASH Files目录换一个。
9 、illegal subscript range: CHANNEL_DATA.影像波段与波谱响应函数文件不匹配错误
在使用FLAASH进行大气校正时候,出现以下错误:illegal subscript range: CHANNEL_DATA.(非法下标范围:CHANNEL_DATA)
原因分析:影像波段数量、中心波长与相应传感器的波谱响应函数文件不匹配。比如modis数据做MCTK处理时勾选了别的波段数据集,造成大气校正时与MODIS传感器波谱响应函数文件不匹配报错。
解决方法:检查影像波段情况,确认影像波段数与中心波长与波谱响应函数文件一致。
9 、HISTOGRAM: Illegal binsize or max/min.直方图统计错误
在使用FLAASH进行大气校正时候,出现以下HISTOGRAM: Illegal binsize or max/min.直方图统计错误。
原因分析:影像中有NaN等异常值。例如下图MODIS数据处理时,背景值按照默认设置的NaN,在进行FLAASH大气校正的时候就会报上图的统计错误。
解决方法:检查影像中是否包含NaN等异常值,或者背景值是否设置了NaN等异常值作为忽略值,将其修改为0或其他非异常值。
结果错误
1. 结果中某一个波段或者多个波段全部为0或者负值
主要产生的原因是输入的辐射亮度数据值偏小。
可能有以下几种情况:
(1) 在传感器定标的时候选择的是表观反射率(Reflectance)而不是辐射率数据(Radiance);
(2) 没有做传感器定标,即没有将DN值转换为辐射率数据;
(3) 选择了错误的波谱响应函数;
(4) 用BandMath做了辐射亮度的单位换算,在FLAASH中导入辐射亮度数据时,Scale Factor选择的不是1.0000。
2. 结果中极大值、极小值非常多,也就是0~10000之外的值。当选择RGB假彩色显示的时候,出现花花绿绿的情况。
辐射定标得到的辐射率数据单位与FLAASH要求的单位不一样。
可能有以下几种情况:
(1) 用BandMath做了辐射亮度的单位换算,在FLAASH中导入辐射亮度数据时,Scale Factor选择的不是1.0000。
(2) 没有做单位换算。
3. 结果中部分像元为负值
这个属于正常现象。FLAASH是采用MODTRAN辐射传输模型模拟成像中的大气过程,而且很多大气属性都是通过图像来估算,加上大气组成的非均一性,即使MODTRAN4模型精度很高,也不能完全表达大气辐射传输的真实状况。当影像上有强吸收或者高反射地物时候,就会出现部分像元为负值(如深水、高密度)或者大于10000。
解决方法可以手动修改,如用周围的像元的平均值代替,可以使用ENVI下的The DEM Editing Tool工具。
4. 结果图像以RGB显示比原图像视觉效果要差,如模糊。
这个需要了解下遥感软件RGB显示机制。遥感软件为了让遥感图像显示更加“艳丽”,方便解译,默认会对图像进行拉伸显示,一般是2%的线性拉伸。也就是我们常常会看到图像值有两个,一个是Scrn值,也就是拉伸之后的显示值,一个是Data值,也就是原始的图像DN值。另外一个方面,目前我们的RGB加色法显示都是基于8bit显示,也就是0~255。
FLAASH大气校正之后的结果是16bit的整型,而且存在一些极小、极大值,这些对直方图整体形状有一定的影响,影响拉伸效果。解决方法是利用ENVI下的Interactive stretching工具,选择有效值范围进行拉伸。
还有一种情况是校正图像有很多背景值,比如经过几何校正的整景TM影像。背景及图像边缘处的像元在大气校正之后变成负值或者0值,由于这样的像元数量多,对图像的整体拉伸影响很大。解决方法就是将这些像元掩膜掉,如在ROI Tool中,利用Option->Band Threshold to ROI建立一个ROI进行图像裁剪。
5. 结果图像为什么像元值大多是大于1
ENVI FLAASH考虑到数据储存和后续处理,将大气校正得到的反射率结果乘以10000变成16bit整型。
如果想让反射率结果在0~1范围,可用BandMath,表达式为b1/10000.0。