IDL批处理高分六号(GF6)FLASSH大气校正踩坑全纪录

此篇为补充说明,完整预处理踩坑移步:

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]

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容