IDL interpol函数插值波谱响应函数

2024-04-12 18:08

本文主要是介绍IDL interpol函数插值波谱响应函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

interpol函数介绍

一维数组插值
result=interpol(v,x,xout,/lsquadratic,/quadratic,/spline,/NAN)
v为输入的数组,x为v中各个元素对应的横坐标值,xout为插值结果数组中各个元素对应的横坐标值的v值(可参考下面代码中的注释帮助理解)。
/lsquadratic,/quadratic,/spline为插值方法关键字,未设置时默认线性插值。
/NAN于设置插值的时忽略NAN值。
以下是官方对关键字的解释:
在这里插入图片描述

interpol函数举例
y=[1,3,5,7,9]
x=[0,1,2,3,4]
x_interpol=[1.5,2.5,3.5]
print,interpol(y,x,x_interpol)4.00000      6.00000      8.00000
y=[1,3,5,7,0.0/0]
x=[0,1,2,3,4]
x_interpol=[1.5,2.5,3.5]
print,y
print,interpol(y,x,x_interpol,/nan)1.00000      3.00000      5.00000      7.00000         -NaN4.00000      6.00000      8.00000
遥感中实际应用举例

波段响应函数,英文名为spectral response function(SRF)或者叫Relative Spectral Response (RSR) ,与宽波段传感器出现。我们知道每一个波段都有一个波段范围,比如HJ-b1(475nm)波段为520-430纳米,实际上传感器的感光元件在这个波段范围内的每一点所感应的强度都是不一样。在成像中,原则上讲应该根据波段响应函数来进行加权平均,但由于处理起来比较麻烦,而且一般的精度要求不太高,所以大多数图像都是直接取了波段范围内的中点值来运算。波段响应函数是描述一定波长范围内(超出波段范围)的量子效应,当需要精确计算像元响应时候,比如大气校正反演真实地表反射率,就需要使用波谱响应函数。参考:ENVI-IDL技术殿堂:ENVI下波谱响应函数(波段响应函数)制作
以下为FY3C-MERSI band5波谱响应函数,波长单位为nm,波长间隔为10nm
波谱响应函数第一列为波长,后面列为各波段对应的波谱响应值

9500.000  0.000
9700.000  0.000
9750.014  0.000
9759.999  0.00102
9770.013  0.00201
9779.995  0.00397
9790.006  0.00722
9799.984  0.01213
9809.993  0.01895
·······
12520.00  0.01050
12529.98  0.01039
12539.99  0.01133
12550.00  0.010
12560.01  0.009
12569.98  0.00
12579.98  0.00
12589.99  0.00
12599.98  0.00
12610.01  0.00
12620.00  0.00
12629.99  0.00
12640.01  0.00
12650.00  0.00
13000.00  0.00

而有时候辐射传输模型需要波长间隔为1nm或者25nm的波谱响应函数文件,所以需要插值得到符合要求的波谱响应函数。
以下代码为将原始10nm间隔波谱响应插值到1nm间隔。

pro interpol_functionfn=dialog_pickfile(title='请选择文件')openr,lun,fn,/get_lun;查询文件的行数nl=file_lines(fn);定义储存数据的数组data=fltarr(2,nl-1)readf,lun,datafree_lun,lun;获取起始波长start_wl=data[0,0];获取终点波长end_wl=data[0,-1];定义要得到的波长序列,即波长间隔为1nminterpol_wl=indgen(1,end_wl-start_wl+1)+start_wlwl=data[0,*]re=data[1,*];re为原始函数中的y值,wl为原始函数的x值,interpol_wl为要插值的x值;得到插值到的interpol_re y值interpol_re=interpol(re,wl,interpol_wl);循环写出新波谱响应函数nl=n_elements(interpol_wl)final_data=fltarr(2,nl)for i=0,nl-1 do beginfinal_data[1,i]=interpol_re[i]endforfor j=0,nl-1 do beginfinal_data[0,j]=interpol_wl[j] endfor;写出文件ofn=dialog_pickfile(title='文件保存为')openw,lun,ofn,/get_lunprintf,lun,final_datafree_lun,lun
end
运行结果:
      ······9960.00     0.2889819961.00     0.2914029962.00     0.2938239963.00     0.2962439964.00     0.2986649965.00     0.3010859966.00     0.3035059967.00     0.3059269968.00     0.3083479969.00     0.3107679970.00     0.313188·······10154.0     0.78526110155.0     0.78725410156.0     0.78924810157.0     0.79124110158.0     0.79323410159.0     0.79522710160.0     0.79722010161.0     0.79915510162.0     0.80109010163.0     0.80302510164.0     0.80496010165.0     0.806896······12474.0    0.031238812475.0    0.030418012476.0    0.029597212477.0    0.028776412478.0    0.027955612479.0    0.027134812480.0    0.026317312481.0    0.025664512482.0    0.0250118······

绘制波谱响应曲线:
在这里插入图片描述

这篇关于IDL interpol函数插值波谱响应函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/897858

相关文章

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3

神经网络第一篇:激活函数是连接感知机和神经网络的桥梁

前面发布的文章介绍了感知机,了解了感知机可以通过叠加层表示复杂的函数。遗憾的是,设定合适的、能符合预期的输入与输出的权重,是由人工进行的。从本章开始,将进入神经网络的学习,首先介绍激活函数,因为它是连接感知机和神经网络的桥梁。如果读者认知阅读了本专题知识,相信你必有收获。 感知机数学表达式的简化 前面我们介绍了用感知机接收两个输入信号的数学表示如下:

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

在vscode中控制台运行python文件出现:无法将"pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 使用vscode开发python,需要安装python开发扩展: 本文已经安装,我们需要找的是python安装所在目录,本文实际路径如下: 如果在本文路径中没有此目录,请尝试在C盘中搜索 python,搜索到相关python目录后,点击Python 3.9进入目录,

C语言入门系列:初识函数

文章目录 一,C语言函数与数学函数的区别1,回忆杀-初中数学2,C语言中的函数 二, 函数的声明1,函数头1.1,函数名称1.2,返回值类型1.3,参数列表 2,函数体2.1,函数体2.2,return语句 三,main函数四,函数的参数与传递方式1,实参和形参1.1,函数定义(含形参)1.2,函数调用(使用实参) 2,参数传递方式2.1,值传递2.2,引用传递 五,函数原型与预声明1,

Linux C/C++ socket函数

目录 socket函数 函数原型 头文件 功能 返回值 参数 错误码 socket函数 函数原型 int socket(int domain, int type, int protocol); 头文件                 #include <sys/types.h>                 #include <sys/socket.h>

C语言 gets函数 puts函数 getchar函数

gets函数从标准输入读取一行文本并把它存储于作为参数传递给它的数组中。 一行输入由一串字符组成,以一个换行符(newline)结尾。 gets函数丢弃换行符,并在改行的末尾存储一个NULL字节(一个NULL字节是指字节模式为全0的字节,类似’\0’这样的字符常量)。然后,gets函数返回一个非NULL值,表示该行已被成功读取。 当gets函数被调用,但事实上不存在输入行时,它就返回NULL值,表