zoukankan      html  css  js  c++  java
  • PIE SDK K-Means分类

     

    1.算法功能简介

        K-Means 算法的基本思想是:以空间中 k 个点为中心进行聚类,对最靠近他们的对象归类。通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果。

    算法首先随机从数据集中选取 K 个点作为初始聚类中心,然后计算各个样本到聚类中的距离,把样本归到离它最近的那个聚类中心所在的类。计算新形成的每一个聚类的数据对象的平均值来得到新的聚类中心,如果相邻两次的聚类中心没有任何变化,说明样本调整结束,聚类准则函数已经收敛。本算法的一个特点是在每次迭代中都要考察每个样本的分类是否正确。若不正确,就要调整,在全部样本调整完后,再修改聚类中心,进入下一次迭代。如果在一次迭代算法中,所有的样本被正确分类,则不会有调整,聚类中心也不会有任何变化,这标志着已经收敛,因此算法结束。

        PIE SDK支持算法功能的执行,下面对K-Means分类算法功能进行介绍。

    2.算法功能实现说明

    2.1. 实现步骤

    第一步

    算法参数设置

    第二步

    算法执行

    第三步

    结果显示

    2.2. 算法参数

    算法名称

    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 })

    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 1、参数设置
     8             PIE.CommonAlgo.KmeansClassification_Exchange_Info info = new PIE.CommonAlgo.KmeansClassification_Exchange_Info();
     9             info.InputFilePath = @"D:DataGF1_PMS1_E116.5_N39.4_20131127_L1A0000117600-MSS1.tiff";
    10             info.OutputFilePath = @"D:Dataip_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             //2、算法执行
    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             //3、结果显示
    27             ILayer layer = PIE.Carto.LayerFactory.CreateDefaultLayer(info.OutputFilePath);
    28             m_HookHelper.ActiveView.FocusMap.AddLayer(layer);
    29             m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    30         }
    View Code

    2.4. 示例截图

  • 相关阅读:
    在多个游戏视图间切换实现效果
    Animator窗口视图Project视图PlayerIdleAnimation和PlayerWalkingAnimation
    Swift 1.1语言函数参数的特殊情况本地参数名外部参数名
    Delphi-网络编程-UDP聊天程序(转)
    Delphi 编程进阶
    Android自定义控件(状态提示图表) (转)
    74HC166与TPIC6A595分析(转)
    基于STM32的USB枚举过程学习笔记
    USB那点事3 -使用端口2作为custom HID的传输(转)
    STM32-USB那点事
  • 原文地址:https://www.cnblogs.com/PIESat/p/10213856.html
Copyright © 2011-2022 走看看