最近研究遥感,用到分类算法,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. Windows 平台上长路径名文件的解决方法

    https://www.ibm.com/developerworks/cn/java/j-lo-longpath.html

  2. Poj 3233 矩阵快速幂,暑假训练专题中的某一道题目,矩阵快速幂的模板

    题目链接  请猛戳~ Description Given a n × n matrix A and a positive integer k, find the sum S = A + A2 + A3 ...

  3. openstack horizon 学习(2) navigation、dashboard、panels

    本章的主要内容是如何用horizon的navigation结构添加一个应用的面板. Horizon中提供了两种为应用添加panel的方法,一种是通过Pluggable Settings的方式,另一种是 ...

  4. ADT20 混淆编译

    注意:一定要 android代码混淆,整了两天怎么也弄不去来,百度翻遍了也都是怎么配置cfg文件,怎么混淆成功的喜悦,我就气死了,怎么都不成功.真是气死了,不过功夫不负有心人,终究还是弄出来了. 不能 ...

  5. 【前端】window.resize的优化

    一.概述 window.resize事件会在窗口尺寸改变的时候触发,哪怕只是改变了1像素.所以当窗口进行拖动的时候会触发很多次,很容易就卡死. 虽然部分浏览器已经进行了一点优化,但这还不够. 二.优化 ...

  6. POJ 3734 Blocks 矩阵递推

    POJ3734 比较简单的递推题目,只需要记录当前两种颜色均为偶数, 只有一种颜色为偶数 两种颜色都为奇数 三个数量即可,递推方程相信大家可以导出. 最后来个快速幂加速即可. #include< ...

  7. bzoj4619

    4619: [Wf2016]Swap Space Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 129  Solved: 54[Submit][Sta ...

  8. astgo经常死机变慢?试试mysql数据碎片整理吧

    使用SSH之类的工具或navicat链接数据库后(注意:是链接数据库后哦,不是直接SSH后就弄,这样提示命令错误的) 执行下面命令(目的是对ASTGO的数据库内除话单之外的所有表进行数据碎片整理,特别 ...

  9. Android 属性系统 Property service 设定分析 (转载)

    转自:http://blog.csdn.net/andyhuabing/article/details/7381879 Android 属性系统 Property service 设定分析 在Wind ...

  10. UnicodeEncodeError: ‘ascii’ codec can’t encode character u’\u8888′ in position 0: ordinal not in range(168)

    python保存文件UnicodeEncodeError以及reload(sys)后print失效问题 在将字符串写入文件时,执行f.write(str),后台总是报错:UnicodeEncodeEr ...