ENVI中的Segmentation Image工具开发接口

在ENVI Classic中,存在两个同名的工具——Segmentation Image。分别位于如下两个菜单位置:

  • Basic Tools/Segmentation Image
  • Classification/Post Classification/Segmentation Image

虽然工具名称相同,但是有一些简单区别。比如说,前者是对单波段图像进行分割,可以输入最大最小阈值,而后者是专门用于分类图像,进行分类后处理。工具参数对话框对比如下:


图:左为前者,右为后者

在ENVI Classic帮助中提供了后者的接口描述,如下所示。明确描述是分类后处理功能。

 

那如果想要前者的开发接口怎么办?这里ENVI耍了个小心眼,其实接口是一样的,只是参数没有开放出来,我们把帮助修改下,就可以作为前者的接口使用说明了。

ENVI_SEGMENT_DOIT

ENVI_DOIT, 'ENVI_SEGMENT_DOIT', ALL_NEIGHBORS={0 | 1}, DIMS=arrayFID=file ID [, /IN_MEMORY] [, MIN_POPULATION=integer] [, OUT_BNAME=string array], OUT_NAME=string,  POS=array [, R_FID=variable] , MIN_THRESH=double, MAX_THRESH=double

区别就在于,不需要设置 CLASS_PTR 关键字了,只需要设置 MIN_THRESH、MAX_THRESH 关键字。

当只设置MIN_THRESH 时,MAX_THRESH 默认为数据最大值;

当只设置MAX_THRESH 时,MIN_THRESH 默认为数据最小值。

 下面是一个示例:

PRO EXAMPLE_ENVI_SEGMENT_DOIT

 

 COMPILE_OPT IDL2

 

 ENVI, /restore_base_save_files

 ENVI_BATCH_INIT

 

 file='C:\Program Files\Exelis\ENVI53\data\qb_boulder_msi'

 ENVI_OPEN_FILE, file, r_fid=fid

 

 ENVI_FILE_QUERY, fid, dims=dims

  pos = [0]

  out_name = 'testimg'

 min_population = 100

 

 ENVI_DOIT, 'envi_segment_doit', $

   fid=fid, pos=pos, dims=dims, $

   min_population=min_population, $

   /all_neighbors, out_name=out_name, $

   MIN_THRESH=20, Max_THRESH=200

END

 

posted @ 2022-09-05 13:49  ENVI-IDL技术殿堂  阅读(546)  评论(0编辑  收藏  举报