在做光谱曲线分析时常要求光谱的一阶导数和二阶导数,但ENVI中没有现成的功能,需要对ENVI做一个简单的二次开发。
1. 首先需要编写一阶求导和二阶求导的函数,该函数ENVI自带,名称为deriv,在ENVI的文件夹中可以找到,可以不必自己写。然后从论坛上下载两个接口函数:pf_1st_derivative.pro和pf_2nd_derivative.pro。
2. 然后打开ENVI的安装路径...\Exelis\ENVI50\classic\menu,打开文本文件useradd.txt,从第四行开始添加如下代码:{plot} {1st Derivative} {pf_1st_derivative} {type=0}和{plot} {2nd Derivative}{pf_2nd_derivative} {type=0}。作用是在光谱显示窗口的Plot Function菜单下添加两个新的选项。
3. 将两个pro函数添复制到ENVI的安装路径...\Exelis\ENVI50\classic\save_add下。
4. 如要使用这两个函数,必须打开ENVI + IDL 图标。
下面给出接口函数pf_1st_derivative.pro和pf_2nd_derivative.pro的代码:
pf_1st_derivative.pro:
function pf_1st_derivative, x, y, bbl, bbl_list, _extra=_extra
ptr= where (bbl_list eq 1, count)
result = fltarr(n_elements(y))
if (count ge 3) then $
result(ptr) = deriv (x[ptr], y[ptr])
return, result
end
pf_2nd_derivative.pro:
function pf_2nd_derivative, x, y, bbl, bbl_list, _extra=_extra
ptr= where (bbl_list eq 1, count)
result = fltarr(n_elements(y))
if (count ge 3) then $
return, result
end
以上两个pro函数只对光谱窗口内的光谱曲线进行求导,如需对一幅高光谱影像进行求导需要另外写函数,但实际上还是调用deriv 这个内部函数。