1 更新日志

2022.10.18

更新1:新增 Random Sampling 参数,在样本像元数较多时,设置此参数为 Yes,可随机抽取部分样本用于训练从而缩短时间

更新2:样本像元数较多时,弹出如下提醒,选择“”,可随机抽取部分样本用于训练从而缩短时间

envi随机森林 envi随机森林分类视频_后缀

更新3:当某类别样本中像元个数为 0 时,将不参与模型训练

更新4:支持非ENVI标准格式数据,会自动另存为临时ENVI格式数据,并在处理结束后删除

 

2 工具说明

基于随机森林算法实现影像监督分类。源码来源于ENMAP-BOX v2.1.1并对其进行封装,方便在ENVI下使用。

ENMAP-BOX网站链接:http://www.enmap.org/enmapbox.html

 

3 工具引用

基于此工具进行科学研究,请引用:

van der Linden, S.; Rabe, A.; Held, M.; Jakimow, B.; Leitão, P.J.; Okujeni, A.; Schwieder, M.; Suess, S.; Hostert, P. The EnMAP-Box—A Toolbox and Application Programming Interface for EnMAP Data Processing. Remote Sens. 2015, 7, 11249-11266.

 

4 随机森林

作为新兴起的、高度灵活的一种机器学习算法,随机森林(Random Forest,RF)拥有广泛的应用前景。随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支—集成学习(Ensemble Learning)方法。从直观角度来解释,每棵决策树都是一个分类器,那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出。

随机森林是一种很灵活实用的方法,具有如下几个特点:

  • 在当前所有算法中,具有极好的准确率
  • 能够有效地运行在大数据集上
  • 能够处理具有高维特征的输入样本,而且不需要降维
  • 能够评估各个特征在分类问题上的重要性
  • 在生成过程中,能够获取到内部生成误差的一种无偏估计
  • 对于缺省值问题也能够获得很好得结果

实际上,随机森林的特点不只有这六点,它就相当于机器学习领域的Leatherman(多面手),你几乎可以把任何东西扔进去,它基本上都是可供使用的。在估计推断映射方面特别好用,以致都不需要像SVM那样做很多参数的调试。

具体的随机森林介绍可以参见随机森林主页:

https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#inter

以上内容摘自:

 

5 安装方法

方法1使用 ENVI App Store 进行 ENVI 扩展工具的安装与管理。

App Store 下载地址:envi.geoscene.cn/appstore

envi随机森林 envi随机森林分类视频_后缀_02

 

方法2手动下载 https://envi.geoscene.cn/appstore/ranftscnew

下载 zip 压缩包并解压,将得到的 extensions 和 custom_code 文件夹拷贝到如下 ENVI 安装路径,覆盖同名文件夹即可:

ENVI 5.3 - C:\Program Files\Exelis\ENVI53\

ENVI 5.4 及以上 - C:\Program Files\Harris\ENVI5x\

重启 ENVI 即可使用。

 

6 使用说明

本工具包提供3个工具,均位于Toolbox/Extensions/Random Forest/…,如下所示:

envi随机森林 envi随机森林分类视频_后缀_03

 

6.1 Train Random Forest Model

本工具提供模型训练图像分类功能(可选)。

1) 在Toolbox中,双击/Extensions/Random Forest/Train Random Forest Model,工具界面如下图所示。

envi随机森林 envi随机森林分类视频_后缀_04

2) 参数设置:

  • Input Raster:输入影像。选择图像时不能进行空间、光谱裁剪或掩膜(ENVI 5.5及以上版本已经禁止显示这些按钮,如下图所示)。

