ASTER连续光谱向传感器通道光谱转换

ASTER光谱数据介绍

     ASTER光谱库包含三个子库,分别是 Johns Hopkins University (JHU) 光谱库、Jet Propulsion Laboratory (JPL) 光谱库和 United States Geological Survey (USGS) 光谱库。ASTER 光谱库包含多达 2300 余种典型地物的光谱,包括矿物质、岩石、土壤、植被、水体、冰雪等各类自然地物以及人造地物等类别,其波谱范围从 0.4 μm 到 15.4 μm。

问题描述

     但由于ASTER测量的光谱是400到15400nm波段范围的地表连续反射,而我们的目的是获得宽波段传感器通道的反射率或者发射率,因此需要进行由连续反射率向宽通道反射率/发射率的转换。
     传感器通道反射率转换公式为
在这里插入图片描述
其中ρ,S分别代表光谱反射率和通道光谱响应函数,λ1,2则是传感器通道起止波长。
因为 Incident Energy = Emitted Energy + Transmitted Energy + Reflected Energy。但一般地物的透射率为0。
所以100% = Emissivity + Reflectivity,传感器通道发射率转换公式如下。
     传感器通道发射率转换公式为
在这里插入图片描述
ps:关于通道发射率的转换,查阅了不少论文都没有贴出明确的公式,理论推导上来说公式应该是这样的。但最后计算结果有点不符合实际,欢迎有了解的老师们留言指教。

2020-5-27 更新: 在文献中找到了相关公式,验证了上面的通道比辐射率推导没错
在这里插入图片描述
ε i 为通道 i 的加权平均比辐射率, ε λ 为 地物光谱比辐射率,fi ( λ )为通道 i 的光谱响应函数

数据格式

ASTER光谱数据,以一个海水的光谱为例,植被,土壤,水,人造物总共2300+条。

图片替换文本

MERSI2 Band25光谱响应,以波数(cm-1)为单位,所以还要做一个向波长(nm)单位的转换处理。
单位的转换关系在之前的博客中讲过。

传感器通道波长单位换算
图片替换文本

IDL实现

pro aster_intergralcompile_opt idl2fn = dialog_pickfile(title = '选择光响应函数文件', filter = ['*.txt'])openr, lun, fn, /get_lun;逐行读取 读到Wavenumber的时候 新建数组 逐行读取响应函数值 str_line = ' 'flag = 0 while flag eq 0 do beginreadf, lun, str_lineif strpos(str_line, 'Wavenumber') ne -1 then beginflag = 1i = 0sensor = fltarr(2,1000)temp = fltarr(2)      while eof(lun) ne 1 do beginreadf, lun, tempsensor[*,i] = tempi = i + 1endwhile     endifendwhile  free_lun, lun;10nm间隔sensor = sensor[*,0:i-1]sensor = transpose(sensor)sensor = reverse(sensor)sensor[*,0] = 10e6	 / sensor[*,0] ;插值到1nm间隔start_wl = sensor[0,0]end_wl = sensor[-1,0]interpol_wl = [0:round(end_wl - start_wl):1] + start_wlwl = sensor[*,0]re = sensor[*,1]sensor_interpol_re = interpol(re, wl, interpol_wl);逐行读取ASTER光谱数据,读到‘Additional Information’新建数组fn = dialog_pickfile(title = '选择ASTER光谱数据', filter = ['*.txt'])openr, lun, fn, /get_lunstr_line = ' 'flag = 0while flag eq 0 do beginreadf, lun, str_lineif strpos(str_line, 'Additional Information') ne -1 then beginflag = 1i = 0aster = fltarr(2,5000)temp = fltarr(2)while eof(lun) ne 1 do beginreadf, lun, tempaster[*,i] = tempi = i + 1endwhileendifendwhile free_lun, lunaster = aster[*,0:i-1]aster = transpose(aster)aster = reverse(aster)aster[*,0] = aster[*,0] * 10^3aster[*,1] = 100 - aster[*,1] ;插值到和传感器同样波段范围的1nm间隔 wl = aster[*,0]re = aster[*,1]aster_interpol_re = interpol(re, wl, interpol_wl);计算积分up = int_tabulated(interpol_wl, sensor_interpol_re * aster_interpol_re)down = int_tabulated(interpol_wl, aster_interpol_re)fashelv = up / downprint,up,down,fashelvend

转换结果:

      984.210      993.957     0.990194


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部