五 IDL考前复习IDL联动ENVI辐射定标( 二 )


这个函数的传入值是b a n d band band,即你要处理的波段 。
=(band)
=.trim()
看图说话还是比较容易的,b a n d band band在实际函数传递的时候是个int类型的,所以我需要把它转成的文本类型而转化成文本,而前面又有空格所以就需要用 trim 进行裁剪,
=‘D_’+
=‘_’+
=‘’+
这段我就不大想解释了,其实就是一些字符串的命名 ‘+’ 号就是把字符串给拼接起来,我就不截图了,太伤身体了 。
gains=float([])
bias=float([])
由于在之前那个函数中已经有一个h a s h m e t a了,其实现在都是一些形式参数,等到了主pro过程是要传入实际参数的 。
在主pro过程中会先利用第一个函数h a s h m e t a = g e t m e t a d a t a ( f o l d e r + f i l e n a m e ) =(+) =(+) 会得到一些键和一些值 。
就是说找到相应的键和值由于那些键和值都是文本类型的,需要转化成浮点型的 。
fn=[]
fn=+fn.(’ " ‘,’’)
这里就是找到文件名,根据h a s h hash hash表 找到文件名,然后把双引号替代成单引号,并且加上它的文件夹,我特意断点截图了一下,看了一下效果 。
中途的过程太过心酸,实际上单纯看这个函数定义没啥用,因为没传入实参,等到主pro过程加入实参会更有用,其实就是根据h a s h hash hash表 相应的键找到相应的值 。看到这个过程的原因是我已经开始在主pro过程运行完第一个函数了 。
envi_open_data_file,fn,r_fid=fid,/tiffenvi_file_query,fid,dims=dims,map_info=mapinfo,nl=nl,ns=ns,nb=nb,bnames=bnames,interleave=interleave,offset=offset
这部分没法一行用茶青色和特定的字体做完只好贴代码了 。

五  IDL考前复习IDL联动ENVI辐射定标

文章插图
开始了envi联动的过程,记得如果envi联动的话需要在命令行输入ENVI,打开ENVI经典的进程,否则一定运行不出来
解释下,就是打开利用envi打开文件,文件名,然后记得是 r_fid = fid后面有好多 fid 或者 fid = fid 的,并且打开的是tiff文件 。
下一个就是利用ENVI查询相应的参数,这么多参数我实在没法解释了,我猜也不能考把,知道,和应该就够了,投影、乘常数、偏移量 。
=(fid=fid)
=(fid=fid,dims=dims,pos=0)
第一句话就是得到投影的意思,上面的 query 只能查询好像不能得到参数,需要专门的函数得到图像的地理参考信息,而且记得是fid = fid 上面用查询 query 函数的时候只要一个fid 不需要额外的添加 。
第二句话就是得到数据的意思,fid = fid 注意下,因为只有一个波段所以设置pos = 0 。
=*gains+bias
这句话才是整个程序的核心,就是辐射定标的公式,也就是一个矩阵计算罢了 。
envi_write_envi_file,result,out_name='E:/radcalib.img',map_info=mapinfo,data_type=4,nl=nl,ns=ns,nb=nb,bnames=bnames,interleave=interleave,offset=offset
最后写出ENVI文件,记得写出的数据的值是 float 类型即= 4,然后又是一堆烦躁的参数 。
,‘ok’
这个我觉得是老师做了10多年的程序主管习惯了,就只是告诉你程序运行成功了 。
3.主pro过程
终于来到最后了,我觉得不仅仅是我最后用IDL了,也可能是我最后一段时间再做普通遥感的内容了,毕设以及后期应该会转图像处理和机器学习的内容,伤感一下,哈哈,算半逃出升天把进入另一个魔窟吧 。
profushedingbiaofolder= 'E:\LC81220352018123LGN00\'filename='LC08_L1TP_122035_20180417_20180501_01_T1_MTL.txt'hashmeta=getmetadata(folder+filename)result=getcalculated(3,hashmeta,folder)print,resultend