IDL语言基础

因为影像处理过程的需要,还是需要学习一些IDL语言,以便在ENVI中对图像进行批量的操作。这里就不定期的更新一些心得和小段吧。

第一本书《遥感二次开发语言IDL》 徐永明编著,科学出版社,2014年6月第一版

2018.07.08

(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 条件

2018.07.13

补充字符串的操作

(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为长度


你可能感兴趣的:(遥感图像处理,IDL/ENVI)