ENVI扩展工具:新版随机森林图像分类工具包
本文内容大多来自旧版工具介绍:https://www.cnblogs.com/enviidl/p/16393215.html
1 更新日志
2022.10.18
更新1:新增 Random Sampling 参数,在样本像元数较多时,设置此参数为 Yes,可随机抽取部分样本用于训练从而缩短时间
更新2:当样本像元数较多时,弹出如下提醒,选择“是”,可随机抽取部分样本用于训练从而缩短时间
更新3:当某类别样本中像元个数为 0 时,将不参与模型训练
更新4:支持非ENVI标准格式数据,会自动另存为临时ENVI格式数据,并在处理结束后删除
2 工具说明
基于随机森林算法实现影像监督分类。源码来源于ENMAP-BOX v2.1.1并对其进行封装,方便在ENVI下使用。
ENMAP-BOX网站链接:http://www.enmap.org/enmapbox.html
3 工具引用
基于此工具进行科学研究,请引用:
4 随机森林
作为新兴起的、高度灵活的一种机器学习算法,随机森林(Random Forest,RF)拥有广泛的应用前景。随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支—集成学习(Ensemble Learning)方法。从直观角度来解释,每棵决策树都是一个分类器,那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出。
随机森林是一种很灵活实用的方法,具有如下几个特点:
- 在当前所有算法中,具有极好的准确率
- 能够有效地运行在大数据集上
- 能够处理具有高维特征的输入样本,而且不需要降维
- 能够评估各个特征在分类问题上的重要性
- 在生成过程中,能够获取到内部生成误差的一种无偏估计
- 对于缺省值问题也能够获得很好得结果
实际上,随机森林的特点不只有这六点,它就相当于机器学习领域的Leatherman(多面手),你几乎可以把任何东西扔进去,它基本上都是可供使用的。在估计推断映射方面特别好用,以致都不需要像SVM那样做很多参数的调试。
具体的随机森林介绍可以参见随机森林主页:
https://www.stat.berkeley.edu/~breiman/RandomForests/cc_home.htm#inter
以上内容摘自:http://www.cnblogs.com/maybe2030/p/4585705.html
5 安装方法
方法1:使用 ENVI App Store 进行 ENVI 扩展工具的安装与管理。
App Store 下载地址:envi.geoscene.cn/appstore
方法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/…,如下所示:
6.1 Train Random Forest Model
本工具提供模型训练和图像分类功能(可选)。
1) 在Toolbox中,双击/Extensions/Random Forest/Train Random Forest Model,工具界面如下图所示。
2) 参数设置:
- Input Raster:输入影像。选择图像时不能进行空间、光谱裁剪或掩膜(ENVI 5.5及以上版本已经禁止显示这些按钮,如下图所示)。
- 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,工具界面如下图所示。
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,工具界面如下图所示。
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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?