使用 python 执行光谱去统(皮)处理

光谱去统(皮)处理是高光谱领域常规处理手段,用于增强光谱吸收(或反射)特征。有相当量的文献在介绍这个技术的原理和算法, 本文结合 scipy 包中的 spatial 子模块中的 ConvexHull 函数给出实践方式。

读取数据

本示例中读取了一条由安捷伦4300实测的岩心波谱,截取其中8800-9600纳米区间的光谱数据。

import pandas as pd
import numpy as np
from scipy.signal import find_peaks
d=pd.read_csv('/home/lee/Documents/寨上波谱数据/ZK43-3_/275.76-291.26/2002-12-15T22-11-28.csv')
x=10000/d['Wavenumber'].values
y=d['Intensity'].values/100
y=y[(x>8.8) & (x<9.6)]
x=x[(x>8.8) & (x<9.6)]*1000
plt.plot(x,(y),'.')


数据处理

执行去除连续统处理的函数如下:

from scipy import interpolate
import numpy as np
from scipy.spatial import ConvexHull
def get_continuum_removal(x,y):
    points=np.array([x,y]).T
    points=points[x.argsort()]
    points=np.vstack( [ np.array([[points[0,0],-1]]),points,np.array([[points[-1,0],-1]])])
    hull = ConvexHull(points)
    temp=hull.vertices
    temp.sort()
    hull=points[temp[1:-1]]
    tck = interpolate.splrep((hull[:,0]),(hull[:,1]), k=1)