数据波段运算及ndvi计算

一、实验名称:

数据波段运算及ndvi计算

二、实验目的:

学习数据波段运算及ndvi计算

三、实验内容和要求:

(1)实验:练习3个波段相加

fix(b1)+b2+b3

检查一下结果,原始的图和后来的都选择457三个波段,加一下是否一致

(2)实验:直接计算ndvi和波段计算器计算ndvi

直接计算:在工具栏搜索ndvi

波段运算:NDVI:(float(b4)-b3)/(b4+b3)  红波段3,近红外4

(3)实验:通过函数计算ndvi

function myNDVI,b3,b4;

return,(float(b4)-b3)/(b4+b3)

end

打开envi:e=envi()

函数使用:

myndvi(b3,b4)

(4)实验:计算三个波谱的均值

(s1+s2+s3)/3

四、实验步骤:

实验一:数据波段运算

1.启动ENVI,选择菜单 File > Open,打开数据“can_tmr.img”;

2.启动 Band Math工具,路径为Toolbox/Band Ratio/Band Math ;

3.在 Band Math面板,在Enter an expression文本框中输入运算表达式:b1+ b2+b3,点击Add to List按钮,将表达式添加到PreviousBand Math Expression列表中;注:如果表达式存在语法错误,将不能被添加到列表中。

4.在 Band Math面板中,选中添加的“fix(b1)+b2+b3”,点击OK按钮,打开 Variables toBands Pairings 对话框(如图),为运算表达式中各个变量赋图像文件或者图像波段;

5.在Variables to Bands Pairings 对话框中,Variables used in expression 列表框中选择变量b1,单击Available Bands List 中的“TM Band 1(0.4850)”。然后用同样的方法为b2和b3指定为“TM Band 2”和“TM Band 3”;

6.单击 Choose按钮,选择文件名及路径保存结果,单击 OK按钮执行运算;

7.此时可以将输入和输出文件加载到视图中,然后点击工具栏中选择查询点查看。

实验二:直接计算ndvi和波段计算器计算ndvi

  1. 在工具栏搜索ndvi红波段3,近红外4。

 

2.波段运算:NDVI:(float(b4)-b3)/(b4+b3)。

实验三:通过函数计算ndvi

  1. 启动IDL新建文件,进行编译。

function myNDVI,b3,b4;

return,(float(b4)-b3)/(b4+b3)

end

打开envi:e=envi()

 

2.Enter打开ENVI,打开数据文件,打开Band Math 调用函数myndvi(b3,b4) 

3.选择对应波段和输出路径 

实验四:计算三个波谱的均值

(s1+s2+s3)/3

  1. Display打开波谱库

 

2.选择波谱,打开Spectral Math输入(s1+s2+s3)/3 

 

3.选择对应波谱 

4.输出结果

五、注意事项:

    1.问题一:通过IDL打开ENVI后调用不出函数

解决方案:启动IDL新建文件,要进行编译否则调用不出函数。

  1. 问题二:计算三个波谱的均值要手动打(s1+s2+s3)/3不要复制粘贴否则打不开。
  2. 实习体会:必须符合IDL语言书写波段运算表达式;所有输入波段必须具有相同的空间大小;表达式中的所有变量都必须用Bn(或bn)命名,结果波段必须与输入波段的空间大小相同;

调用IDL编写的自定义函数时

-以函数Function开头

- ENVI只调用.SAV

- ENVI+IDL可以调用sav和pro

 感谢你的点赞和关注

### 在 ENVI 中将小于特定阈值的像素设为 NoData 为了实现这一目标,可以采用多种方法来处理遥感图像中的无效数据。一种常见的方式是在ENVI中利用其内置工具或者编写IDL脚本来完成此操作。 #### 使用 ENVI 的 Band Math 功能 通过Band Math功能可以直接定义表达式来创建新的波段,在这里可以通过逻辑运算符设定条件,使得满足条件(即低于给定阈值)的地方被赋予NoData标记。具体来说: ```idl ; 假设输入影像名为 input_image, 阈值为 threshold_value output_expression = 'input_image gt threshold_value ? input_image : !VALUES.NODATA' ``` 这段 IDL 代码表示如果 `input_image` 大于 `threshold_value` 则保留原值;否则赋值为 NoData[^1]。 #### 编写自定义 IDL 脚本 对于更复杂的场景可能需要编写完整的 IDL程序来进行批量处理或者其他高级定制化需求。下面是一个简单的例子展示如何读取影像并应用上述规则: ```idl pro set_nodata_below_threshold, infile, outfile, threshold_value ; 加载环境变量 envi,/restore_base ; 打开原始文件 fid = ENVIRasterOpen(infile) ; 获取基本信息 dims = FID.DIMENSIONS nbands = SIZE(dims)[0]-1 ; 创建输出文件 outfid = ENVICreateRaster(outfile,'BYTE',dims,nbands,FID.PROJECTION,FID.GEOLOCATION) FOR i=0,nbands-1 DO BEGIN band_data = READ_IMAGE(FID,i) ; 应用掩膜 mask = WHERE(band_data LT threshold_value, count) IF (count GT 0) THEN band_data[mask] = !VALUES.NODATA WRITE_IMAGE(outfid,band_data,i) ENDFOREACH CLOSEFID, fid CLOSEFID, outfid end ``` 以上两种方式都可以有效地将在ENVI软件中将低于某个预设阈值的所有像元转换成NoData状态,从而达到去除不需要的信息的目的[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Super毛毛穗

今天晚饭加什么?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值