ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ENVI扩展工具:利用波段运算修改NaN方法总结

2022-05-13 17:01:59  阅读:420  来源: 互联网

标签:DN 运算 值为 NaN 修改 ENVI b1


NaN为Not a Number的缩写,在遥感图像中属于异常值。很多用户有修改NaN的需求,比如把0值修改为NaN,或把NaN修改为0值等。由于波段运算公式较为复杂,现归纳如下。

直接利用波段运算进行

  • 修改0值为NaN
    • float(b1)*b1/b1
  • 修改特定值(250)为NaN
    • b1*float(b1 ne 250)/(b1 ne 250)
  • 修改NaN为特定值(-999):
    • finite(b1, /nan)*(-999) or (~finite(b1, /nan))*b1
  • 修改NaN为0值(先按上面方法修改为-999或其他图像中不存在的值)
    • (b1 ne -999)*b1

利用扩展补丁进行调用

由于波段运算公式较为复杂,所以写成用户函数,编译为sav文件供ENVI调用。

建议使用ENVI App Store进行ENVI扩展工具的安装与管理。

App Store下载地址:envi.geoscene.cn/appstore

或者可以手动下载地址:https://envi.geoscene.cn/appstore/nanoperion

注:适用于ENVI4.8、5.0及以上版本,如果是其他版本,可以将源码自行编译为Sav文件。

下载后将sav文件拷贝到如下路径,重启ENVI即可。

  • ENVI 4.8
    • C:\Program Files\ITT\IDL\IDL80\products\envi48\save_add
  • ENVI Classic
    • C:\Program Files\Exelis\ENVI50\classic\save_add
  • ENVI 5.0
    • C:\Program Files\Exelis\ENVI50\custom_code

 

补丁中函数功能和调用格式说明如下表所示:

函数名

功能

波段运算调用公式

NaN2Zero

修改NaN为0值

NaN2Zero(b1)

Zero2NaN

修改0值为NaN

Zero2NaN(b1)

DN2NaN

修改指定值为NaN

DN2NaN(b1,DN)

NaN2DN

修改NaN为指定值

NaN2DN(b1,DN)

注:公式中的DN为用户自定义DN值,比如将值为250的像元修改为NaN,公式可写为:DN2NaN(b1, 250)

 

举例演示:

  • 打开图像,背景值为0;
  • 首先调用Zero2NaN函数,输入图像为原始文件,得到Disp #2中的结果,即0值转换为NaN;
  • 然后调用NaN2Zero函数,输入图像为上一步结果,得到Disp #3中的结果,即NaN转换为0值。

图:结果与原始数据对比

图:结果与原始数据对比

图:波段运算公式示例

附补丁源码:

;+

; :DESCRIPTION:

;     波段运算修改NaN用户函数

; :AUTHOR: duhj@esrichina.com.cn;

; :Date: 2013-8-5

;-

;修改NaN为0值

FUNCTION NaN2Zero, b1

  b1 = FINITE(b1, /nan)*(-9999) OR (~FINITE(b1, /nan))*b1

  b1 = (b1 NE -9999)*b1

  RETURN, (b1 EQ 0)*0 + (b1 NE 0)*b1

END

;修改0值为NaN

FUNCTION Zero2NaN, b1

  RETURN, FLOAT(b1)*b1/b1

END

;修改指定值为NaN

FUNCTION DN2NaN, b1, DN

  RETURN, b1*FLOAT(b1 NE DN)/(b1 NE DN)

END

;修改NaN为指定值

FUNCTION NaN2DN, b1, DN

  RETURN, FINITE(b1, /nan)*(DN) OR (~FINITE(b1, /nan))*b1

END

 

标签:DN,运算,值为,NaN,修改,ENVI,b1
来源: https://www.cnblogs.com/enviidl/p/16267337.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有