此篇為補(bǔ)充說明,完整預(yù)處理踩坑移步:
4.3.1 介紹
先說一下负溪,樓主上課的時(shí)候沒有認(rèn)真聽講透揣,導(dǎo)致對(duì)flassh大氣校正這個(gè)東西是完全不懂原理,一竅不通川抡,好在使用envi處理并不需要了解原理辐真,只需要了解參數(shù)即可。
參數(shù)崖堤,這就是IDLflassh接口的核心侍咱。如果你使用envi的的flassh工具gui處理過任何一個(gè)影像的話,你就會(huì)知道在結(jié)果文件夾里會(huì)有兩個(gè)文件密幔,一個(gè)是template.txt后綴的楔脯,這個(gè)文件就是將你在flassh面板中設(shè)置的參數(shù)全部總結(jié)下來,當(dāng)你的結(jié)果出錯(cuò)的時(shí)候建議你在這個(gè)文件里仔細(xì)檢查胯甩,然后restore再次apply昧廷;另一個(gè)是journal.txt后綴的,這個(gè)文件就是記錄你的flassh大氣校正過程的log偎箫,我用這個(gè)文件也就是為了出錯(cuò)的時(shí)候看看它記錄的錯(cuò)誤原因木柬,然后谷歌解決方案。
4.3.2 坑點(diǎn)4 坑爹的單位
在使用envi的gui進(jìn)行高分六號(hào)裁剪影像報(bào)的第一個(gè)錯(cuò):
IDL error: -5
? ? ? ? ? ACC_AVHEAD: Error -- some channels found outside 100 to 30000 cm-1 range
這個(gè)錯(cuò)誤指向的是波段設(shè)置超出范圍淹办,但其實(shí)錯(cuò)誤的真實(shí)原因是因?yàn)橐粋€(gè)單位:
wavelength_units = nanometers
這里的nanometers錯(cuò)了眉枕,應(yīng)該是nanometer,不能是復(fù)數(shù)娇唯,真的離譜齐遵。
樓主debug出這個(gè)錯(cuò)誤的方法非常笨,就是將那一大截參數(shù)設(shè)置一段一段的修改塔插,再逐個(gè)逐個(gè)的修改梗摇,最終終于定位到是wavelength_units 這個(gè)參數(shù)的問題。
4.3.3 坑點(diǎn)5?
先貼出錯(cuò)誤內(nèi)容:
IDL error: -266
? ? ? ? ? ? POINT_LUN: Negative position argument not allowed. Position: -1763572672, Unit: 102
指向位置溢出想许,要么是地理位置溢出伶授,要么是指針溢出,最后解決這個(gè)問題是我運(yùn)氣好流纹,搜索全網(wǎng)里有一個(gè)提到了高分影像需要設(shè)置這兩個(gè)參數(shù):
use_tiling = 1
tile_size = 100.0000
其實(shí)官博里也有提到糜烹,正確的設(shè)置應(yīng)當(dāng)是:
use_tiling = 1
tile_size = 1024.0000
4.3.4 坑點(diǎn)6 輻射校正
flassh大氣校正之前需要進(jìn)行輻射校正這是常識(shí)了吧,但我不知道啊漱凝,導(dǎo)致雖然envi輸出了結(jié)果疮蹦,但結(jié)果非常惡心人,花花綠綠的茸炒,非常離譜的反射值愕乎。
使用Radiometric Calibration時(shí)自動(dòng)將定標(biāo)后的輻射亮度單位調(diào)整為(μW)/(cm2*nm*sr)阵苇,與FLAASH要求的一致,才能輸出正確的反射值感论。
輻射校正后像元的范圍大約是0-10绅项,大氣校正后大約是0-10000,這是為了減小存儲(chǔ)空間比肄。
4.3.5 編程
具體編程方法就照著官方給出的demo修改就行了快耿,因?yàn)槲乙彩翘笾樞薷膭e人的代碼,不是原創(chuàng)而且代碼太多所以也就不放出來了芳绩,但是我覺得最重要的參數(shù)設(shè)置還是應(yīng)該放出來掀亥,可供對(duì)照參考,校正結(jié)果的template.txt的正確參數(shù)設(shè)置在下一段給出妥色。需要注意的是铺浇,獲取該地區(qū)的平均高程,以及根據(jù)緯度和月份給出大氣模型垛膝,是需要自己另外編寫函數(shù)的。
;
;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]