K-Means 算法的基本思想是:以空間中 k 個點爲中心進行聚類,對最靠近他們的對象歸類。經過迭代的方法,逐次更新各聚類中心的值,直至獲得最好的聚類結果。算法
算法首先隨機從數據集中選取 K 個點做爲初始聚類中心,而後計算各個樣本到聚類中的距離,把樣本歸到離它最近的那個聚類中心所在的類。計算新造成的每個聚類的數據對象的平均值來獲得新的聚類中心,若是相鄰兩次的聚類中心沒有任何變化,說明樣本調整結束,聚類準則函數已經收斂。本算法的一個特色是在每次迭代中都要考察每一個樣本的分類是否正確。若不正確,就要調整,在所有樣本調整完後,再修改聚類中心,進入下一次迭代。若是在一次迭代算法中,全部的樣本被正確分類,則不會有調整,聚類中心也不會有任何變化,這標誌着已經收斂,所以算法結束。ide
PIE SDK支持算法功能的執行,下面對K-Means分類算法功能進行介紹。函數
第一步oop |
算法參數設置測試 |
第二步spa |
算法執行code |
第三步視頻 |
結果顯示對象 |
2.2. 算法參數blog
算法名稱 |
K-Means分類 |
|
C#算法DLL |
PIE.CommonAlgo.dll |
|
C#算法名稱 |
PIE.CommonAlgo.KmeansClassificationAlgo |
|
參數結構體 |
KmeansClassification_Exchange_Info |
|
參數說明 |
||
InputFilePath |
String |
輸入文件(*.tif;*.tiff; *.img) |
OutputFilePath |
String |
輸出文件路徑(*.tif;*.tiff; *.img) |
ClassNum |
Int |
分類數(2~255的正整數) |
MaxLoop |
Int |
最大迭代次數(大於0的正整數) |
Threshold |
double |
終止閾值(正數) |
FuncName |
String |
功能名稱 |
ListBands |
IList<Int> |
輸入影像的波段(至少選擇一個波段,{ 0, 1, 2, 3 }) |
項目路徑 |
百度雲盤地址下/PIE示例程序/10.算法調用/圖像處理/ImageProcessing. KmeansClassificationAlgo |
數據路徑 |
百度雲盤地址下/PIE示例數據/柵格數據/01.GF1/GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tiff |
視頻路徑 |
百度雲盤地址下/PIE視頻教程/10.算法調用/圖像處理/K-Means分類算法avi |
示例代碼 |
|
![]() 1 /// <summary> 2 /// K-Means分類算法測試,本算法實現了將GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tiff進行K-Means分類 3 ///預期類數爲5,最大迭代次數爲5,終止閾值爲1 4 /// </summary> 5 public override void OnClick() 6 { 7 #region 一、參數設置 8 PIE.CommonAlgo.KmeansClassification_Exchange_Info info = new PIE.CommonAlgo.KmeansClassification_Exchange_Info(); 9 info.InputFilePath = @"D:\Data\GF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tiff"; 10 info.OutputFilePath = @"D:\Data\ip_result2.tif"; 11 info.ClassNum = 5; 12 info.Maxloop = 5; 13 info.Threshold = 1; 14 info.LowBands = new List<int> { 0, 1, 2, 3 }; 15 16 PIE.SystemAlgo.ISystemAlgo algo = PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.KmeansClassificationAlgo"); 17 if (algo == null) return; 18 #endregion 19 20 //二、算法執行 21 PIE.SystemAlgo.ISystemAlgoEvents algoEvents = algo as PIE.SystemAlgo.ISystemAlgoEvents; 22 algo.Name = " K-Means分類"; 23 algo.Params = info; 24 bool result = PIE.SystemAlgo.AlgoFactory.Instance().ExecuteAlgo(algo); 25 26 //三、結果顯示 27 ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(info.OutputFilePath); 28 m_HookHelper.ActiveView.FocusMap.AddLayer(layer); 29 m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll); 30 } |