因为影像处理过程的需要,还是需要学习一些IDL语言,以便在ENVI中对图像进行批量的操作。这里就不定期的更新一些心得和小段吧。
第一本书《遥感二次开发语言IDL》 徐永明编著,科学出版社,2014年6月第一版
(1)IDL语言不区分大小写
(2)IDL中分号“;”表示注释
(3)“$”表示续行符
(4)一行可以写多条IDL语句,使用“&”连接
(5)IDL行文风格类似pascal
(6)数据类型与c类似,变量使用与MATLAB类似,不需要事先声明,不需要指定类型,随时可以改变数据类型和维数,字符串操作类似C#
(7)IDL->help,variable,可以显示变量的名称、类型和值
(8)数组元素按照列优先顺序存储,下标从0开始
IDL> arr=make_array(rows,cols,/type)
IDL>arr=make_array(3,2,/byte,/index) ;创建索引数组,数组值为其下标值
IDL>print,arr
IDL>arr=intarr(6) ;创建int型零数组
IDL>arr=indgen(6) ;创建int型索引数组
CSDN的显示有问题,“>“被显示成“&”(9)数组操作函数
IDL>arr=findgen(3,4)
IDL>print,n_elements(arr);数组元素数量
IDL>print,size(arr);数组大小
;返回n+3个元素(n为数组维数),分别是
;1数组维数 2~n+1每一维的大小 n+2数据类型 n+3数组元素数目
IDL>print,max(arr),min(arr)
IDL>print,max(arr,dimension=1);求每一行的最大值
IDL>print,max(arr,dimension=2);求每一列的最大值
IDL>max_w=max(arr,index)
IDL>print,max_w,index;可以返回下标
IDL>mean\variance\stddev\total(arr);均值、方差、标准差、求和
IDL>reform\transpose\sort(arr);数组改变形状、转置、升序排序
(10)关系与逻辑运算符:EQ-等于,NE-不等于,GT(大于)LT(小于),GE(大于等于),LE(下雨等于)
&&与,||或,~非
(11)可以使用指针
IDL>p1=ptr_new(a);指向变量的指针
IDL>p2=ptr_new();未指向变量的指针
IDL>c=*p1;对指针的提取
IDL>ptr_free,p1,p2;指针的释放
IDL>ptr_valid(p);验证指针的有效性,有效为真
IDL>ptr_arr=ptrarr(2);指针数据
(12)过程和函数
;过程
pro pro_name,pro_para
语句
end
;函数
function func_name,func_para
语句
return,result
end
(13)控制语句
;if语句 if-endif else-endelse成对出现
if 条件 then 语句
if 条件
then begin
语句
endif
if 条件 then 语句1 else 语句2
if 条件then begin
语句
endif else begin
语句
endelse
;case 语句 , switch 语句结构相同
case 条件\变量\表达式 of
表达式1: 语句
表达式2: begin
语句
end
else : 语句
endcase
(14)循环语句
;for语句
for i=1,n(,buchang) do begin
语句
endfor
;while语句
while 条件 do begin
语句
endwhile
;repeat语句
repeat begin
语句
endrep until 条件
补充字符串的操作
(1)创建字符串,用单引号或者双引号括起来即可。字符串连接可使用“+”
①result=strjoin(string_arr[, delimiter])把字符串数组连接成一个字符串,delimiter为连接字符,形式如' ',' - '等
(2)字符串操作函数
IDL>result=strlen(string) ;字符串长度
IDL>result=strlowcase/strupcase(string) ;字符串大小写转换
IDL>result=strcompress(string[/remove_all]) ;压缩空格,如有remove_all则删去所有空格,没有则将连续的空格用一个空格代替
IDL>result=strcmp(str1,str2,[,n],[,/fold_case]);比较字符串是否相同,n为比较位数,加上/fold_case则无视大小写区别
result=strpos(expression,search_string);查找search_string在expression中的位置,如有返回起始位置,如无返回-1
result=strmid*string,pos,[,length]);截取子串,pos为起始位置,length为长度