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         }
View Code

2.4. 示例截图

 

图1:分类前数据

 

图2:距离分类结果(聚类调整)

 

图3:精度分析结果

注意示例中的分类数据是距离分类数据distanceClassify.img;

分类之后会出现斑点问题,可以采用聚类进行消除得到distanceClassify-Julei.tif数据。

 
posted @ 2019-06-27 16:54  PIESAT  阅读(1106)  评论(0编辑  收藏  举报