加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

envi二次开发中批处理的运算函数-envi_doit

(2011-06-09 20:03:08)
标签:

杂谈

分类: ENVI/IDL学习

在envi二次开发时,当文件的fid被读入以后,我们需要对其进行处理,那么该如何操作呢?

下面的例子是一个批处理的例子,

其实批处理和正常模式下没有什么区别,只是通过一系列特定的函数库来执行ENVI的功能

为了使用这些函数,必须首先将它们恢复到IDL内存中。

ENVI始终是一个IDL程序,如果用户使用运行ENVI的IDL时段,用户将能够访问所有ENVI程序和函数

这种状态通常称为混合批处理模式,因为用户能够使用ENVI特有的库函数而无需初始化批处理模式.这种状况既带来了便利,也带来了问题。举例来说,如果用户在IDL命令行下运行的程序产生了新的影像波段,能够通过ENVI_ENTER_DATA直接将这些数据输入到可用波段列表中。但如果IDL程序崩溃,那么当前的ENVI环境将会整个崩溃。在编写ENVI用户函数的时候混合批处理模式非常有用,因为它模拟了代码执行的最终环境。但是在真正运行批处理程序时,推荐用户开启一个单独的IDL时段,并进行批处理的初始化

在批处理模式下运行ENVI需要先恢复核心的save文件,而后,一个称为ENVI_BATCH_INIT的特定ENVI函数被调用,该函数开启批处理模式。该步处理称为初始化批处理。ENVI_BATCH_EXIT退出批处理的方式和通过ENVI主菜单上选择File-> Exit退出ENVI的效果一样。同样,使用该命令退出ENVI后,ENVI时段使用的License也被释放。

如果ENVI中已经有了您想要实现的功能,为什么不使用它呢?

当然为了获取envi的这些库函数,运行程序的IDL时段必须在批处理模式下(试验发现,也可以不用),但是最好使用

如果运行程序在envi时段,则不必要在批处理模式下(批处理最好不要在envi时段运行)

结论,envi的库函数在任何条件下都可以调用,但是在批处理模式下和非批处理模式下,调用的方式不一样

如果在批处理模式在,那么调用的时候需要采用envi_doit, 'envi_stats_doit'

在非处理模式下,调用的时候直接采用envi_stats_doit

当在idl时段时,系统不认envi_pickfile(),如果打算采用该函数获取文件的话,需要首先envi, /restore_base_save_files

但是有的时候也可以(不稳定)

pro example_envi_doit 

   cd,'d:\test
 
  ; First restore all the base save files. 
 
  envi, /restore_base_save_files 

  ;在批处理模式下运行ENVI需要先恢复核心的save文件

  ;如果不设置restore_base_save_files关键字,则会启动envi 
 
  ; Initialize ENVI and send all errors 
  ; and warnings to the file batch.txt 
 
  envi_batch_init, log_file='batch.txt' 
 
  ; Open the input file 
 
  envi_open_file, 'huaihe.img', r_fid=fid 
  if (fid eq -1) then begin 
    envi_batch_exit 
    return 
  endif 
 
  ; Get the dimensions and # bands 
  ; for the input file. 
 
  envi_file_query, fid, dims=dims, nb=nb 
 
  ; Set the pos to calculate 
  ; statistics for all spectral data in the file. 
 
  pos  = lindgen(nb) 
 
  ; Calculate the basic statistics and the 
  ; histogram for the input data file. Print 
  ; out the calculated information. 
 
  envi_doit, 'envi_stats_doit', fid=fid, pos=pos,  dims=dims, comp_flag=1, mean=mean 
 
  print, 'Mean' , mean 
 
  ; Exit ENVI 
 
  envi_batch_exit 
end 

 

在批处理模式下,envi提供的功能函数可以通过envi_doit函数来实现,该函数提供类似于用户函数的处理部分,但不需要用户交互

ENVI_DOIT, 'Routine_Name' [, /NO_CATCH] [, /NO_REALIZE]

'Routine_Name' 是envi中内部的处理函数,具体每个函数的定义和使用请参考ENVI Reference Guide.

如对文件信息进行统计的话,采用'envi_stats_doit'

envi_doit, 'envi_stats_doit', fid=fid, pos=pos, dims=dims, comp_flag=1, mean=mean 

对RGB影像进行2%线性拉伸'STRETCH_DOIT’

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有