此篇为补充说明,完整预处理踩坑移步:
4.3.1 介绍
先说一下,楼主上课的时候没有认真听讲,导致对flassh大气校正这个东西是完全不懂原理,一窍不通,好在使用envi处理并不需要了解原理,只需要了解参数即可。
参数,这就是IDLflassh接口的核心。如果你使用envi的的flassh工具gui处理过任何一个影像的话,你就会知道在结果文件夹里会有两个文件,一个是template.txt后缀的,这个文件就是将你在flassh面板中设置的参数全部总结下来,当你的结果出错的时候建议你在这个文件里仔细检查,然后restore再次apply;另一个是journal.txt后缀的,这个文件就是记录你的flassh大气校正过程的log,我用这个文件也就是为了出错的时候看看它记录的错误原因,然后谷歌解决方案。
4.3.2 坑点4 坑爹的单位
在使用envi的gui进行高分六号裁剪影像报的第一个错:
IDL error: -5
ACC_AVHEAD: Error -- some channels found outside 100 to 30000 cm-1 range
这个错误指向的是波段设置超出范围,但其实错误的真实原因是因为一个单位:
wavelength_units = nanometers
这里的nanometers错了,应该是nanometer,不能是复数,真的离谱。
楼主debug出这个错误的方法非常笨,就是将那一大截参数设置一段一段的修改,再逐个逐个的修改,最终终于定位到是wavelength_units 这个参数的问题。
4.3.3 坑点5
先贴出错误内容:
IDL error: -266
POINT_LUN: Negative position argument not allowed. Position: -1763572672, Unit: 102
指向位置溢出,要么是地理位置溢出,要么是指针溢出,最后解决这个问题是我运气好,搜索全网里有一个提到了高分影像需要设置这两个参数:
use_tiling = 1
tile_size = 100.0000
其实官博里也有提到,正确的设置应当是:
use_tiling = 1
tile_size = 1024.0000
4.3.4 坑点6 辐射校正
flassh大气校正之前需要进行辐射校正这是常识了吧,但我不知道啊,导致虽然envi输出了结果,但结果非常恶心人,花花绿绿的,非常离谱的反射值。
使用Radiometric Calibration时自动将定标后的辐射亮度单位调整为(μW)/(cm2*nm*sr),与FLAASH要求的一致,才能输出正确的反射值。
辐射校正后像元的范围大约是0-10,大气校正后大约是0-10000,这是为了减小存储空间。
4.3.5 编程
具体编程方法就照着官方给出的demo修改就行了,因为我也是腆着脸修改别人的代码,不是原创而且代码太多所以也就不放出来了,但是我觉得最重要的参数设置还是应该放出来,可供对照参考,校正结果的template.txt的正确参数设置在下一段给出。需要注意的是,获取该地区的平均高程,以及根据纬度和月份给出大气模型,是需要自己另外编写函数的。
;
;ENVI FLAASH PARAMETERS TEMPLATE (5.1)
;Written Thu Feb 24 14:45:29 2022
;
; Project Parameters
enviacc.prj.radiance_file = E:\DELL\GF6\IDL\ENVI_FLAASH_Batch\data\0778
enviacc.prj.reflect_file = E:\DELL\GF6\IDL\ENVI_FLAASH_Batch\output\0778.dat
enviacc.prj.filter_func_file = C:\Program Files\Exelis\envi51\resource\filterfuncs\gf6_wfv.sli
enviacc.prj.filter_func_file_index = 0
enviacc.prj.water_band_choice = 1.13
enviacc.prj.red_channel = 3
enviacc.prj.green_channel = 2
enviacc.prj.blue_channel = 1
enviacc.prj.water_abs_channel = 0
enviacc.prj.water_ref_channel = 0
enviacc.prj.kt_upper_channel = 0
enviacc.prj.kt_lower_channel = 3
enviacc.prj.kt_cutoff = 0.0800
enviacc.prj.kt_ratio = 0.5000
enviacc.prj.cirrus_channel = 0
enviacc.prj.water_retrieval = 0
enviacc.prj.user_stem_name = 0778_
enviacc.prj.modtran_directory = E:\DELL\GF6\IDL\ENVI_FLAASH_Batch\output\
;
; MODTRAN Parameters
enviacc.modtran.visvalue = 40.0000
enviacc.modtran.f_resolution = 5.0000
enviacc.modtran.day = 1
enviacc.modtran.month = 6
enviacc.modtran.year = 2021
enviacc.modtran.gmt = 2.9233
enviacc.modtran.latitude = 45.1908
enviacc.modtran.longitude = 129.0341
enviacc.modtran.sensor_altitude = 645.0000
enviacc.modtran.ground_elevation = 0.4150
enviacc.modtran.view_zenith_angle = 180.0000
enviacc.modtran.view_azimuth = 0.0000
enviacc.modtran.atmosphere_model = 3
enviacc.modtran.aerosol_model = 1
enviacc.modtran.multiscatter_model = 2
enviacc.modtran.disort_streams = 8
enviacc.modtran.co2mix = 390.0000
enviacc.modtran.water_column_multiplier = 1.0000
;
; Image Parameters
enviacc.img.nspatial = 12046
enviacc.img.nlines = 17506
enviacc.img.data_type = 12
enviacc.img.margin1 = 0
enviacc.img.margin2 = 0
enviacc.img.nskip = 0
enviacc.img.pixel_size = 16.0000
enviacc.img.sensor_name = UNKNOWN-MSI
;
; Analysis Parameters
enviacc.ana.aerosol_scaleht = 1.5000
enviacc.ana.use_adjacency = 1
enviacc.ana.output_scale = 10000.0000
enviacc.ana.polishing_res = 0
enviacc.ana.aerosol_retrieval = 0
enviacc.ana.calc_wl_correction = 0
enviacc.ana.reuse_modtran_calcs = 0
enviacc.ana.use_square_slit_function = 0
enviacc.ana.convolution_method = fft
enviacc.ana.use_tiling = 1
enviacc.ana.tile_size = 1024.0000
;
; GParameters Parameters
enviacc.gparameters.gfact = 0
enviacc.gparameters.gval = 0.0000
enviacc.gparameters.use_lr_method = 0
enviacc.gparameters.multikernel = 1
enviacc.gparameters.autoroi = auto
enviacc.gparameters.selarg = a
;
; Spectral Parameters
enviacc.spc.wavelength_units = nanometer
enviacc.spc.lambda = [
488.0000, 558.0000, 659.0000, 826.0000, 701.0000, 749.0000, 432.0000,
609.0000]
enviacc.spc.fwhm = [
0.070000, 0.070000, 0.060000, 0.120000, 0.040000, 0.040000, 0.050000,
0.040000]
enviacc.img.p_input_scale = [
1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000]