最近研究遥感,用到分类算法,PIE SDK正好提供了一些方法可供调用,他们的官方博客上也有相应的示例代码(可参考:https://www.cnblogs.com/PIESat/p/10725270.html)。但是,我在开发手册中发现了监督分类对话框类(SupervisedClassificaitonDialog),欣喜若狂!心想有这个类的话,不仅有直观的界面展示,而且也会省去很多开发过程。不幸的是,直接调用这个类显示参数设置对话框界面(如下图),设置好参数,点击OK,并没有出现我想要的分类结果。实际上是根本就没有执行分类算法。因此,我咨询了相关技术人员(在此表示感谢),终于试验成功,特此Mark一下。

监督分类对话框类界面

我们知道PIE SDK算法调用有三步:

第一步:设置ROI统计参数ROIStatistics_Exchange_Info并执行ROI统计算法得到ROI统计信息。

第二步:根据roi统计信息设置监督分类参数SupervisedClassification_Exchange_Info并执行距离分类算法。

第三步:结果显示。

在监督分类对话框类中,可以设置ROI。设置ROI后,就已经完成了ROI信息统计,不再需要执行ROI统计算法。至此,第一步已经完成。

在第二步中,需要设置监督分类参数SupervisedClassification_Exchange_Info。来看SupervisedClassificaitonDialog的Public成员函数(如下图)。

SupervisedClassificaitonDialog的Public成员函数

其中有GetParams()函数,第一想到的是它可以获得参数以完成第二步监督分类参数SupervisedClassification_Exchange_Info结构体的设置。但是这个函数使用上有一点技巧(我一直卡在这个地方),如下:

 SupervisedClassification_Exchange_Info m_DataInfo = null;
m_DataInfo = new SupervisedClassification_Exchange_Info(max_likelihood.GetParams());

至此,通过SupervisedClassificaitonDialog显示参数设置对话框界面,设置好参数后,即可完成第二步监督分类参数SupervisedClassification_Exchange_Info结构体的构造。

下面就开始执行算法获取想要的结果了!!!

完整代码如下:

 private void toolStripButton1_Click_1(object sender, EventArgs e)
{
SupervisedClassificaitonDialog max_likelihood = new SupervisedClassificaitonDialog();
max_likelihood.Initialize(, mapControlMain.FocusMap); if (max_likelihood.ShowDialog()!=)
{
max_likelihood.Dispose();
max_likelihood = null;
return;
}
SupervisedClassification_Exchange_Info m_DataInfo = null;
m_DataInfo = new SupervisedClassification_Exchange_Info(max_likelihood.GetParams()); ISystemAlgo maxlikelihoodAlgo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.MLClassificationAlgo");//最大似然法就将DistanceClassificationAlgo替换为MLClassificationAlgo
maxlikelihoodAlgo.Name = "最大似然分类";
if (max_likelihood == null) return;
maxlikelihoodAlgo.Params = m_DataInfo;
ISystemAlgoEvents systemEvents = maxlikelihoodAlgo as ISystemAlgoEvents;
systemEvents.OnExecuteCompleted += systemEvents_OnExecuteCompleted; AlgoFactory.Instance().ExecuteAlgo(maxlikelihoodAlgo);
max_likelihood.Dispose();
max_likelihood = null;
}

SupervisedClassificaitonDialog参数设置对话框

分类结果展示

有不对的地方请大家批评指正。

2019.8.27更新(添加systemEvents_OnExecuteCompleted代码):

          /// <summary>
/// 算法执行完成事件
/// </summary>
/// <param name="algo"></param>
void systemEvents_OnExecuteCompleted(ISystemAlgo algo)
{
ISystemAlgoEvents systemEvents = algo as ISystemAlgoEvents;
systemEvents.OnExecuteCompleted -= systemEvents_OnExecuteCompleted;
ILayer layer = LayerFactory.CreateDefaultLayer(@"F:\backup\SourceCode\PIE\PIEMapApplication1\Pie_class.img");
if (layer == null)
{
System.Windows.Forms.MessageBox.Show("分类后图层为空");
return;
}
mapControlMain.ActiveView.FocusMap.AddLayer(layer);
mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}

PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验的更多相关文章

  1. PIE SDK 距离分类和最大似然分类

       1.算法功能简介 监督分类,也叫训练场地法.训练分类法,是遥感图像分类的一种,用被确认类别的样本像元去识别其他未知类别像元的过程.监督分类算法有平行算法.平行六面体法.最小距离法.最大似然法.马 ...

  2. PIE SDK坐标系选择

    1. 功能简介 坐标系选择可以查看当前图层的坐标系信息和显示其他坐标系的信息,下面将基于PIE SDK介绍如何实现坐标系选择功能. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 加载图层并 ...

  3. PIE SDK图层属性

    1. 功能简介 通过查看图层属性可以对图层的基本信息(一般信息,来源,注释,字段信息等)有所了解 ,下面就基于PIE SDK,介绍查看图层属性功能的实现. 2. 功能实现说明 2.1. 实现思路及原理 ...

  4. PIE SDK矢量数据项查看

    1. 功能简介 矢量数据由大量要素信息构成,矢量数据项查看可以看到数据的属性表,下面就基于PIE SDK,介绍矢量数据项查看功能的实现. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 加载 ...

  5. PIE SDK符号选择器

    1. 功能简介 符号选择器可以根据不同的需求进行改变图层的符号形状以及颜色,下面基于PIE SDK介绍如何使用符号选择器. 2. 功能实现说明 2.1.  实现思路及原理说明 第一步 加载图层 第二步 ...

  6. PIE SDK 文章目录索引

    1.PIE SDK介绍 1.1.  PIE软件介绍 1.2.  PIE SDK介绍 1.3.  PIE支持项目介绍 1.4.  PIE.NET-SDK插件式二次开发介绍 1.5.  PIE.NET-S ...

  7. PIE SDK与OpenCV结合说明文档

    1.功能简介 OpenCV是基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 ...

  8. PIE SDK与GeoServer结合说明文档

    1.  GeoServer简介 GeoServer是OpenGIS Web服务器规范的J2EE实现的社区开源项目,利用GeoServer可以方便的发布地图数据,允许用户对特征数据进行更新.删除.插入操 ...

  9. PIE SDK Command&&Tool工具命令一览表

    PIE SDK Command&&Tool工具命令一览表 编号 模板 名称(中文) Command&Tool 程序集 备注 1 数据管理 加载栅格数据 PIE.Controls ...

随机推荐

  1. (四)Java 基础语法

    Java 基础语法 一个Java程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作.下面简要介绍下类.对象.方法和实例变量的概念. 对象:对象是类的一个实例,有状态和行为.例如,一 ...

  2. Codeforces Round #324 (Div. 2)D. Dima and Lisa 数学(素数)

                                                     D. Dima and Lisa Dima loves representing an odd num ...

  3. height not divisible by 2

    height not divisible by 2 h.264 - FFMPEG (libx264) "height not divisible by 2" - Stack Ove ...

  4. YTU 2899: D-险恶逃生 I

    2899: D-险恶逃生 I 时间限制: 1 Sec  内存限制: 128 MB 提交: 130  解决: 55 题目描述 Koha被邪恶的巫师困在一个m*n的矩阵当中,他被放在了矩阵的最左上角坐标( ...

  5. 偏差(bias)和方差(variance)及其与K折交叉验证的关系

    先上图: 泛化误差可表示为偏差.方差和噪声之和 偏差(bias):学习算法的期望预测与真实结果(train set)的偏离程度(平均预测值与真实值之差),刻画算法本身的拟合能力: 方差(varianc ...

  6. Java 泛型 一

    泛型在Java中有很重要的地位,网上很多文章罗列各种理论,不便于理解,本篇将立足于代码介绍.总结了关于泛型的知识. 先看下面的代码: List list = new ArrayList(); list ...

  7. RabbitMq安装成功后执行命令报错(Error: unable to connect to node 'rabbit@DESKTOP-LPKSION': nodedown)

    我们直接来看解决方案吧.首先打开服务,找到RabbitMq服务. 双击打开后选择登陆选项卡: 点选此账户,输入你计算机的登录名称.点击浏览: 在这里输入你的用户名,点检索: 这里的密码输入你电脑开机登 ...

  8. 基于Hexo且在GitHub上搭建博客

    title: 基于Hexo且在GitHub上搭建博客 Welcome to Fofade's Blog! 搭建初衷 大大小小,大学两年,玩了很多,也学了很多. 回首望之,曾经不知道的,现在是知道了,但 ...

  9. oracle-数据库泵EXPDP导出用户下所有

    1登录sys用户 2创建目录 create directory [dirname] as ‘[dirpath]’; dirname:取的名字 dirpath:dmp文件导出路径 示例:create d ...

  10. 基于.Net Core的API框架的搭建(3)

    5.加入缓存支持 我们希望为项目增加缓存支持,我们选择Redis做为缓存数据库. 首先,我们在Services目录增加一个缓存接口类ICacheService: using System; using ...