最近研究遥感,用到分类算法,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());
至此,通过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 }
SupervisedClassificaitonDialog参数设置对话框
分类结果展示
有不对的地方请大家批评指正。
原文地址:https://www.cnblogs.com/LW-MA/p/10952872.html