多分类 深度学习 精度 分类精度分析
转载
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数据。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。