ENVI/IDL 编程:批量裁剪同一地区的多幅影像

  1. 问题描述:通常的批量裁剪方法是使用相同的矢量文件或者roi区域,分别对每景影像裁剪。可采用subset via rois等等方法,但由于多幅影像间(在坐标系相同,分辨率相同的情况下),并非完美配准,因此,裁剪到的影像会存在一行或者一列的差异,使得后续计算无法进行。因此,可采用另一种思路:利用裁剪区域的掩膜图mask(栅格),对多幅影像进行波段合成layer stacking,然后再掩膜掉无效区域。
  2. 关键函数过程:envi_layer_stacking_doit(波段合成), Math_Doit (波段运算),ENVI_FILE_MNG(释放内存)
  3. 注意点:波段合成与波段运算的输入文件的fid:应当是多个,即使是处理同一文件的不同波段,不同点在于波段的位置不同(pos不同),具体查看IDL/ENVI文档帮助
  4. 未解决的问题:内存释放函数ENVI_FILE_MNG可以释放硬盘上的文件,但似乎无法释放位于内存的文件(files in memory),目前不知道如何解决。如有方法,愿分享,感激不尽。
  5. 代码如下:

pro zy3batchsubset
;20190213 使用矢量批量裁剪影像
;如果采用上面的方法,得到的影像可能相差一行或者一列,最好的方法是采用layer_stacking
;步骤:1.使用mask进行layer_stacking 2.使用mask进行掩膜处理  3.内存释放(ENVI会自动将文件加入内存,影响后续运行效率)

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用ENVI中的IDL脚本可以批量获取卫星影像的轮廓边界。具体步骤如下: 1. 打开ENVI软件,选择“File”菜单下的“New -> Procedure”打开ENVIIDL环境。 2. 在IDL环境中输入以下命令,导入ENVIIDL库: ``` ENVIRasterToVector, /QUIET ENVI_SELECT, /QUIET ``` 3. 定义一个字符串变量,用于存储待处理影像的文件路径: ``` dir = 'C:\image_folder\' ``` 其中,C:\image_folder\为待处理影像所在文件夹的路径。 4. 定义一个字符串数组,用于存储待处理影像的文件名: ``` files = ['image1.tif', 'image2.tif', 'image3.tif'] ``` 其中,image1.tif、image2.tif、image3.tif为待处理影像的文件名,可根据实际情况进行修改。 5. 使用循环语句,对待处理影像进行遍历,并获取其轮廓边界: ``` FOR i=0, N_ELEMENTS(files)-1 DO BEGIN ; 打开待处理影像 file = dir + files[i] raster = ENVIRaster(file) ; 将影像转为矢量数据 vector = ENVIRasterToVector(raster, /BOUNDARY, /POLYGON, /QUIET) ; 选择矢量数据 ENVIRasterSelect, vector ; 获取矢量数据的边界 ENVI_SELECT, /BOUNDARY ; 保存矢量数据的边界 SAVE_DIR = dir + 'boundary_' + files[i] ENVISaveSelectedFeatures, SAVE_DIR, /POLYGON, /QUIET ; 关闭矢量数据 ENVIClose, vector ENDFOR ``` 6. 执行以上脚本,即可批量获取待处理影像的轮廓边界,并将结果保存在与待处理影像同一文件夹下的文件中,文件名为“boundary_原文件名”。 需要注意的是,以上脚本仅适用于获取影像的轮廓边界,如果需要获取影像的实际范围边界,请参考之前的回答中的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值