最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

IDL批处理(转)

来源:动视网 责编:小OO 时间:2025-09-24 10:50:53
文档

IDL批处理(转)

IDL批处理(转)2010-10-2822:11:19|分类:个人日记|举报|字号订阅原文地址:如何应用IDL批处理图像大小———裁剪作者:mloyj;ThisFunctionwillReturntheStartpathFunctionSourcePathOn_Error,2Help,Calls=CallsUpperRoutine=(StrTok(Calls[1],'',/Extract))[0]Skip=0Catch,ErrorNumberIf(ErrorNumberne0)
推荐度:
导读IDL批处理(转)2010-10-2822:11:19|分类:个人日记|举报|字号订阅原文地址:如何应用IDL批处理图像大小———裁剪作者:mloyj;ThisFunctionwillReturntheStartpathFunctionSourcePathOn_Error,2Help,Calls=CallsUpperRoutine=(StrTok(Calls[1],'',/Extract))[0]Skip=0Catch,ErrorNumberIf(ErrorNumberne0)
IDL批处理(转)

2010-10-28 22:11:19| 分类: 个人日记 |举报|字号 订阅

原文地址:如何应用IDL批处理图像大小 ———裁剪作者:mloyj

;This Function will Return the Start path

Function SourcePath

On_Error, 2

Help, Calls = Calls

UpperRoutine = (StrTok(Calls[1], ' ', /Extract))[0]

Skip = 0

Catch, ErrorNumber

If (ErrorNumber ne 0) then Begin

Catch, /Cancel

Message, /Reset

ThisRoutine = Routine_Info(UpperRoutine, /Functions, /Source)

Skip = 1

EndIf

If (Skip eq 0) then Begin

ThisRoutine = Routine_Info(UpperRoutine, /Source)

If (ThisRoutine.Path eq '') then Begin

Message, '', /Traceback

EndIf

EndIf

Catch, /Cancel

If (StrPos(ThisRoutine.Path, Path_Sep()) eq -1) then Begin

CD, Current = Current

SourcePath = FilePath(ThisRoutine.Path, Root = Current)

EndIf Else Begin

SourcePath = ThisRoutine.Path

EndElse

Root = StrMid(SourcePath, 0, $

StrPos(SourcePath, Path_Sep(), /Reverse_Search) + 1)

Return, Root

End

pro resize ;文件名必须与程序名相同,否则无法编译

startpath = SourcePath()

cd,startpath

compile_opt idl2

envi,/restore_base_save_files

envi_batch_init, log_file='batch.txt'

;=====定义输入文件路径=====

inpath=startpath

;=====定义输出文件路径=====

outpath= startpath+"result"

;定义批处理文件名列表

filename = findfile('*.tif')

n = N_ELEMENTS(filename) ;n_elements函数返回数组中所有元素的数目

;==========批处理=====================

FOR i=0,n-1 DO BEGIN

in_name=inpath+filename

envi_open_file, in_name, r_fid=fid

if (fid eq -1) then begin

envi_batch_exit

return

endif

envi_file_query, fid, ns=ns, nl=nl, nb=nb

dims = [-1, 0, ns-1, 0, nl-1]

pos = lindgen(nb)

out_name = outpath+filename

envi_doit,'resize_doit',$

fid=fid, pos=pos, dims=[0, 0,170,0,170], $

interp=0, rfact=[1,1],out_name=out_name, r_fid=r_fid

ENDFOR

;=============================退出批处理模式=======================

envi_batch_exit

end

1、什么是批处理?

批处理(Batch)顾名思义,就是对某对象进行批量的处理。在学习Windows的时候,大家可能会遇到以.bat为扩展名的文件,这个文件里面包括了一系列的DOS命令。当运行这个bat文件的时候,这些dos命令会依次进行,不需要手工的一遍一遍的在命令窗口中输入,这就是批处理的好处。

