下面開始添加國產衛星光譜響應的支持:
以下主要參考文章“6S大氣傳輸模型修改源碼添加、自定義衛星光譜響應(以HJ-1B CCD為例)”網址:http://blog.csdn.net/sam92/article/details/50390556
我是在Windows7 64位系統下做的。6sv2.1版本,還是有很多注意問題的。
添加GF-1與GF-2傳感器光譜響應支持,從中國資源衛星網站上下載。
1. 修改main.f
解壓壓縮包之后,找到main.f打開。 可以發現首先出現與傳感器有關的代碼是在第363行的nsat變量:
nsat保存了傳感器波段名稱字符串,會顯示在輸出結果的傳感器名稱上。所以我們要在nsat的末尾加上我們自己的傳感器:
GF1 PMS1
GF1 PMS2
GF1 WFV1
GF1 WFV2
GF1 WFV3
GF1 WFV4
GF2 PMS1
GF2 PMS2
SPOT5 HRG
我加了8個字符串。注意保持字符串長度和之前的字符串長度一致(包含空格17個字符),看到代碼292行:
這里是nsat的定義,nsat(200)*17改為nsat(209)*17。
接下來,看到代碼大約1319行,關於spectral conditions的說明,可以添加傳感器的說明,添加編號(200-240),
這個編號是索引依據,大約1407行左右:
這個注釋說明了不同傳感器輸入對應應該goto哪一個語句,把自己的傳感器加進去。如果輸入是200-225,則goto 165編號的GF1行。如果輸入是226-235,則goto 166編號GF2的行。如果輸入是236-240,則goto 167編號SPOT5的行。注意檢查一下goto的編號是否已經存在了。
這只是修改了注釋,接下來修改代碼。就在注釋下方編號18的goto,觀察一下就是與注釋相對應的,我們把自己的傳感器加在下方:
然后就是寫編號為165、166、167的代碼行了,在編號164的下方,稍微修改一下函數名就好,注意括號里的(iwave-199),而不是(iwave-200),這是保證輸入參數波段號從1開始。
對mian.f的修改完成!
GF1波段26個,編號200-225
GF2波段10個,編號226-235
SPOT5波段5個,編號236-240
2. 制作傳感器文件(SPOT5.f)
下面制作傳感器光譜響應文件。新建一個文件,取名為SPOT5.f,注意文件名和上一步call的函數名一致。 內容拿MODIS.f全部復制粘貼過來。
由於SPOT5有5個波段,所以定義sr需要5行,下面定義每一個波段上的光譜響應了。用excel很簡單就能把光譜響應函數的光譜間隔差值到了2.5nm。
一行一行解釋,首先注釋行說明了起始波長和終止波長,下面是具體每一個波長上光譜響應值。注意每一行是1501列的,這個不能修改。因為6s中光譜范圍是0.25-4um,間隔為0.0025um,所以有(4-0.25)/0.0025+1=1501個波長。7行的數據中第一項92*0說明這一行數據前92個數為0;最后一項1343 * 0說明最后1343個數為0。中間有66個光譜響應值,一共是92+1343+66=1501個波段。具體計算方法是:假定光譜響應的范圍是(a,b),則前面的0計算方法是(a-250)/2.5,中間非零的計算方法是(b-a)/2.5+1;后面的0是(4000-b)/2.5。
按照上面的方法繼續完成剩余的3個波段,最后需要修改各個波段的上下限:
3. 修改makefile
最后要修改一下makefile,很簡單,打開makefile,在那一長串的字符最后加上我們的 GF1.o、GF2.o、SPOT5.o就OK了:
編譯 即可
如果編譯成功的話,就可以運行6s程序了,
output中可以看到我們自己加入的傳感器波段名 以及大氣校正的結果。
添加光譜響應還是很有比較的,比如實驗結果表明,GF2的兩個PMS傳感器波段2的差異還是很小的,但與TM的對應波段還是有差距的,大氣校正過程不建議近似替代。