IDL开发专题IDL运算符与ENVI波段运算举例.docx

上传人:b****5 文档编号:26440862 上传时间:2023-06-19 格式:DOCX 页数:7 大小:17.13KB
下载 相关 举报
IDL开发专题IDL运算符与ENVI波段运算举例.docx_第1页
第1页 / 共7页
IDL开发专题IDL运算符与ENVI波段运算举例.docx_第2页
第2页 / 共7页
IDL开发专题IDL运算符与ENVI波段运算举例.docx_第3页
第3页 / 共7页
IDL开发专题IDL运算符与ENVI波段运算举例.docx_第4页
第4页 / 共7页
IDL开发专题IDL运算符与ENVI波段运算举例.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

IDL开发专题IDL运算符与ENVI波段运算举例.docx

《IDL开发专题IDL运算符与ENVI波段运算举例.docx》由会员分享,可在线阅读,更多相关《IDL开发专题IDL运算符与ENVI波段运算举例.docx(7页珍藏版)》请在冰豆网上搜索。

IDL开发专题IDL运算符与ENVI波段运算举例.docx

IDL开发专题IDL运算符与ENVI波段运算举例

运算符是各个语言中必不可少的部分,IDL作为一种基于矩阵运算的语言,实际应用实际应用中运算符操作有很多的技巧。

很多的时候一个语句能实现复杂的功能,这点在波段运算中能够体现出来。

1运算符

  IDL中的数学运算符有加(+)、增运算(++)、减(-)、减运算(--)、乘(*)、除(/)、幂(^)、取余(mod)、取小(<)和取大(>)。

增运算和减运算(++、--)

  这两个运算跟C里面的是一样的;

  IDL>var=20

  IDL>print,var++

  20

  IDL>print,var

  21

  IDL>var=indgen

(2)

  IDL>print,var++

  0  1

  IDL>print,var

  12

幂运算(^)

  IDL>var=2

  IDL>print,var^4

  16

  IDL>print,var^5

  32

  IDL>var=[2,3]

  IDL>print,var^2

  49

取余运算(mod)

  IDL>var=32

  IDL>print,varmod4

  0

  IDL>print,varmod5

  2

  IDL>var=[2,3]

  IDL>print,varmod2

  01

取大和取小运算(> 、<)

  IDL>var=32

  IDL>print,var>39

  39

  IDL>print,var<39

  32

  IDL>var=[20,30]

  IDL>print,var>25

  2530

  IDL中逻辑运算有几个:

&&, ||, 和 ~。

1.2.1&&

  逻辑的与运算,如果表达式为真或非零则返回1否则返回0。

  IDL>PRINT,5&&2 

  1

  IDL>PRINT,5&&0 

  0

  IDL>PRINT,"sd"&&"d" 

  1

  IDL>PRINT,"sd"&&"" 

  1

  IDL>PRINT,"sd"&&"" 

  0

1.2.2|| 逻辑的或运算

  IDL>PRINT,5||2 

  1

  IDL>PRINT,5||0 

  1

  IDL>PRINT,0||0 

  0

  IDL>IF((5GT3)||(4GT5)) 

  THENPRINT,'True' 

  True

1.2.3~逻辑的非运算

  IDL>print,~3

  0

  IDL>print,~0

  1

  IDL中有四个位运算符:

AND, NOT, OR,and XOR.。

位加运算符(AND)

  IDL>print,5AND6

  4

  0110 ← 5

  0111 ← 6

  ————————

  0110 ← 4

位取反运算符(NOT)

  IDL>print,not1

  -2

位或运算符(OR)

  IDL>print,5or10

  15

  0101 ← 5

  1010 ← 10

  ————————

  1111 ← 15

位与或运算符(XOR)

  IDL>print,3XOR5

  6

  0011 ← 3

  0110 ← 5

  ————————

  0110 ← 6

  IDL中的关系运算符包括EQ、NE、GE、GT、LE、LT几个,关系运算符返回的是真“True”或假“False”。

(Equalto)

  等运算符,如果运算符两边相同则返回真,否则返回假;

  

  1

  IDL>var=[2,3]

  IDL>print,vareq2

  10

