跳转至

连续统去除

原文链接: https://www.nv5geospatialsoftware.com/Learn/Blogs/Blog-Details/continuum-removal

18663 为本文评分:

4.5

连续统去除

Anonym 2016年10月20日 星期四

最近,我有机会实践一些光谱学分析。在为项目做准备时,我意识到自己缺乏一种简单的方法来可视化非常离散的波长之间不同吸收特征的差异。我为此任务选择采用的方法被称为连续统去除(Kokaly, Despain, Clark, & Livo, 2007)。此方法允许你比较不同的光谱,并本质上对数据进行归一化处理,以便它们能更容易地进行相互比较。

使用该算法时,首先需要选择你感兴趣的光谱区域(对我来说,这是在 550 nm 到 700 nm 之间——这是处理叶绿素吸收和色素的光谱区域)。选定区域后,在两个端点之间拟合一个线性模型,这被称为连续统。连续统是假设的背景吸收特征、干扰或其他吸收特征,它作为要比较的目标特征的基线(Clark, 1999)。设置好连续统后,就可以使用以下方程对所有待处理的光谱执行连续统去除过程(Kokaly, Despain, Clark, & Livo, 2007)。

RC 是连续统去除后的结果光谱,RL 是连续统线,Ro 是原始的反射率值。

图 1:两种健康植物的原始光谱。虚线表示连续统线。X轴显示以纳米为单位的波长,Y轴代表反射率。

图 2:550 nm - 700 nm 波长的连续统去除结果。

最终生成的代码将提供一个工具,该工具会接收两个光谱库(每个库包含一个光谱),并返回类似于图1和图2所示的两个图表。

```pro Continuum_Removal compile_opt IDL2

Spectra_File_1 = Spectra_File_2 =

; Find the bounds for the feature FB_left = 550 FB_right =700

; Open Spectra 1 oSLI1 = ENVISpectralLibrary(Spectra_File_1) spectra_name = oSLI1.SPECTRA_NAMES Spectra_Info_1 = oSLI1.GetSpectrum(spectra_name)

; Open Spectra 2 oSLI2 = ENVISpectralLibrary(Spectra_File_2) spectra_name = oSLI2.SPECTRA_NAMES Spectra_Info_2 = oSLI2.GetSpectrum(spectra_name)

; Get the wavelengths wl = Spectra_Info_1.wavelengths

; Create Bad Bands List (this removes some regions of the spectra associated with water vapor absorption) bb_range = [[926,970],[1350,1432],[1796,1972],[2349,2500]] bbl = fltarr(n_elements(wl))+1 dims = size(bb_range, /DIMENSIONS) for i = 0 , dims[1]-1 do begin range = bb_range[*,i] p1 = where(wl eq range[0]) p2 = where(wl eq range[1]) bbl[p1:p2] = !VALUES.F_Nan endfor

;Plot oSLI1 / oSLI2 p = plot(wl, Spectra_Info_1.spectrumbbl, xrange = [min(wl, /nan),max(wl, /nan)],$ yrange=[0,max([Spectra_Info_1.spectrumbbl,Spectra_Info_2.spectrumbbl], /nan)], thick = 2, color = 'blue') p = plot(wl, Spectra_Info_2.spectrumbbl, /overplot, thick = 2, color = 'green')

; create the linear segment Spectra_1_y1 = Spectra_Info_1.spectrum[where( wl eq FB_left)] Spectra_1_y2 = Spectra_Info_1.spectrum[where( wl eq FB_right)] pl_1 = POLYLINE([FB_left,FB_right], [Spectra_1_y1, Spectra_1_y2], /overplot, /data, thick = 2, LINESTYLE = '--')

Spectra_2_y1 = Spectra_Info_2.spectrum[where( wl eq FB_left)] Spectra_2_y2 = Spectra_Info_2.spectrum[where( wl eq FB_right)] pl_2 = POLYLINE([FB_left,FB_right], [Spectra_2_y1, Spectra_2_y2], /overplot, /data, thick = 2, LINESTYLE = '--')

; Get the equation of the line LF_1 = LINFIT([FB_left,FB_right], [Spectra_1_y1, Spectra_1_y2]) LF_2 = LINFIT([FB_left,FB_right], [Spectra_2_y1, Spectra_2_y2])

; Get the values between the lower and upper bounds x_vals = wl [ where(wl eq FB_left) : where(wl eq FB_right)]

; Compute the continuum line RL_1 = LF_1[0] + LF_1[1] x_vals RL_2 = LF_2[0] + LF_2[1] x_vals

; Perform Continuum Removal Ro_1 = Spectra_Info_1.spectrum[ where(wl eq FB_left) : where(wl eq FB_right)] RC_1 = Ro_1 / RL_1

Ro_2 = Spectra_Info_2.spectrum[ where(wl eq FB_left) : where(wl eq FB_right)] RC_2 = Ro_2 / RL_2

; Plot the new Continuum Removal Spectra pl_RC_1 = plot(x_vals, RC_1, color = 'Blue', xrange = [min(x_vals, /NAN), max(x_vals, /NAN)] ) pl_RC_2 = plot(x_vals, RC_2, color = 'Green', /overplot)

end ```

Kokaly, R. F., Despain, D. G., Clark, R. N., & Livo, K. E. (2007). Spectral analysis of absorption features for mapping vegetation cover and microbial communities in Yellowstone National Park using AVIRIS data.

Clark, R. N. (1999). Spectroscopy of rocks and minerals, and principles of spectroscopy. Manual of remote sensing3, 3-58.

仅仅是一个观察世界的分析师 气象观测的未来即将来临!GOES-R