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. Python 简单模块学习

    1. openpyxl / xlrd / xlwt  => 操作Excel 文件(xlsx格式) => xlrd + xlwt : 只能操作xls文件,分别负责读写, 暂时不讨论 => ...

  2. R语言笔记完整版

    [R笔记]R语言函数总结   R语言与数据挖掘:公式:数据:方法 R语言特征 对大小写敏感 通常,数字,字母,. 和 _都是允许的(在一些国家还包括重音字母).不过,一个命名必须以 . 或者字母开头, ...

  3. python str, list,tuple, dir

    Python3 字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可.例如: var1 = 'Hello ...

  4. MP3 Lame 转换 参数 设置(转)

    我们在对音频格式的转换中,打交道最多的就是MP3了.如果你能彻底玩转MP3,那么对你的音频创作和对其他音频格式的掌握会有很大的帮助.下面我们给大家介绍MP3制作软件:LAME 要制作出高音质的MP3靠 ...

  5. Android Messenger

    说到Android进程间通信,大家肯定能想到的是编写aidl文件,然后通过aapt生成的类方便的完成服务端,以及客户端代码的编写.如果你对这个过程不熟悉,可以查看Android aidl Binder ...

  6. [Erlang16]为什么要用MFA代替fun()–>end?

    MFA:Module Function Arguments. 首先你要知道Module:Func(Args)和Func(Args)的区别在哪里? 如果对细节感兴趣,可以通过这里了解:http://ww ...

  7. Windows安装mysql8.0

    一.下载并解压 地址:https://dev.mysql.com/downloads/mysql/ 如下图: 下载解压后 二.创建my.ini文件 在D:\mysql\mysql-8.0.13-win ...

  8. 爬虫开发9.scrapy框架之递归解析和post请求

    今日概要 递归爬取解析多页页面数据 scrapy核心组件工作流程 scrapy的post请求发送 今日详情 1.递归爬取解析多页页面数据 - 需求:将糗事百科所有页码的作者和段子内容数据进行爬取切持久 ...

  9. idea maven新建struts2项目

    环境: IDEA java1.8 struts2-core  2.5.18 一路下一步,名字自己随便填, 项目建好后修改pom.xml文件,加入struts2-core 添加tomcat: +号添加w ...

  10. 932. Beautiful Array

    For some fixed N, an array A is beautiful if it is a permutation of the integers 1, 2, ..., N, such ...