1.算法功能简介
遥感图像分类精度分析通常把分类图与标准数据进行比较,然后用正确分类的百分比来表示分类的精度。
PIE SDK支持算法功能的执行,下面对精度分析算法功能进行介绍。
2.算法功能实现说明
2.1. 实现步骤
第一步
|
算法参数设置
|
第二步
|
算法执行
|
第三步
|
结果显示
|
2.2. 算法参数
算法名称
|
精度分析
|
C#算法DLL
|
PIE.CommonAlgo.dll
|
C#算法名称
|
PIE.CommonAlgo.ImgClassPostPAAlgo
|
参数结构体
|
StImgClassPostPA
|
参数说明
|
RealName
|
String
|
输入真实地面分类文件(*.tif;*.tiff; *.img)
|
ClassName
|
String
|
输入分类数据文件(*.tif;*.tiff; *.img)
|
RealIndex
|
IList<Int>
|
真实类别索引集合(正整数)
|
ClassIndex
|
IList<Int>
|
分类类别索引集合(正整数)
|
strRealInfo
|
IList<String>
|
真实地面信息
|
strClassInfo
|
IList<String>
|
分类数据信息
|
Fileinfo
|
String
|
精度结果
|
IsShp
|
bool
|
是否矢量
|
FuncName
|
String
|
功能名称
|
SelIndex
|
Int
|
选中索引
|
2.3. 示例代码
项目路径
|
百度云盘地址下/PIE示例程序/10.算法调用/图像处理/ PrecisionAnalysisDemo
|
数据路径
|
百度云盘地址下/PIE示例数据/栅格数据/08.图像分类/ distanceClassify-Julei.tif
|
视频路径
|
百度云盘地址下/PIE视频教程/10.算法调用/图像处理/精度分析.avi
|
示例代码
|
/// <summary>
/// 分类后处理-精度分析
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void toolStripButton1_Click(object sender, EventArgs e)
{
//用分类后的结果distanceClassify-Julei.tif和真实的文件进行比对,得到精度分析结果
//参数设置
PIE.CommonAlgo.StImgClassPostPA info = new PIE.CommonAlgo.StImgClassPostPA();
info.FuncName = "精度分析";
info.ClassName = @"D:\data\图像分类2\distanceClassify-Julei.tif";//分类后数据文件
info.RealName = @"D:\data\图像分类2\roi-shp.shp";//地面真实文件(矢量或者是影像)
IList<int> listRealIndex = new List<int> { , , , };//此处没有处理索引为0的未分类数据,若处理可以加上0;
IList<int> listClassIndex = new List<int> { ,,, };
info.RealIndex = listRealIndex;//真实地面索引集合 匹配的左侧索引
info.ClassIndex = listClassIndex;//分类类别索引集合 匹配的右侧索引
info.IsShp = true; //如果是roi文件 则为true
IList<string> listClassNameInfo = new List<string>();
IList<string> listRealNameInfo = new List<string>();
listRealNameInfo.Add("Unclassified");
IFeatureDataset realFeatureDataset = DatasetFactory.OpenFeatureDataset(info.RealName);
if (realFeatureDataset == null) return;
IFeature feature = realFeatureDataset.GetNextFeature();
while (feature != null)
{
string str = feature.GetValue().ToString();//默认选择索引为0的字段的值
int nSize = listRealNameInfo.Count;
if (nSize == )
{
listRealNameInfo.Add(str);
continue;
}
int isz = ;
for (isz = ; isz < nSize; isz++)
{
if (listRealNameInfo[isz] == str) break;
}
if (isz == nSize)
{
listRealNameInfo.Add(str);
}
feature = realFeatureDataset.GetNextFeature();
}
//分类数据的类别
IRasterDataset rasterDataset = DatasetFactory.OpenRasterDataset(info.ClassName, OpenMode.ReadOnly);
listClassNameInfo = rasterDataset.GetRasterBand().GetCategoryNames();//获取分类信息
if (listClassNameInfo == null)
{
IColorTable colTable = rasterDataset.GetRasterBand().Table;
if (colTable != null)
{
int count = colTable.GetColorEntryCount();
for (int i = ; i < count; i++)
{
listClassNameInfo.Add("Class" + i);
}
}
}
info.strClassInfo = listClassNameInfo; //分类数据类别信息
info.strRealInfo = listRealNameInfo; //真实地面信息
info.SelIndex = ; //选中的属性索引 ClassName
//2、创建算法对象
ISystemAlgo algo = AlgoFactory.Instance().CreateAlgo("PIE.CommonAlgo.dll", "PIE.CommonAlgo.ImgClassPostPAAlgo");
if (algo == null) return;
algo.Params = info;
//3、执行算法
bool result = AlgoFactory.Instance().ExecuteAlgo(algo);
PIE.CommonAlgo.StImgClassPostPA info1 = algo.Params as PIE.CommonAlgo.StImgClassPostPA;
string str1 = info1.Fileinfo;
MessageBox.Show(str1,"精度分析结果:");
}
|
2.4. 示例截图
图1:分类前数据
图2:距离分类结果(聚类调整)
图3:精度分析结果
注意:示例中的分类数据是距离分类数据distanceClassify.img;
分类之后会出现斑点问题,可以采用聚类进行消除得到distanceClassify-Julei.tif数据。
最新文章
- ios tabbar 文字位置
- caches 文件夹删除
- Web---自己写的一个简单云相册~
- SQL Server 2008如何导出带数据的脚本文件
- 【Android Developers Training】 94. 创建一个空内容提供器(Content Provider)
- bzoj4326 运输计划
- jenkins部署.net平台自动化构建
- Android 键盘键名和键值列表
- IDEA连接数据库自动生成实体类
- emWin及StemWin使用中关于菜单栏的应用与问题
- M100 (0)开发
- C++11--智能指针shared_ptr,weak_ptr,unique_ptr <;memory>;
- 11 vim文本编辑器
- avalon2学习教程02之vm
- 关于MSCOMM.OCX无法正常注册的问题解决
- Unity 网格 绘制
- PHP利用CURL_MULTI实现多线程
- 第一篇:Hadoop简介
- flask 日志
- 20145122《Java程序设计》第一周学习总结
热门文章
- 第五篇:Python函数基础篇
- apache配置项
- tensorflow模型量化实例
- Codeforces 1278F: Cards
- ReportMachine打印条形码的问题
- 【Spring AOP】AOP介绍(一)
- shell的使用技巧
- JDOJ 1152 是否是素数
- 跨交换机VLAN之间的通信(基于Cisco模拟器)
- idea中使用python环境