• PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验


            最近研究遥感,用到分类算法,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结构体的设置。但是这个函数使用上有一点技巧(我一直卡在这个地方),如下:

    1 SupervisedClassification_Exchange_Info m_DataInfo = null;
    2             m_DataInfo = new SupervisedClassification_Exchange_Info(max_likelihood.GetParams());
    View Code

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

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

           完整代码如下:

     1 private void toolStripButton1_Click_1(object sender, EventArgs e)
     2         {
     3             SupervisedClassificaitonDialog max_likelihood = new SupervisedClassificaitonDialog();
     4             max_likelihood.Initialize(0, mapControlMain.FocusMap);
     5             
     6             if (max_likelihood.ShowDialog()!=1)
     7             {
     8                 max_likelihood.Dispose();
     9                 max_likelihood = null;
    10                 return;
    11             }
    12             SupervisedClassification_Exchange_Info m_DataInfo = null;
    13             m_DataInfo = new SupervisedClassification_Exchange_Info(max_likelihood.GetParams());
    14 
    15             ISystemAlgo maxlikelihoodAlgo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.MLClassificationAlgo");//最大似然法就将DistanceClassificationAlgo替换为MLClassificationAlgo
    16             maxlikelihoodAlgo.Name = "最大似然分类";
    17             if (max_likelihood == null) return;
    18             maxlikelihoodAlgo.Params = m_DataInfo;
    19             ISystemAlgoEvents systemEvents = maxlikelihoodAlgo as ISystemAlgoEvents;
    20             systemEvents.OnExecuteCompleted += systemEvents_OnExecuteCompleted;
    21             
    22 
    23             AlgoFactory.Instance().ExecuteAlgo(maxlikelihoodAlgo);
    24             max_likelihood.Dispose();
    25             max_likelihood = null;
    26         }
    View Code

    SupervisedClassificaitonDialog参数设置对话框

    分类结果展示

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

    2019.8.27更新(添加systemEvents_OnExecuteCompleted代码):

     1          /// <summary>
     2         /// 算法执行完成事件
     3         /// </summary>
     4         /// <param name="algo"></param>
     5         void systemEvents_OnExecuteCompleted(ISystemAlgo algo)
     6         {
     7             ISystemAlgoEvents systemEvents = algo as ISystemAlgoEvents;
     8             systemEvents.OnExecuteCompleted -= systemEvents_OnExecuteCompleted;
     9             ILayer layer = LayerFactory.CreateDefaultLayer(@"F:ackupSourceCodePIEPIEMapApplication1Pie_class.img");
    10             if (layer == null)
    11             {
    12                 System.Windows.Forms.MessageBox.Show("分类后图层为空");
    13                 return;
    14             }
    15             mapControlMain.ActiveView.FocusMap.AddLayer(layer);
    16             mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    17         }
    18         
    View Code
  • 相关阅读:
    《网络对抗技术》Exp6 MSF应用基础
    用Onenote写博客日志 
    C语言文法
    0909
    使用jQuery解决溢出文本省略
    几种流行的AJAX框架jQuery,Mootools,Dojo,Ext JS的对比
    jQuery实现动态加载大尺寸图片
    常用jQuery插件推荐
    使用不带单位的lineheight
    JavaScript懒加载技术 lazyload
  • 原文地址:https://www.cnblogs.com/LW-MA/p/10952872.html
Copyright © 2020-2023  润新知