(NotEqualto)

  不等运算符,如果运算符两边不等则返回真,否则返回假;

  

  0

  IDL>print,2NE1

  1

  IDL>var=[2,3]

  IDL>print,varne2

  01

 GE(Greaterthanorequalto)

  大于等于运算符,如果运算符两边左边大于等于右边则返回真,否则返回假;

  IDL>print,2GE1

  1

  IDL>var=[2,3]

  IDL>print,varge2

  11

 GT(Greaterthan)

  大于运算符,如果运算符两边左边大于右边则返回真,否则返回假;

  IDL>print,2GT1

  1

  IDL>var=[2,3]

  IDL>print,vargt2

  01

(Lessthanorequalto)

  小于等于运算符,如果运算符两边左边小于等于右边则返回真,否则返回假;

  IDL>print,2LE1

  0

  IDL>print,2LE12

  1

  IDL>var=[2,3]

  IDL>print,varle3

  11 

 LT(Lessthan)

  小于运算符,如果运算符两边左边大于右边则返回真,否则返回假;

  IDL>print,2LT1

  0

  IDL>print,2LT12

  1

  IDL>print,2LT2

  0

  IDL>var=[2,3]

  IDL>print,varlt3

  10 

1.4.6数组间运算

  IDL>a=[2,3,5]

  IDL>b=[1,4,5]

  IDL>print,aGEb

  1  01

  IDL>b=[1,4,5,6]

  IDL>print,aGEb

  101

  IDL>print,aLEb

  011

1.5.1#数组乘(列乘行)

  IDL>PRINT,array1

  121

  2-12

  IDL>PRINT,array2

  13 

  01

  11

  IDL>PRINT,array1#array2

  7  -1  7

  2  -1  2

  3  1  

1.5.2##矩阵乘(行乘列)

  IDL>PRINT,array1

  12  1

  2-12

  IDL>PRINT,array2

  13 

  0  1

  11

  IDL>PRINT,array1##array2

  26

  47

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] 

  0135

  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,(AGTB)?

A:

  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

 数据值小于0的赋予-999

  (b1LT0)*-999+(b1GE0)*b1

 三个波段求平均值,如该波段小于0则不参加运算。

如某点b1:

4;b2:

6;b3:

0;那平均值ave=(b1+b2+b3)/(1+1);

(  b1>0+b2>0+b3>0)/(((b1ge0)+(b2ge0)+(b3ge0))>1)

两幅图像,图像1波段b1中的云部分(象元值大于200)用图像2的波段b2代替

  (b1GT200)*b2+(b1LE200)*b1

波段分段赋值,如B1中小于0部分等于0,b1中值在[0,10]之间赋为原数值的100倍,如果b1值大于10则赋为原数值的10倍。

   (b1LE0)*b1>0+((b1ge0)and(b1le10))*b1*100+(b1gt10)*b1*10

波段运算为图像的选择性更改和来自多幅图像的数据结合提供了简单的方法。

在下面的示例中,把两幅图像结合起来进行处理,从而从图像中消除云的影响。

在图像b1中,像元值大于200的像元被认为是云,希望用图像b2中的相应像元对它们进行替换。

(b1gt200)*b2+(b1le200)*b1

用类似的运算表达式,可以将一幅图像的黑色背景变成白色背景:

(b1eq0)*255+(b1gt0)*b1

下面的示例是一个较为复杂的表达式。

该表达式使用几个标准来生成一幅二进制掩膜图像,用于识别主要为云的像元。

该算法可以应用于经过定标的AVHRR日间图像中生成云的掩膜图像。

在该表达式中,b4(热红外波段)值必须为负,或b2(反射波段)值必须大于并且b3和b4(中红外和热红外波段)的差值必须大于15度。

由于关系运算符为真值(关系成立)返回1值,因此生成的掩膜图像在有云处值为1,在其他区域值为0。

(b4lt0)or()AND(b3–b4)gt15

2.8会做最大/最小合成,最大或者最小合成值通常是指从几个图像中取最大或者最小像元值重新生成一副新的图像,比如几个时相的温度、植被指数或者植被覆盖度的合成。

如下为合成9个波段的最大合成值:

b1>b2>b3>b4>b5>b6>b7>b8>b9

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1