IDL中的运算符与ENVI波段运算举例
(2013-08-01 21:18:25)IDL中的运算符与ENVI波段运算举例
运算符是各个语言中必不可少的部分,IDL作为一种基于矩阵运算的语言,实际应用实际应用中运算符操作有很多的技巧。很多的时候一个语句能实现复杂的功能,这点在波段运算中能够体现出来。
1运算符
1.1数学运算符
1.1.1增运算和减运算(++、- -)
1.1.2幂运算(^)
1.1.3取余运算(mod)
1.1.4取大和取小运算(> 、<</font>)
1.2逻辑运算符
1.2.1&&
1.2.2|| 逻辑的或运算
1.2.3~逻辑的非运算
1.3位运算符
1.3.1位加运算符(AND)
1.3.2位取反运算符(NOT)
1.3.3位或运算符(OR)
1.3.4位与或运算符(XOR)
- 1.4关系运算符
IDL中的关系运算符包括EQ、NE、GE、GT、LE、LT几个,关系运算符返回的是真“True”或假“False”。
1.4.1EQ(Equal to)
等运算符,如果运算符两边相同则返回真,否则返回假;
IDL> print,2 EQ 2.0
1
IDL> var = [2,3]
IDL> print,var eq 2
1 0
1.4.2NE(Not Equal to)
不等运算符,如果运算符两边不等则返回真,否则返回假;
IDL> print,2 NE 2.0
0
IDL> print,2 NE 1
1
IDL> var = [2,3]
IDL> print,var ne 2
0 1
1.4.3 GE(Greater than or equal to)
大于等于运算符,如果运算符两边左边大于等于右边则返回真,否则返回假;
IDL> print,2 GE 1
1
IDL> var = [2,3]
IDL> print,var ge 2
1 1
1.4.4 GT(Greater than)
大于运算符,如果运算符两边左边大于右边则返回真,否则返回假;
IDL> print,2 GT 1
1
IDL> var = [2,3]
IDL> print,var gt 2
0 1
1.4.5LE(Less than or equal to)
小于等于运算符,如果运算符两边左边小于等于右边则返回真,否则返回假;
IDL> print,2 LE 1
0
IDL> print,2 LE 12
1
IDL> var = [2,3]
IDL> print,var le 3
1 1
1.4.6 LT(Less than)
小于运算符,如果运算符两边左边大于右边则返回真,否则返回假;
IDL> print,2 LT 1
0
IDL> print,2 LT 12
1
IDL> print,2 LT 2
0
IDL> var = [2,3]
IDL> print,var lt 3
1 0
1.4.6 数组间运算
IDL> a =[2,3,5]
IDL> b = [1,4,5]
IDL> print,a GE b
10 1
IDL> b = [1,4,5,6]
IDL> print,a GE b
1 0 1
IDL> print,a LE b
0 1 1
1.5数组运算符
1.5.1#数组乘(列乘行)
IDL> PRINT, array1
1 2 1
2 -1 2
IDL> PRINT, array2
1 3
0 1
1 1
IDL> PRINT, array1#array2
7-1 7
2-1 2
31
1.5.2##矩阵乘(行乘列)
IDL> PRINT, array1
1 21
2 -1 2
IDL> PRINT, array2
1 3
01
1 1
IDL> PRINT, array1##array2
2 6
4 7
1.6其他运算符
1.6.1小括号()
表达式组合和控制一系列表达式的优先级;
IDL> PRINT, 3 + 4 * 2 ^ 2 /2
11
IDL> PRINT, (3 + (4 * 2) ^ 2 / 2)
35
1.6.2中括号[]
数组的连接或元素调用;
IDL> C = [0, 1, 3]
IDL> PRINT, [C, 5]
0 1 3 5
IDL> PRINT, C[2]
3
1.6.3条件表达式?:
该运算符的用法是:value = expr1 ? expr2 : expr3
expr1是true,那么 value 等于expr2否则value = expr3.如果
IDL> A=6 & B=4
IDL> print,(A GT B) ? A : B
6
1.6.4对象方法调用符->
oWindow->Draw
1.6.5指针引用符*
*,调用格式为*指针变量。指针调用符为
IDL> point1 = ptr_New(34)
IDL> print,*point1
34
2运算符波段运算举例
2.1 数据小于0的赋予0 b1>0
2.2 数据值小于0的赋予-999
(b1 LT 0)*-999+(b1 GE 0)*b1
2.3 三个波段求平均值,如该波段小于0则不参加运算。如某点b1:4;b2:6;b3:0;那平均值ave = (b1+b2+b3)/(1+1);
b1>0+b2>0+b3>0)/( ((b1 ge 0) + (b2 ge 0)+(b3 ge 0)) >1)
2.4两幅图像,图像1波段b1中的云部分(象元值大于200)用图像2的波段b2代替
(b1 GT 200)*b2+(b1 LE 200)*b1
2.5波段分段赋值,如B1中小于0部分等于0,b1中值在[0,10]之间赋为原数值的100倍,如果b1值大于10则赋为原数值的10倍。 (b1 LE 0)*b1>0 +((b1 ge 0)and (b1 le 10))*b1*100+ (b1 gt 10)*b1*10
前一篇:性格测试

加载中…