最近研究遥感,用到分类算法,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. 【Codevs 2115】数集分割

    http://codevs.cn/problem/2115/ // <2115.cpp> - Sun Oct 9 12:58:23 2016 // This file is made by ...

  2. window安装Elasticsearch

    下载,https://www.elastic.co/cn/downloads/elasticsearch 下载后解压,进入解压目录,运行./elasticsearch.bat 运行成功如下 (运行需要 ...

  3. js滚轮事件需要注意的兼容性问题

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. E20180109-E

    auxilary  adj. 辅助的; 备用的,补充的; 附加的; 副的;               n. 助动词; 辅助者,辅助人员; 附属机构,附属团体; 辅助设备; 

  5. A brief preview of the new features introduced by OpenGL 3.3 and 4.0

    A brief preview of the new features introduced by OpenGL 3.3 and 4.0   The Khronos Group continues t ...

  6. python实现对excel数据进行修改/添加

    import osimport xlrdfrom xlutils.copy import copydef base_dir(filename=None): return os.path.join(os ...

  7. c++ isdigit函数

    函数名:isdigit 函数所需头文件:#include<cstdio> 函数格式:isdigit(字符) 函数作用:判断括号内是否为1~9的数字. 例:isdigit(4) 就是true ...

  8. 【URL重写】IIS7配置URL重写

    URL Rewrite Module   此模块适用于IIS7.7.5.8. 微软在IIS7中添加了URL的重写模块,并且免费使用,可以导入.htaccess规则,但需要安装. 第一步:安装URL2. ...

  9. jquery中有关cookie的使用简要说明

    jquery.cookie.js 的配置 首先包含jQuery的库文件,在后面包含 jquery.cookie.js 的库文件. <script type="text/javascri ...

  10. Java多线程——线程之间的协作

    Java多线程——线程之间的协作 摘要:本文主要学习多线程之间是如何协作的,以及如何使用wait()方法与notify()/notifyAll()方法. 部分内容来自以下博客: https://www ...