zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    BZOJ 3132: 上帝造题的七分钟 树状数组+差分
    PAT Advanced 1006 Sign In and Sign Out (25 分)
    PAT Advanced 1011 World Cup Betting (20 分)
    PAT Basic 1032 挖掘机技术哪家强 (20 分)
    PAT Basic 1028 人口普查 (20 分)
    PAT Basic 1004 成绩排名 (20 分)
    大数据数据库HBase(二)——搭建与JavaAPI
    PAT Advanced 1009 Product of Polynomials (25 分)(vector删除元素用的是erase)
    PAT Advanced 1002 A+B for Polynomials (25 分)(隐藏条件,多项式的系数不能为0)
    PAT Basic 1041 考试座位号 (15 分)
  • 原文地址:https://www.cnblogs.com/LW-MA/p/10952872.html
Copyright © 2011-2022 走看看