PIE SDK 精度分析(分类后处理)
1.算法功能简介
遥感图像分类精度分析通常把分类图与标准数据进行比较,然后用正确分类的百分比来表示分类的精度。
PIE SDK支持算法功能的执行,下面对精度分析算法功能进行介绍。
2.算法功能实现说明
2.1. 实现步骤
第一步 |
算法参数设置 |
第二步 |
算法执行 |
第三步 |
结果显示 |
2.2. 算法参数
算法名称 |
精度分析 |
|
C#算法DLL |
PIE.CommonAlgo.dll |
|
C#算法名称 |
PIE.CommonAlgo.ImgClassPostPAAlgo |
|
参数结构体 |
StImgClassPostPA |
|
参数说明 |
||
RealName |
String |
输入真实地面分类文件(*.tif;*.tiff; *.img) |
ClassName |
String |
输入分类数据文件(*.tif;*.tiff; *.img) |
RealIndex |
IList<Int> |
真实类别索引集合(正整数) |
ClassIndex |
IList<Int> |
分类类别索引集合(正整数) |
strRealInfo |
IList<String> |
真实地面信息 |
strClassInfo |
IList<String> |
分类数据信息 |
Fileinfo |
String |
精度结果 |
IsShp |
bool |
是否矢量 |
FuncName |
String |
功能名称 |
SelIndex |
Int |
选中索引 |
2.3. 示例代码
项目路径 |
百度云盘地址下/PIE示例程序/10.算法调用/图像处理/ PrecisionAnalysisDemo |
数据路径 |
百度云盘地址下/PIE示例数据/栅格数据/08.图像分类/ distanceClassify-Julei.tif |
视频路径 |
百度云盘地址下/PIE视频教程/10.算法调用/图像处理/精度分析.avi |
示例代码 |
|
1 /// <summary> 2 /// 分类后处理-精度分析 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void toolStripButton1_Click(object sender, EventArgs e) 7 { 8 //用分类后的结果distanceClassify-Julei.tif和真实的文件进行比对,得到精度分析结果 9 //参数设置 10 PIE.CommonAlgo.StImgClassPostPA info = new PIE.CommonAlgo.StImgClassPostPA(); 11 info.FuncName = "精度分析"; 12 info.ClassName = @"D:\data\图像分类2\distanceClassify-Julei.tif";//分类后数据文件 13 info.RealName = @"D:\data\图像分类2\roi-shp.shp";//地面真实文件(矢量或者是影像) 14 IList<int> listRealIndex = new List<int> { 1, 2, 3, 4 };//此处没有处理索引为0的未分类数据,若处理可以加上0; 15 IList<int> listClassIndex = new List<int> { 1,2,3,4 }; 16 info.RealIndex = listRealIndex;//真实地面索引集合 匹配的左侧索引 17 info.ClassIndex = listClassIndex;//分类类别索引集合 匹配的右侧索引 18 info.IsShp = true; //如果是roi文件 则为true 19 20 IList<string> listClassNameInfo = new List<string>(); 21 IList<string> listRealNameInfo = new List<string>(); 22 listRealNameInfo.Add("Unclassified"); 23 IFeatureDataset realFeatureDataset = DatasetFactory.OpenFeatureDataset(info.RealName); 24 if (realFeatureDataset == null) return; 25 IFeature feature = realFeatureDataset.GetNextFeature(); 26 while (feature != null) 27 { 28 string str = feature.GetValue(0).ToString();//默认选择索引为0的字段的值 29 int nSize = listRealNameInfo.Count; 30 if (nSize == 0) 31 { 32 listRealNameInfo.Add(str); 33 continue; 34 } 35 int isz = 0; 36 for (isz = 0; isz < nSize; isz++) 37 { 38 if (listRealNameInfo[isz] == str) break; 39 } 40 41 if (isz == nSize) 42 { 43 listRealNameInfo.Add(str); 44 } 45 feature = realFeatureDataset.GetNextFeature(); 46 } 47 48 //分类数据的类别 49 IRasterDataset rasterDataset = DatasetFactory.OpenRasterDataset(info.ClassName, OpenMode.ReadOnly); 50 listClassNameInfo = rasterDataset.GetRasterBand(0).GetCategoryNames();//获取分类信息 51 if (listClassNameInfo == null) 52 { 53 IColorTable colTable = rasterDataset.GetRasterBand(0).Table; 54 if (colTable != null) 55 { 56 int count = colTable.GetColorEntryCount(); 57 for (int i = 0; i < count; i++) 58 { 59 listClassNameInfo.Add("Class" + i); 60 } 61 } 62 } 63 info.strClassInfo = listClassNameInfo; //分类数据类别信息 64 info.strRealInfo = listRealNameInfo; //真实地面信息 65 info.SelIndex = 0; //选中的属性索引 ClassName 66 67 //2、创建算法对象 68 ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImgClassPostPAAlgo"); 69 if (algo == null) return; 70 algo.Params = info; 71 72 //3、执行算法 73 bool result = AlgoFactory.Instance().ExecuteAlgo(algo); 74 PIE.CommonAlgo.StImgClassPostPA info1 = algo.Params as PIE.CommonAlgo.StImgClassPostPA; 75 string str1 = info1.Fileinfo; 76 MessageBox.Show(str1,"精度分析结果:"); 77 } |
2.4. 示例截图
图1:分类前数据
图2:距离分类结果(聚类调整)
图3:精度分析结果
注意:示例中的分类数据是距离分类数据distanceClassify.img;
分类之后会出现斑点问题,可以采用聚类进行消除得到distanceClassify-Julei.tif数据。