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会自动将文件加入内存,影响后续运行效率)

具体的代码如下:(运行环境 ENVI5.3+IDL8.5)

COMPILE_OPT IDL2
  ;start the application
  e =ENVI()
  ;Initialize ENVI and send all errors
  ; andwarnings to the file batch.txt
  ENVI_BATCH_INIT, log_file='batch.txt'
  ;open all files to subset
  file= EXPAND_PATH('待裁剪的影像路径', /ALL_DIRS,/ARRAY)
  datapath = FILE_SEARCH(file,'*rpc*.dat',count = count_all)
  ;load mask of interest
  maskpath='裁剪区域的掩膜路径'
  respath='存储裁剪后的影像路径'
  fid=LONARR(2)
  pos=LONARR(2)
  dims=LONARR(5,2)
    ;loop over all files
  FOR i=0,count_all-1 DO BEGIN
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;step1.LAYER_STACKING;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   tmp=e.OpenRaster(datapath[i])
;   mask=e.OpenRaster(maskpath)
;   task=ENVITASK('RegridRaster')
;   task.INPUT_RASTER=tmp
;   task.GRID_DEFINITION=
  ; Use the spatial reference of the mask scene to
  ; create a common grid definition for other scenes
  basename=FILE_BASENAME(datapath[i])
  basename=STRMID(basename,0,STRLEN(basename)-4)
  resname=respath+basename+'_sub'
  ;whether the current file has been processed?
  IF file_test(resname) EQ 1 then begin
    continue
  ENDIF
  ;process files
  ENVI_OPEN_FILE, datapath[i],r_fid=data_fid
  envi_file_query, data_fid, dims=data_dims
  ENVI_OPEN_FILE, maskpath,r_fid=mask_fid
  envi_file_query, mask_fid, dims=mask_dims
  mask_proj = ENVI_GET_PROJECTION(FID=mask_fid, PIXEL_SIZE=mask_ps)
  dims[0,0]=data_dims
  dims[0,1]=mask_dims
  ENVI_DOIT, 'envi_layer_stacking_doit', dims=dims,/EXCLUSIVE, $
    fid=[data_fid,mask_fid],out_dt=12,/IN_MEMORY,$
    out_proj=mask_proj,pos=[0,0],r_fid=lay_fid,out_ps=mask_ps
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;step2.band math;;;;;;;;;;;;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  ENVI_FILE_QUERY, lay_fid,dims=lay_dims
  ENVI_DOIT, 'Math_Doit',fid=[lay_fid,lay_fid],dims=lay_dims,pos=[0,1],$
  exp='b1*b2',out_name=resname
  ENVI_FILE_MNG , ID=lay_fid, /REMOVE
  ;release files in memory:释放了硬盘上的文件,但是没有释放in memory
  fids = envi_get_file_ids()
  size = SIZE(fids)  ;dimensions,respective length,data type, num_of_elements total
  length = size[1]
  FOR i = 0L, length-1 DO BEGIN
    ENVI_FILE_MNG,id = fids[i],/remove
  ENDFOR
  ENDFOR
