前言
IDL是我学习的第三个解释性语言,包括之前的Matlab,Python,相对于Matlab来说就是针对于遥感影像的处理,因为遥感影像相对于普通图片来说,最大的两个区别就是波段更多(通常大于等于四个),有空间参考,Matlab虽然在新版本也支持这些特性,但是不好操作,所谓“术业有专攻”,前两者相对于Python来说,差的多了,Python大法好,绝不是说说而已。
想用IDL处理影像,第一步肯定就是打开数据了,这也是我学习的主思路,但是我发现,要想打开数据,还是需要学习IDL的基本语法以及基本函数,所以说这成了我学习语言的一个坏习惯,一心只想快速上手,快速应用,结果忽略了细节,忽略的基本的东西,所以说,人生苦短,我用python 。
5.26号更新
file = dialog_pickfile(title = "Please choose ENVI file") dir = file_dirname(file) name = file.SPLIT('\\') name_1 = STRSPLIT(name[-1],".",/EXTRACT) hdrfile = dir+'\'+name_1[0]+'.hdr'
这样,这个代码就可以打开所有的ENVI标准文件了。
代码
主要实现功能就是打开ENVI的标准二进制文件,必须包含ENVI的hdr头文件,说一点,Matlab读取多光谱、高光谱数据也需要这种类似的头文件。
;作者:xxin ;时间:2017.3.7 ;功能:打开ENVI标准二进制文件 pro read_envifile file = 'F:\Program Files\Exelis\ENVI53\classic\data\can_tmr.img' file1 = STRSPLIT(file,".",/EXTRACT) hdrfile = file1[0]+".hdr" openr,lun,hdrfile,/GET_LUN tmp = "" while(~EOF(lun))do begin readf,lun,tmp if STRCMP(tmp, 'samples', 7 , /FOLD_CASE) eq 1 then sa = tmp if STRCMP(tmp, 'lines', 5 , /FOLD_CASE) eq 1 then li = tmp if STRCMP(tmp, 'bands', 5 , /FOLD_CASE) eq 1 then ba = tmp if STRCMP(tmp, 'data type', 8 , /FOLD_CASE) eq 1 then ty = tmp endwhile sa = fix(STRSPLIT(sa,"=",/EXTRACT)) ns = sa[1] li = fix(STRSPLIT(li,"=",/EXTRACT)) nl = li[1] ba = fix(STRSPLIT(ba,"=",/EXTRACT)) nb = ba[1] ty = fix(STRSPLIT(ty,"=",/EXTRACT)) typee = ty[1] data = MAKE_ARRAY(ns,nl,nb,type=typee) openr,lun,file,/GET_LUN readu,lun,data free_lun,lun rgb = data[*,*,[3,2,1]] i = image(bytscl(rgb),/order ) end
效果图:
后语
最近在学习opencv与IDL,不定期更新,话说好久没收到打赏了, 打赏直接扫描二维码,打赏名单请看:https://www.ixxin.cn/about.html