一、ENVI Band Math 常见运算符及其用法
运算符/函数 | 含义 | 示例 |
+ | 加法 | b1 + b2 |
- | 减法 | b3 - b4 |
* | 乘法 | b1 * 2.0 |
/ | 除法 | b2 / b1 |
^ | 幂运算 | b1 ^ 2 |
sqrt() | 平方根 | sqrt(b1) |
float() | 转浮点数 | float(b1) |
abs() | 绝对值 | abs(b1 - b2) |
max(a,b) | 取较大值 | max(b1, b2) |
min(a,b) | 取较小值 | min(b1, b2) |
gt(a,b) | 判断 a 是否大于 b(返回1或0) | gt(b1, b2) |
lt(a,b) | 判断 a 是否小于 b | lt(b1, b2) |
and, or | 逻辑与、或 | gt(b1, 0.2) and lt(b1, 0.8) |
equal(a,b) | 判断是否相等 | equal(b1, 1000) |
not | 逻辑非 | not equal(b1, 0) |
eq | 等于 ( = ) | b1 eq b2 |
ne | 不等于 ( ≠ ) | b1 ne b2 |
lt | 小于 ( < ) | b1 lt b2 |
le | 小于或等于 ( ≤ ) | b1 le b2 |
gt | 大于 ( > ) | b1 gt b2 |
ge | 大于或等于 ( ≥ ) | b1 ge b2 |
二、编写 Band Math 表达式的注意事项
1. 所有波段应通过 float()函数转成浮点数以避免整数除法。
2. 如果出现除法运算,要注意分母是否为零,可以加入小常数避免除以0。
float(b4 - b3) / (b4 + b3 + 0.0001)
3. 逻辑组合时建议用括号明确优先级,例如:
(gt(b4, 0.2) and lt(b4, 0.8)) or equal(b3, 100)
4. 形如:min(b5, 0.11)/0.11 的公式是错误的,因为min()函数仅支持两个数组(波段)输入,或两个数值输入,但不能混合数组和标量。正确的写法如下:
((b5 le 0.11) * b5 + (b5 gt 0.11) * 0.11) / 0.11
-
b5 le 0.11
:当 b5 小于等于 0.11 时为 1,否则为 0 (相当于 TRUE 或 FALSE 的判断,也可以理解为掩膜判断(0,1二值化)) -
(b5 le 0.11) * b5, 即满足(b5 le 0.11)时取b5
-
b5 gt 0.11
:大于 0.11 时取 1,否则取0 -
(b5 gt 0.11) * 0.11,即满足(b5 gt 0.11)时取0.11
如果需要了解如何在ENVI和ENVI Classic中使用Band Math,可以参考我的另一篇文章: