1.算法功能简介

  监督分类,也叫训练场地法、训练分类法,是遥感图像分类的一种,用被确认类别的样本像元去识别其他未知类别像元的过程。监督分类算法有平行算法、平行六面体法、最小距离法、最大似然法、马氏距离法、二值编码分类法等算法。

  最小距离法是一种原理简单,应用方便的分类方法,它利用训练样本中各类别在各波段的均值,根据各像元离训练样本平均值的距离大小来决定其类别,其在遥感分类中应用并不广泛,主要缺点是此方法没有考虑不同类别内部方差的不同,从而造成一些类别在其边界上的重叠,引起分类误差,因此需要一些更有效的测量距离的方法。

  最大似然分类,在多类地物识别时,常采用某种统计方法建立起一个判别函数集,然后根据这个判别函数计算各待分类样本的归属概率,样本属于哪一类的概率最大就判别其属于哪一类,这就是最大似然法 。最大似然法是根据训练样本的均值和方差来评价其他像元和训练类别之间的相似性,它可以同时定量地考虑两个以上的波段和类别,是一种广泛应用的分类器,但是这种算法的计算量较大,同时对不同类别的方差变化比较敏感。

  PIE SDK支持算法功能的执行,下面对距离分类算法和最大似然分类法功能进行介绍。

2.算法功能实现说明

2.1 实现步骤

第一步

设置ROI统计参数ROIStatistics_Exchange_Info并执行ROI统计算法得到ROI统计信息。

第二步

根据roi统计信息设置监督分类参数SupervisedClassification_Exchange_Info并执行距离分类算法

第三步

结果显示

2.2 算法参数

算法名称

距离分类

C#算法DLL

PIE.CommonAlgo.dll

C#算法名称

PIE.CommonAlgo.DistanceClassificationAlgo(距离分类)

PIE.CommonAlgo.MLClassificationAlgo(最大似然分类)

参数结构体

SupervisedClassification_Exchange_Info

参数说明

InputFilePath

String

输入文件(*.tif;*.tiff; *.img)

OutputFilePath

String

输出文件路径

(*.tif;*.tiff; *.img)

RStart

Int

行起始值(大于等于0小于栅格总行数)

REnd

Int

行结束值(大于等于0小于栅格总行数,大于RStart)

CStart

Int

列起始值(大于等于0小于栅格总列数)

CEnd

Int

列结束值(大于等于0小于栅格总列数,大于CEnd)

SelBandNums

Int

多光谱波段个数

SelBandIndexs

IList<Int>

多光谱波段集合

ROINums

Int

ROI个数

ROIMean

IList<double>

ROI均值集合

ROICof

IList<double>

ROICof集合

ListRoiNames

IList<String>

ROI名称集合

ListRoiColors

IList<String>

ROI颜色集合

ClassifierType

Int

监督分类类型(0代表最大似然分类;11代表最小距离分类;12带代表马氏距离分类)

FuncName

String

C#算法名称

 

2.3 示例代码

项目路径

百度云盘地址下/PIE示例程序/10.算法调用/图像处理/ DistanceClassify

数据路径

百度云盘地址下/PIE示例数据/栅格数据/04.World.tif

视频路径

百度云盘地址下/PIE视频教程/10.算法调用/图像处理/距离分类算法.avi

示例代码

 using PIE.Carto;
using PIE.CommonAlgo;
using PIE.Controls;
using PIE.SystemAlgo;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace DistanceClassify
{
//距离分类
class DistanceClassifyCommand : BaseCommand
{
/// <summary>
/// 监督分类参数
/// </summary>
private PIE.CommonAlgo.SupervisedClassification_Exchange_Info m_DataInfo = null; public DistanceClassifyCommand()
{
this.Name = "DistanceClassifyCommand";
this.Caption = "DistanceClassifyCommand";
} /// <summary>
/// 单击方法
/// </summary>
public override void OnClick()
{
int selBandNums = ;//选择分类数据的波段
m_DataInfo = new PIE.CommonAlgo.SupervisedClassification_Exchange_Info();
m_DataInfo.InputFilePath = @"D:\data\China1\World.tif";
m_DataInfo.OutputFilePath = @"D:\data\temp\WorldDisClassify.img";
m_DataInfo.CStart = ;//行列起止值
m_DataInfo.CEnd = ;
m_DataInfo.RStart = ;
m_DataInfo.REnd = ;
m_DataInfo.SelBandNums = selBandNums;//波段的个数
m_DataInfo.ClassifierType = ;//分类类型 0 代表最大似然;11代表最小距离分类;12代表马氏距离分类 //多光谱波段的的集合
List<int> listBandIndex = new List<int>();
for (int i = ; i < selBandNums; i++)
{
listBandIndex.Add(i + );
}
m_DataInfo.SelBandIndexs = listBandIndex; #region ROIStatistics ROI统计算法
ROIStatistics_Exchange_Info roiDataInfo = new PIE.CommonAlgo.ROIStatistics_Exchange_Info();
roiDataInfo.ClassifierType = m_DataInfo.ClassifierType;
roiDataInfo.currentFileName = m_DataInfo.InputFilePath;
roiDataInfo.selBandIndex = m_DataInfo.SelBandIndexs.ToArray();
roiDataInfo.selBandNums = m_DataInfo.SelBandNums; IList<ILayer> listLayer = m_HookHelper.ActiveView.FocusMap.GetAllLayer();
foreach (ILayer item in listLayer)
{
if (item.Name == "roi_layer")//得到利用分类工具生成的roi文件
{
roiDataInfo.pROILayer = item as IGraphicsLayer;
}
}
//创建并执行roi统计算法
ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ROIStatisticsAlgo");
algo.Params = roiDataInfo;
bool result = AlgoFactory.Instance().ExecuteAlgo(algo);//同步执行roi统计算法
#endregion #region DistanceClassify算法
//执行完成后得到roi统计的参数会发生变化
roiDataInfo = (ROIStatistics_Exchange_Info)algo.Params;
int roiNum = roiDataInfo.vecROIName.Count; m_DataInfo.ROINums = roiNum; //ROI个数
m_DataInfo.ListRoiNames = roiDataInfo.vecROIName;//roi名称列表
m_DataInfo.ListRoiColors = roiDataInfo.vecROIColor;//roi颜色集合
m_DataInfo.ROIMean = new List<double>();
m_DataInfo.ROICof = new List<double>();
for (int i = ; i < roiNum; i++)//roi均值集合
{
for (int j = ; j < selBandNums; j++)
{
m_DataInfo.ROIMean.Add(roiDataInfo.vecMean[i * selBandNums + j]);
}
for (int k = ; k < selBandNums * selBandNums; k++)
{
m_DataInfo.ROICof.Add(roiDataInfo.vecCof[i * selBandNums * selBandNums + k]);
}
}
ISystemAlgo distanceAlgo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.DistanceClassificationAlgo");//最大似然法就将DistanceClassificationAlgo替换为MLClassificationAlgo
distanceAlgo.Params = m_DataInfo;
ISystemAlgoEvents systemEvents = distanceAlgo as ISystemAlgoEvents;
systemEvents.OnExecuteCompleted += systemEvents_OnExecuteCompleted;
result = AlgoFactory.Instance().ExecuteAlgo(distanceAlgo);
#endregion
} /// <summary>
/// 算法执行完成事件
/// </summary>
/// <param name="algo"></param>
void systemEvents_OnExecuteCompleted(ISystemAlgo algo)
{
ISystemAlgoEvents systemEvents = algo as ISystemAlgoEvents;
systemEvents.OnExecuteCompleted -= systemEvents_OnExecuteCompleted;
ILayer layer = LayerFactory.CreateDefaultLayer(m_DataInfo.OutputFilePath);
if (layer == null)
{
System.Windows.Forms.MessageBox.Show("分类后图层为空");
return;
}
m_HookHelper.ActiveView.FocusMap.AddLayer(layer);
m_HookHelper.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
}
}
}

2.4 示例截图

注意:

1、上述分类图由于roi分类的类别很少可能误差有点大,稍微做了些渲染修改

2、如果要改成最大似然分类法,修改执行算法以及ClassifierType=0;

其他不变(距离分类和最大似然分类的参数文件是同一个素以不需要修改其他内容):

PIE.SystemAlgo.ISystemAlgo algo=PIE.SystemAlgo.AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.MLClassificationAlgo")

PIE SDK 距离分类和最大似然分类的更多相关文章

  1. PIE SDK K-Means分类

    1.算法功能简介 K-Means 算法的基本思想是:以空间中 k 个点为中心进行聚类,对最靠近他们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类结果. 算法首先随机从数据集中选 ...

  2. PIE SDK 精度分析(分类后处理)

    1.算法功能简介 遥感图像分类精度分析通常把分类图与标准数据进行比较,然后用正确分类的百分比来表示分类的精度. PIE SDK支持算法功能的执行,下面对精度分析算法功能进行介绍. 2.算法功能实现说明 ...

  3. PIE SDK ISODATA分类

    1.算法功能简介 ISODATA(IterativeSelf-OrganizingDataAnalysisTechniqueAlgorithm)即迭代式自组织数据分析技术, 其大致原理是首先计算数据空 ...

  4. PIE SDK分类合并

    1. 算法功能简介 分类合并功能是将分类文件中所设置的对应类别进行合并. PIE SDK支持算法功能的执行,下面对分类合并算法功能进行介绍. 2. 算法功能实现说明 2.1. 实现步骤 第一步 算法参 ...

  5. PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验

    最近研究遥感,用到分类算法,PIE SDK正好提供了一些方法可供调用,他们的官方博客上也有相应的示例代码(可参考:https://www.cnblogs.com/PIESat/p/10725270.h ...

  6. PIE SDK 文章目录索引

    1.PIE SDK介绍 1.1.  PIE软件介绍 1.2.  PIE SDK介绍 1.3.  PIE支持项目介绍 1.4.  PIE.NET-SDK插件式二次开发介绍 1.5.  PIE.NET-S ...

  7. PIE SDK Command&&Tool工具命令一览表

    PIE SDK Command&&Tool工具命令一览表 编号 模板 名称(中文) Command&Tool 程序集 备注 1 数据管理 加载栅格数据 PIE.Controls ...

  8. PIE SDK分类统计

    1. 算法功能简介 分类统计功能是将分类后的结果统计输出. PIE SDK支持算法功能的执行,下面对分类统计算法功能进行介绍. 2. 算法功能实现说明 2.1. 实现步骤 第一步 算法参数设置 第二步 ...

  9. PIE SDK过滤

    1. 算法功能简介 过滤功能使用斑点分组方法来消除分类文件中被隔离的分类像元,用以解决分类图像中出现的孤岛问题. PIE SDK支持算法功能的执行,下面对过滤算法功能进行介绍. 2. 算法功能实现说明 ...

随机推荐

  1. 根据dateutil计算从前到现在过去多少时间

    import datetime from dateutil import relativedelta while 1: birthday = input(">>>" ...

  2. [原创]Linux下使用Daemon实现服务器永久存活

    很多服务器端设计者,很少会考虑到服务器永久存活或热替换的问题,貌似真的很少 其中永久存活最大的理论支持就是,我们如何真正的保证一组服务器持续的存在,即便宕机? 其实没有人能保证自己写的代码那么完美无瑕 ...

  3. [GO]结构体成员的使用:普通变量

    package main import "fmt" func main() { type student struct { id int name string sex byte ...

  4. Linux-Linux基础入门

    第一节 Linux系统简介 初步了解了什么是Linux系统,有何优势.与Windows系统有何不同,并了解Linux学习方法. 第二节 基本概念及概念 1.完成实验楼入门基础课程,共两个实验:(1)& ...

  5. [Lua快速了解一下]Lua的Table

    Lua中的Table其实就是一个Key Value的structure haoel = {name=, handsome=True} -table的CRUD操作 haoel.website=" ...

  6. CodeForces 814D An overnight dance in discotheque(贪心+dfs)

    The crowdedness of the discotheque would never stop our friends from having fun, but a bit more spac ...

  7. 洛谷P2147[SDOI2008]洞穴勘测(lct)

    题目描述 辉辉热衷于洞穴勘测. 某天,他按照地图来到了一片被标记为JSZX的洞穴群地区.经过初步勘测,辉辉发现这片区域由n个洞穴(分别编号为1到n)以及若干通道组成,并且每条通道连接了恰好两个洞穴.假 ...

  8. 4、Semantic-UI之图标的使用

    4.1 图标的使用   在Semantic-UI中定义了很多的图标样式,这些图标样式可以通过官网查看名称(官网中名称首字母都是大写的,但是在实际使用中全部都是小写使用的): 实例:图标样式 定义基础图 ...

  9. Nginx根据用户请求的不同参数返回不同的json值

    用户请求url:http://localhost:8000/getconfig?v=1.03.01,根据参数v=1.03.01或者其他的值返回不同的json值.如果用户请求不带该参数,则返回默认的js ...

  10. Transaction And Lock--锁相关基础

    --=======================================================--锁提示--holdlock :将共享锁保留到事务完成,而不是在相应的表.行或数据页 ...