1.算法功能简介
ISODATA(IterativeSelf-OrganizingDataAnalysisTechniqueAlgorithm)即迭代式自组织数据分析技术, 其大致原理是首先计算数据空间中均匀分布的类均值, 然后用最小距离规则将剩余的像元进行迭代聚合;每次迭代都重新计算均值,且 根据所得的新均值,对像元进行再分类;这一处理过程持续到每一类的像元数变化少于所选的像元变化阀值或者达到了迭代的最大次数。
ISODATA 算法通过设置初始参数而引入人机对话环节,并使用归并和分裂 等机制,当两类聚中心小于某个阀值时,将它们合并为一类。当某类的标准差大 于某一阀值时或其样本数目超过某一阀值时,将其分裂为两类,在某类样本数目 小于某一阀值时,将其取消。这样根据初始类聚中心和设定的类别数目等参数迭代,最终得到一个比较理想的分类结果。 ISODATA 算法是一种常用的聚类分析方法,是一种非监督学习方法。
PIE SDK支持算法功能的执行,下面对ISODATA分类算法功能进行介绍。
2.算法功能实现说明
2.1. 实现步骤
第一步 | 算法参数设置 |
第二步 | 算法执行 |
第三步 | 结果显示 |
2.2算法参数
算法名称 | ISODATA分类 | |
C#算法DLL | PIE.CommonAlgo.dll | |
C#算法名称 | PIE.CommonAlgo.ISODataClassificationAlgo | |
参数结构体 | ISODataClassification_Exchange_Info | |
参数说明 | ||
InputFilePath | String | 输入文件 (*.tif;*.tiff; *.img) |
OutputFilePath | String | 输出文件路径 (*.tif;*.tiff; *.img) |
ProspClassNum | Int | 预期类数(2~255的正整数,默认为8) |
InitClassNum | Int | 初始类数(2~255的正整数,默认为5) |
MinSam | Int | 最少像元数(大于0的正整数,默认为5) |
MaxMerge | Int | 最大合并对数(大于0的正整数,,默认为1) |
MaxLoop | Int | 最大迭代次数(大于0的正整数,默认为5) |
Dev | double | 最大标准差(正数,默认为9.8) |
MinDis | double | 最小中心距离(正数,默认为6.4) |
FuncName | String | 功能名称 |
FileTypeCode | String | 根据输出类型获得文件编码类型 .tif/.tiff——GTiff .img—————HFA 其他—————ENVI |
ListBands | IList<Int> | 输入影像的波段(至少选择一个波段,{ 0, 1, 2, 3 }) |
2.3. 示例代码
项目路径 | 百度云盘地址下/PIE示例程序/10.算法调用/图像处理/ ImageProcessing. ISODataClassificationAlgo |
数据路径 | 百度云盘地址下/PIE示例数据/栅格数据/01.GF1/GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tiff |
视频路径 | 百度云盘地址下/PIE视频教程/10.算法调用/图像处理/ISODATA分类算法.avi |
示例代码 | |
![]() ![]() 1 /// <summary> 2 ///ISODATA分类算法测试,本算法实现了将GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tiff进行ISODATA分类 3 ///预期类数为8,初始类数为5,最少像元数为5,最大合并对数为1,最大迭代次数为5,最大标准差为9.8,最小中心距离为6.4 4 /// </summary> 5 public override void OnClick() 6 { 7 #region 1、参数设置 8 PIE.CommonAlgo.ISODataClassification_Exchange_Info info = new PIE.CommonAlgo.ISODataClassification_Exchange_Info(); 9 10 info.InputFilePath = @"D:\Data\GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tiff"; 11 info.OutputFilePath = @"D:\Data\ip_result1.tif"; 12 info.ProspClassNum = 8; 13 info.InitClassNum = 5; 14 info.MinSam = 5; 15 info.MaxLoop=5; 16 info.MaxMerge = 1; 17 info.Dev = 9.8; 18 info.MinDis = 6.4; 19 info.LowBands = new List<int> { 0, 1, 2, 3 }; 20 21 info.FileTypeCode = "Gtiff"; 22 23 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ISODataClassificationAlgo"); 24 if (algo == null) return; 25 #endregion 26 27 //2、算法执行 28 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 29 algo.Name = "ISODATA分类"; 30 algo.Params = info; 31 bool result = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 32 33 //3、结果显示 34 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(@"D:\Data\ip_result1.tif"); 35 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 36 } |
2.4. 示例截图