end

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

  1. ENVI/IDL编程:批量使用伪不变目标法进行相对辐射校正

    原理:参考博客http://blog.sina.com.cn/s/blog_764b1e9d0100pwby.html 可直接利用的工具:http://blog.sina.com.cn/s/blog_ ...

  2. IDL(ENVI/IDL) 简(jian)明(lou)教程:二、ENVI/IDL批处理入门(以投影转换为例)

    二.ENVI/IDL批处理入门 ENVI/IDL集成了ENVI软件的高级功能,比如打开文件直接使用envi_open_file, File ,r_fid=fid即可,不用考虑什么格式等,再比如做文件投 ...

  3. 2014年ENVI/IDL遥感应用与开发培训班-11月重庆站 開始报名了

    主办单位: 中国遥感应用协会 Esri中国信息技术有限公司 内容简单介绍: 依据中国遥感应用协会栾恩杰理事长推动国内遥感技术和应用的指示精神,2014年中国遥感应用协会组织培训交流部与Esri中国信息 ...

  4. ENVI+IDL使用

    在面对大批量遥感影像数据重复操作的时候,我们会想到批处理的方式.尽管遥感软件提供了一些批处理的方式,就小部分需求而言,单一的批处理方式往往是不够的,这时候程序化处理就派上用场了. (当然,也可以使用建 ...

  5. 软件介绍|ENVI/IDL软件及二次开发介绍

    ENVI是美国Exelis Visual Information Solutions公司的旗舰产品,它是由遥感领域的科学家采用交互式数据语言IDL(Interactive Data Language) ...

  6. 【ArcGIS风暴】ArcGIS影像批量裁剪(分幅)方法总结

    实际工作中经常需要采用规则格网或标准分幅格网去对影像进行分幅.ArcGIS提供了强大的影像批量裁剪(分幅)的功能,常规的方法是利用掩膜提取工具手工重复裁剪,费时又费力,裁到让GISers怀疑人生... ...

  7. mfc让图片与按钮一起_对许多张图片进行批量裁剪,看看我是如何快速做到的

    概要:当我们需要对很多图片进行批量裁剪时,以往的办法是自己一张一张图片去操作,非常麻烦.有没有这样一个工具,能够帮我们批量进行处理呢?之前小编在网上找了非常多的软件,一个一个地安装试用,都不符合我想要 ...

  8. python arcgis批量绘图_ARCGIS中Python实现批量裁剪

    <ARCGIS中Python实现批量裁剪>由会员分享,可在线阅读,更多相关<ARCGIS中Python实现批量裁剪(1页珍藏版)>请在人人文库网上搜索. 1.程序代码:pyth ...

  9. qt 批量裁剪图片_照片变素描,不用下载App,好用的在线图片处理及图库

    我们要处理图片时,无论是在电脑还是手机上,往往都需要下载软件,但如果你只是临时用一下的话,下载软件难免显得工程有点浩大.下面就推荐几个图片处理网站,打开网页就能用. 1.图片处理 funny.pho. ...

最新文章

  1. 三角测量计算三维坐标的代码_浅谈三维扫描仪的由来
  2. Applet相关知识
  3. 指针空间的申请与释放
  4. GIT_忽略文件和属性文件配置
  5. MySQL 之全文索引
  6. 1042 字符统计 (20分)——16行代码满分
  7. 谷歌 MapReduce 初探
  8. wpf notifyIcon
  9. CCF 2014-3-1 相反数
  10. linux安装wineQQ
  11. TideSec远控免杀学习四(BackDoor-Factory+Avet+TheFatRat)
  12. 莫队算法 --算法竞赛专题解析(26)
  13. leetcode 717. 1比特与2比特字符(python)
  14. LVGL8制作简易时钟
  15. 520|测一测你和ta的夫妻相
  16. 【学术写作】优雅地翻译英文论文【保持格式】【无须排版】
  17. surface pro 6 黑苹果_surface pro 6 黑苹果
  18. 什么是jquery?简单的jquery代码
  19. switch 语句的参数类型
  20. 【FPGA——工具篇】:Xilinx_ISE_12.4安装包下载百度云网盘

热门文章

  1. 新玺配资:央行降准 房地产板块春天来了
  2. jupyter快捷键使用
  3. Unity项目优化详解(持续补充ing)
  4. BUCK电源输出过冲怎么解决
  5. 统计学习方法- 统计学习方法概论
  6. STM32F1----EXTI
  7. 【C练习之“猴子吃香蕉”】
  8. 213维恩图和集合图(VennUpset)
  9. 中间系统到中间系统IS-IS,基本原理与配置详解
  10. 服务器安装 Centos7 时引导错误以及解决方案(报错:no such device)