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:\backup\SourceCode\PIE\PIEMapApplication1\Pie_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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM