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

一、图像分类含义

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

  • 非监督分类
  • 监督分类

二、非监督分类含义

非监督分类(unsupervised),也称为聚类分析或点群分析。即在多光谱图像中搜寻、定义其自然相似光谱集群组的过程。非监督分类不需要人工选择训练样本,仅需极少的人工初始输入,计算机按一定规则自动地根据像元光谱或空间等特征组成集群组,然后分析者将每个组和参考数据比较,将其划分到某一类别中去。
非监督分类算法有多种:

  • K均值(K-means Clustering Algorithm)
  • 最大期望(Expectation-Maximization)
  • ISODATA分类算法(Iterative Self-Organizing Data Analysis Technipue)
  • BP神经网络分类算法

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

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

K均值(K-means Clustering Algorithm)

  • 是一种迭代求解的聚类分析算法,易于描述、时间效率高且适于处理大规模数据,核心对象为pie.Clusterer.kMeans。

最大期望(Expectation-Maximization)

  • 是一种通过迭代进行极大似然估计的优化算法,通常作为牛顿迭代法(Newton-Rapson method)的替代,用于含隐变量(latent variable)或缺失数据(incomplete-data)的概率模型进行参数估计,核心对象为pie.Clusterer.em。

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}, "邯郸");

基于非监督决策理论分类器设计Python程序 非监督分类方法原理_分类算法

2.调用Landsat8 TOA数据集

//调用Landsat8 TOA数据集,设定筛选条件:日期、区域、云量,并进行镶嵌,裁剪
var img = pie.ImageCollection("LC08/01/T1")
             .filterBounds(geometry)
             .filterDate("2020-05-01", "2020-10-01")
             .filter(pie.Filter.lte("cloudCover", 2))
             .select(["B2", "B3", "B4", "B5"])
             .max()
             .clip(geometry);
             
//添加影像并波段组合进行真彩色加载显示
Map.addLayer(img, {min: 0, max: 3000, bands: ["B4", "B3", "B2"]}, "img", false);

基于非监督决策理论分类器设计Python程序 非监督分类方法原理_图像分类_02

3.采样

//设置采样参数
var training = img.sample(geometry,30,"","",200);

基于非监督决策理论分类器设计Python程序 非监督分类方法原理_数据集_03


查阅帮助文档可以看到sample的参数说明。

4.非监督分类训练

//分为5类
//(1)kMeans算法
var cluster = pie.Clusterer.kMeans(5).train(training).getInfo();
//(2)em算法
//var cluster = pie.Clusterer.em(5).train(training).getInfo();

5.分类结果渲染显示

//分类结果
var resultImage = img.cluster(cluster,"clusterA");

// 结果显示渲染
var visParam = {
    opacity:1,
    classify:'0,1,2,3,4',
    palette: 'FF0000,00FFFF,00FF00,FF00FF,0000FF,FFFF00'
};
Map.addLayer(resultImage,visParam,'邯郸非监督分类');

kMeans结果

基于非监督决策理论分类器设计Python程序 非监督分类方法原理_分类算法_04


em结果

基于非监督决策理论分类器设计Python程序 非监督分类方法原理_云计算_05

6.完整代码
// //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}, "邯郸");

//2.调用Landsat8 TOA数据集,设定筛选条件:日期、区域、云量,并进行镶嵌,裁剪
var img = pie.ImageCollection("LC08/01/T1")
             .filterBounds(geometry)
             .filterDate("2020-05-01", "2020-10-01")
             .filter(pie.Filter.lte("cloudCover", 2))
             .select(["B2", "B3", "B4", "B5"])
             .max()
             .clip(geometry);

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

//3、采样
var training = img.sample(geometry,30,"","",200);

//4、非监督分类训练1-kMeans算法
// var cluster = pie.Clusterer.kMeans(5).train(training).getInfo();

//4、非监督分类训练2-em算法
var cluster = pie.Clusterer.em(5).train(training).getInfo();

//5、分类结果
var resultImage = img.cluster(cluster,"clusterA");

// 结果显示渲染
var visParam = {
    opacity:1,
    classify:'0,1,2,3,4',
    palette: 'FF0000,00FFFF,00FF00,FF00FF,0000FF,FFFF00'
};
Map.addLayer(resultImage,visParam,'邯郸非监督分类');
print(img)

总结

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

参考:
《遥感应用分析原理与方法》赵英时
《遥感导论》梅安新