envi随机森林 envi随机森林分类视频_随机森林_05

  • Random Sampling:在样本像元数较多时,建议设置此参数为 Yes,可随机抽取部分样本用于训练从而缩短时间。
  • Input Training ROIs:输入训练样本,即ENVI感兴趣区域。对于ENVI 5.3版本,需预先在ENVI中打开ROI,再打开此工具。
  • Estimators:随机森林树的数量,值越大,构建耗时越长,反之用时越少。默认为100。
  • Criterion:Impurity function to determine the impurity。可选项为 Gini Index、Entropy。默认为 Gini Index。
  • Minimum Number of Samples:Minimum number of samples to stop splitting(……翻译不到位,请自行理解吧)
  • Minimum Impurity Decrease:Minimum impurity to stop splitting(……翻译不到位,请自行理解吧)
  • Output Model File:必选项。设置训练模型输出文件路径,文件后缀为rfc(会自行添加)。
  • Output Classification Raster:可选项。若设置分类图像输出路径,则在模型训练完毕后,自动将模型应用于输入图像,得到分类结果。

 

6.2 Random Forest Classify Raster

本工具提供随机森林图像分类功能,可以将上述工具训练的模型用于其他图像。

1) 在Toolbox中,双击/Extensions/Random Forest/Random Forest Classify Raster,工具界面如下图所示。

envi随机森林 envi随机森林分类视频_envi随机森林_06

2) 参数设置:

  • Input Raster:输入影像。选择图像时不能进行空间、光谱裁剪或掩膜(ENVI 5.5及以上版本已经禁止显示这些按钮)。
  • Input Trained Model File:输入训练好的随机森林模型文件(rfc后缀)。
  • Output Classification Raster:设置分类图像输出文件路径。

 

6.3 Random Forest Classify Raster Batch

本工具提供随机森林图像分类批处理功能,方便将同一模型用于多个图像。

1) 在Toolbox中,双击/Extensions/Random Forest/Random Forest Classify Raster Batch,工具界面如下图所示。

envi随机森林 envi随机森林分类视频_接口调用_07

2) 参数设置:

  • Input Rasters:输入多个待分类影像。
  • Input Trained Model File:输入训练好的随机森林模型文件(rfc后缀)。
  • Output Postfix:设置输出文件名后缀,默认为_rfc.dat。
  • Display Results:是否自动加载显示结果。默认为是。
  • Output Directory:输出目录。ENVI 5.5及以上版本会弹出选择目录的界面;而低版本将弹出选择文件的界面,此时随意定义输出文件名即可,程序将只使用所在目录作为输出目录。

 

7 接口调用

7.1 Train Random Forest Model

接口调用格式如下:

e = ENVI()
raster = e.OpenRaster(file)
rois = e.OpenROI(roifile)
Task = ENVITask('TrainRandomForestModelTask')
Task.INPUT_RASTER = raster
Task.INPUT_ROIS = rois
Task.NUMBER_OF_TREES = 100
Task.IMPURITY_FUNCTION = 'Gini Index'
Task.MIN_NUMBER_OF_SAMPLES = 1
Task.IMPURITY_THRESHOLD = 0
Task.OUTPUT_MODEL_URI = 'C:\temp\model.rfc'
Task.OUTPUT_RASTER_URI = 'C:\temp\class.dat'
Task.Execute
output_raster = Task.OUTPUT_RASTER

 

7.2 Random Forest Classify Raster

接口调用格式如下:

e = ENVI()
raster = e.OpenRaster(file)
Task = ENVITask('RandomForestClassifyRasterTask')
Task.INPUT_RASTER = raster
Task.MODEL_FILE = 'C:\temp\model.rfc'
Task.OUTPUT_RASTER_URI = 'C:\temp\class.dat'
Task.Execute
output_raster = Task.OUTPUT_RASTER

 

7.3 Random Forest Classify Raster Batch

接口调用格式如下:

其中,OUTPUT_RASTER_URI 参数较为特殊,可随便指定为一个不存在的文件路径即可,如下所示,将自动使用 C:\temp\ 作为输出路径。

e = ENVI()
raster1 = e.OpenRaster(file1)
raster2 = e.OpenRaster(file2)
Task = ENVITask('RandomForestClassifyRasterBatch')
Task.INPUT_RASTERS = [raster1, raster2]
Task.MODEL_FILE = 'C:\temp\model.rfc'
Task.OUTPUT_POSTFIX = '_classrfc.dat'
Task.DISPLAY_RESULTS = 0
Task.OUTPUT_RASTER_URI = 'C:\temp\uselessname'
Task.Execute
output_files = Task.OUTPUT_FILES