【PIE-Engine Studio学习笔记06】图像分类——监督分类

一、图像分类含义

图像分类是将图像中每个像元根据其在不同波段的光谱亮度、空间结构特征或者其他信息,按照某种规则或算法划分为不同的类别。
基于光谱特征的遥感影像分类方法主要包括:

  • 非监督分类,见【PIE-Engine Studio学习笔记05】图像分类——非监督分类
  • 监督分类

此章节重点讲解监督分类

二、监督分类含义

监督分类(supervised) , 又称训练分类法, 即用被确认类别的样本像元去识别其他未知类别像元的过程。已被确认类别的样本像元是指那些位于训练区的像元。在这种分类中,分析者在图像上对每一种类别选取一定数量的训练区,计算机计算每种训练样区的统计或其他信息,每个像元和训练样本作比较,按照不同规则将其划分到和其最相似的样本类。
简单的说,首先需要从遥感影像上选取具有代表性的训练区作为样本,并进行训练;再依据一定的判别函数与判别准则,对待分像元进行类别判定。

监督分类可分两个基本步骤:

  1. 选择训练样本和提取统计信息;
  2. 选择合适的分类算法,也可以说是分类器:
  • 平行算法
  • 最小距离法
  • 最大似然法

三、PIE-Engine Studio 实现监督分类

3.1 PIE-Engine Studio 多种监督分类算法:

PIE-Engine Studio 支持一下多种监督分类算法:

  • AdaBoost分类分类器
  • 决策树分类分类器。
  • K最近邻分类分类器。
  • 正态贝叶斯分类分类器。
  • 随机森林分类分类器。
  • svm(支持向量机)监督分类分类器。

3.2 PIE-Engine Studio 多种监督分类算法实现:

1、矢量范围加载显示

//1、获取采样区域范围
var geometry = pie.FeatureCollection("NGCC/CHINA_CITY_BOUNDARY")
    .filter(pie.Filter.eq("name", "邯郸市"))
    .first()
    .geometry();

Map.centerObject(geometry, 6);
Map.addLayer(geometry, { color: 'FF0000', fillColor: '00000000', width: 1 }, "邯郸");

【PIE-Engine Studio学习笔记06】图像分类——监督分类_第1张图片

2、影像裁剪、加载显示


//2.调用哨兵-2 TOA数据集,设定筛选条件:日期、区域、云量
var img = pie.ImageCollection("S2/L2A")
        .filterBounds(geometry)
        .filterDate("2020-05-01", "2020-10-01")
        .filter(pie.Filter.lte("cloudyPixelPercentage", 0.5))
        .select(["B2", "B3", "B4"])
        .max()
        .clip(geometry);;

//设置影像参数与波段组合并加载
Map.addLayer(img, { min: 0, max: 3000, bands: ["B4", "B3", "B2"] }, "img", true);
print(img)

【PIE-Engine Studio学习笔记06】图像分类——监督分类_第2张图片

3、分类样本文件制作

分类的代码编号如下:

1-水体
2-山地
3-农田
4-城镇

这一步比较麻烦,没有找到比较好的方式进行样本制作,**如果大家有比较好的方式可以私信我哈,在此先行谢过!!**我是利用ArcMap制作的样本点矢量。
【PIE-Engine Studio学习笔记06】图像分类——监督分类_第3张图片

注意两点:
1、样本数量多一点,每个Class十个以上吧,我这里样本选的有点少。
2、单点,PIE-Engine Studio 监督分类只支持单点格式(point)的数据,目前还不支持多点(Multipoint)的数据。所以利用ArcMap中的【Feature To Point】进行了转换。

【PIE-Engine Studio学习笔记06】图像分类——监督分类_第4张图片
转换后的单点格式:
【PIE-Engine Studio学习笔记06】图像分类——监督分类_第5张图片

最终的上传的矢量文件结果如下所示,上传过程见:【PIE-Engine Studio学习笔记04】上传本地数据和导出云端数据
【PIE-Engine Studio学习笔记06】图像分类——监督分类_第6张图片
加载显示:

var featureCollection = pie.FeatureCollection('user/Lee103/CSDN/roi_FeatureToPoint');
print("roi:", featureCollection)
Map.addLayer(featureCollection, { color: 'FF0000', fillColor: '00000000', width: 2 }, "roi");

【PIE-Engine Studio学习笔记06】图像分类——监督分类_第7张图片

4、训练分类

//进行训练
var training = img.sampleRegions(featureCollection, ["Class"], 10);
print("training:", training)

// 定义SVM参数
var options = {
    // SVM类型: C_SVC=100,NU_SVC=101,ONE_CLASS=102,EPS_SVR=103,NU_SVR=104
    "svmType": 100,
    // SVN核类型:LINEAR=0,POLY=1,RBF=2,SIGMOID=3,CHI2=4,INTER=5
    "kernelType": 0,
    // 核函数的γ参数,默认值为1;
    "gamma": 1,
    // 核函数的coef0参数,默认值为0
    "coef0": 0,
    // 多项式核函数的degreee参数(阶数),默认值为0;
    "degree": 0,
    // 用最优参数训练SVM,如果是会相当耗时
    "trainAuto": 0,
    // 迭代终止方式:1表示最大迭代次数 2表示最小收敛阈值 3表示最大迭代次数和最小收敛阈值组合
    "type": 3,
    // 最小收敛的阈值:当点之间的距离小于这个值的时候终止迭代
    "minDistance": 0.1,
    // 最大的迭代次数:计算多少次终止聚类迭代
    "maxIter": 100
};

//分类器进行分类
var classifer = pie.Classifier.svm(options).train(training, "Class", ["B4", "B3", "B2"]);
var resultImage = img.classify(classifer, "classify_handa");

print("resultImage:", resultImage)

5、渲染显示

var visParam = {
    opacity: 1,
    uniqueValue: '1,2,3,4',
    palette: 'EAF2F5,000032,1F3600,FAFFC8'
};

Map.addLayer(resultImage, visParam, 'handan_class');

6、制作图例

var data = {
    title: "分类结果",
    colors: ['EAF2F5', '000032', '1F3600', 'FAFFC8'],
    labels: ["1-山地", "2-水体", "3-农田", "4-城镇"],
    step: 1
};
var style = {
    right: "100px",
    bottom: "10px",
    height: "70px",
    width: "300px"
};
var legend = ui.Legend(data, style);
Map.addUI(legend);

分类结果
【PIE-Engine Studio学习笔记06】图像分类——监督分类_第8张图片


总结

本节主要学习了基于PIE-Engine Studio 进行监督分类。欢迎大家批评指正,探讨交流!!!

参考:
《遥感应用分析原理与方法》赵英时

你可能感兴趣的:(PIE-Engine,Studio,RS,PIE-Engine)