在ENVI中,我们常常需要对一系列的命令重复使用,我们就可以把这些命令组合起来,保存为一个IDL的批处理文件,方便我们日后使用

2、IDL批处理文件

批处理文件是以.pro结尾的一种包括了一系列的IDL命令的文件。运行这类文件和用户在IDL命令行中敲入的命令完全一样。

例如,在IDL命令

行中绘制正弦曲线图的时候,可以通过下面的几个命

令来实现:

[plain] view plaincopyprint?

IDL>arr = findgen(200)

IDL>data = sin(arr/20)

IDL>window,2,xsize = 400,ysize = 300,title = 'Plot Sin'

IDL>plot,data

如果需要多次调用上述代码,可以采用批处理模式,讲下面的几行代码保存在一个批处理文件中(注意:批处理文件中无需PRO、END等关键字)

[plain] view plaincopyprint?

data = sin(arr/20)

window,2,xsize = 400,ysize = 300,title = 'Plot Sin'

plot,data

假设批处理文件在C:\emp目录下,名称为batch_plot.pro,我们就可以在命令行中通过下面的方法调用

[plain] view plaincopyprint?

IDL>cd,'C:\emp'

IDL>arr = findgen(400)

IDL>@batch_plot

3、ENVI批处理模式

以批处理模式运行ENVI能够让用户在命令模式下使用ENVI。这种能力在以下几种情况下非常有用:

(1)用户主要使用IDL工作但偶尔需要用到ENVI的函数;

(2)用户希望创建定制的应用程序其中混合了IDL代码和ENVI函数;

(3)用户希望进行大量的ENVI处理而无需人工干预。

批处理模式的ENVI和正常模式下没有什么区别,只是通过一系列特定的函数库来执行ENVI的功能。为了使用这些函数,必须首先将它们恢复到IDL内存中。因此为了正确获取ENVI库函数,有必要了解一下ENVI程序的结构:

ENVI 功能函数分散在大约50个小的IDL save文件中,这些二进制的文件包括数据和编译后的程序。这些save文件存放在ENVI安装路径下的Save目录下。ENVI核心save文件包括ENVI的基本功能函数,动态运行函数以及ENVI运行所需的内部变量。在典型的Windows PC上这些文件存放在:C:\

si\\idlxx\\products\\envixx\\save 目录下。

(1)ENVI批处理初始化:

ENVI批处理初始化一般包括如下步骤:

ENVI的主菜单条上设置File ->Preferences->Miscellaneous->Exit IDL on Exit from ENVI->No

compile_opt idl2 ;严格编译器要求

ENVI, /restore_base_save_files ;加载核心save文件

ENVI_batch_init ;初始化批处理

(2)离开ENVI批处理模式:

使用ENVI_BATCH_EXIT命令即可,ENVI_BATCH_EXIT退出批处理的方式和通过ENVI主菜单上选择File-> Exit退出ENVI的效果一样。同样,使用该命令退出ENVI后,ENVI时段使用的License也被释放。

4、混合批处理模式

ENVI始终是一个IDL程序,如果用户使用运行ENVI的IDL时段,用户将能够访问所有ENVI程序和函数,这种状态通常称为混合批处理模式。

优点:

用户能够使用ENVI特有的库函数而无需初始化批处理模式

模拟了代码执行的最终环境

缺点:

如果IDL程序崩溃,那么当前的ENVI环境将会整个崩溃

5、关于ENVI_Doit

在调用ENVI空间处理函数的时候有以下面的区别:(这个是重点哦

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

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

文档

IDL批处理(转)

IDL批处理(转)2010-10-2822:11:19|分类:个人日记|举报|字号订阅原文地址:如何应用IDL批处理图像大小———裁剪作者:mloyj;ThisFunctionwillReturntheStartpathFunctionSourcePathOn_Error,2Help,Calls=CallsUpperRoutine=(StrTok(Calls[1],'',/Extract))[0]Skip=0Catch,ErrorNumberIf(ErrorNumberne0)
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top