PIE-engine 教程 ——随机森林监督分类案例河北安国市为例
本次举一个简答的案例,通过对一个县级市进行监督分类采样,然后进行耕地、林地、园地和其它的划分,除此之外,我们还需要掌握随机样本点的采集,混淆矩阵以及精度计算等问题。首先我们看一下随机样本点的选取函数:
sampleRegions(collection,properties,scale,projection,tileScale,geometries)
从Image中随机采样,返回结果是一个FeatureCollection,FeatureCollection下的每一个Feature中存储采样点的相应波段的信息
方法参数:
- image(Image)
Image实例。
- collection(FeatureCollection)
样本点,需要包括分类字段
- properties(List)
采样保留字段集合
- scale(Float)
图像采样比例尺
- projection(String)
未启用
- tileScale(Float)
未启用
- geometries(Boolean)
未启用
返回值:Image
随机森林分类器
pie.Classifier.rTrees(options)
随机森林分类方法分类器
方法参数:
- Classifier(Classifier)
监督分类分类器实例
- options(Object)
参数对象
返回值:Classifier
随机森林的悬链样本
train(features,classProperty,inputProperties,subsampling,subsamplingSeed)
监督分类分类器训练
方法参数:
- Classifier(Classifier)
监督分类分类器实例
- features(FeatureCollection)
样本点
- classProperty(String)
分类类别字段
- inputProperties(List)
分类计算字段
- subsampling(Float)
未启用
- subsamplingSeed(nt)
未启用
返回值:Classifier
分类后影像进行平滑去噪处理,这里默认用到的半径为3
focal_min(radius,kernelType,iterations,units,kernel)
形态学腐蚀算法。
方法参数:
- image(Image)
Image实例。
- radius(Number)
半径,默认3。
- kernelType(String)
计算核的类型,默认circle。
- iterations(Number)
计算循环的次数,默认为1
- units(String)
计算采用的单位,默认为pixel
- kernel(Kernel)
计算采用的核。
返回值:Image
focal_max(radius,kernelType,iterations,units,kernel)
形态学膨胀算法。
方法参数:
- image(Image)
Image实例。
- radius(Number)
半径,默认3。
- kernelType(String)
计算核的类型,默认circle。
- iterations(Number)
计算循环的次数,默认为1
- units(String)
计算采用的单位,默认为pixel
- kernel(Kernel)
计算采用的核。
返回值:Image
混淆矩阵
confusionMatrix()
计算监督分类分类器结果的混淆矩阵
方法参数:
- Classifier(Classifier)
监督分类分类器实例
返回值:ConfusionMatrix
classify(classifier,outputName)
按照之前设定的监督分类器,进行分类,并给出名称
进行监督分类,返回结果为分类后的影像
方法参数:
- image(Image)
Image实例。
- classifier(Classifier)
监督分类分类器
- outputName(String)
分类影像的波段名称,“classfiy”为默认值
返回值:Image
errorMatrix(actual,predicted,order)
通过比较FeatureCollection的两列(一列包含实际值,另一列包含预测值),计算FeatureCollection的二维错误矩阵,其中数值从0开始。矩阵的轴0(行)对应于实际值,轴1(列)对应于预测值。
方法参数:
- featureCollection(FeatureCollection)
FeatureCollection实例
- actual(String)
包含实际值的属性的名称。
- predicted(String)
包含预测值的属性的名称。
- order(List)
未启用
返回值:ConfusionMatrix
acc()
混合矩阵的精确度计算结果
方法参数:
- ConfusionMatrix(Object)
混合矩阵对象
返回值:Number
kappa()
返回混合矩阵的kappa系数
方法参数:
- ConfusionMatrix(Object)
混合矩阵对象
代码:
-
/**
-
* @File : 安国市耕林园地随机森林监督分类
-
* @Time : 2022/3/1
-
* @Author : piesat
-
* @Version : 1.0
-
* @Contact : 400-890-0662
-
* @License : (C)Copyright 航天宏图信息技术股份有限公司
-
* @Desc : 安国市耕林园地随机森林监督分类
-
*/
-
var imageCollection0 = pie.ImageCollection("GF2/L1A/Fusion");
-
var featureCollection0 = pie.FeatureCollection("NGCC/CHINA_COUNTY_BOUNDARY");
-
var imageCollection0 = pie.ImageCollection("NGCC/GLOBELAND30");
-
// 耕、林、园地分类
-
// 1.加载研究区-安国市行政边界
-
var anguo = pie
-
.FeatureCollection("NGCC/CHINA_COUNTY_BOUNDARY")
-
.filter(pie.Filter.eq("name", "安国市"))
-
.first()
-
.geometry();
-
Map.centerObject(anguo, 10);
-
-
Map.addLayer(anguo, { color: "red", fillColor: "00000000", width: 2 }, "anguo");
-
-
// 2.加载栅格影像
-
// 数据说明:image为保存于云端、计算好的sentinel合成的NDVI多时序波段数据.
-
//images_Anguo_City数据中B1、B2、B3为Sentinel的三个波段,B4-B11计算好的sentinel合成的NDVI多时序波段数据
-
var bands = ["B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11"];
-
var image = pie
-
.Image("user/pieadmin/public/Raster/images_Anguo_City")
-
.select(bands)
-
.multiply(10000);
-
print("img", image);
-
-
// 加载显示一个波段2020.7.6_NDVI
-
var image0 = pie.Image("user/pieadmin/public/Raster/images_Anguo_City");
-
Map.addLayer(image0.select("B4"), { min: -1, max: 1 }, "2020.7.6_NDVI", false);
-
-
// Sentinel2数据显示
-
var image_vis = pie
-
.Image("user/pieadmin/public/Raster/images_Anguo_City")
-
.select(["B1", "B2", "B3"]);
-
var visParam = { min: 0, max: 3000, bands: ["B1", "B2", "B3"] };
-
Map.addLayer(
-
image_vis.select(["B1", "B2", "B3"]),
-
visParam,
-
"Sentinel2_image",
-
false
-
);
-
-
// 3.point为样本点,0为耕地,1为林地,2为园地,3为其他地物.
-
var point = pie.FeatureCollection(
-
"user/pieadmin/public/shape/Training_Points_Anguo_City"
-
);
-
Map.addLayer(point, { color: "Red" }, "points");
-
// print(point)
-
-
// 获取训练样本
-
var training = image.sampleRegions(point, ["landcover"], 10, "", "", true);
-
// Map.addLayer(training, {color: "FAFAD2"}, "trainingpoints");
-
-
var withRandom = pie.FeatureCollection("user/HaorenWang/withRandom");
-
var trainPartition = withRandom.filter(pie.Filter.lte("random", 0.7));
-
var testPartition = withRandom.filter(pie.Filter.gt("random", 0.7));
-
Map.addLayer(trainPartition, { color: "red" }, "training");
-
Map.addLayer(testPartition, { color: "blue" }, "validation");
-
print("withRandom", withRandom);
-
print("training", trainPartition);
-
print("validation", testPartition);
-
-
// 4.构建分类器,利用70%数据进行训练.30%数据进行测试
-
// 构建随机森林Random Forest
-
var classifer = pie.Classifier.rTrees().train(
-
trainPartition,
-
"landcover",
-
bands
-
);
-
-
// 5.进行分类
-
var class_image1 = image.classify(classifer);
-
-
// 分类后处理:平滑影像,进行开闭运算剔除噪声影响.
-
var class_image2 = class_image1.focal_min(2).focal_max(2);
-
// var kernel= pie.Kernel().mean(3)
-
// class_image2 = class_image1.convolve(kernel)
-
-
// 分类结果显示. 蓝色为耕地,绿色为林地,黄色为园地,紫色为其他.
-
var visParam = {
-
opacity: 1,
-
uniqueValue: "0,1,2,3",
-
palette: "#4169E1,#7CFC00,#FFD700,#FF00FF",
-
};
-
//加载分类结果
-
Map.addLayer(class_image1, visParam, "class_image1");
-
//加载分类后处理结果
-
Map.addLayer(class_image2, visParam, "class_image2");
-
-
//6.精度验证
-
var matrix = classifer.confusionMatrix();
-
print("matrix", matrix);
-
// 评估训练样本的精度.
-
var checkM = classifer.confusionMatrix();
-
print("训练矩阵-ACC系数:", checkM.acc());
-
print("训练矩阵-Kappa系数:", checkM.kappa());
-
-
// 评估验证样本的精度.
-
var predictResult = testPartition.classify(classifer, "classification");
-
var errorM = predictResult.errorMatrix("landcover", "classification");
-
print("验证矩阵-ACC系数:", errorM.acc());
-
print("验证矩阵-Kappa系数:", errorM.kappa());
-
-
// 7.添加图例
-
var data = {
-
title: "图例",
-
colors: ["#4169E1", "#7CFC00", "#FFD700", "#FF00FF"],
-
labels: ["耕地", "林地", "园地", "其他"],
-
step: 1, // 将每个单位色块均分为30个
-
isvertical: true,
-
};
-
-
var style = {
-
right: "140px", // 图例框的右侧与屏幕最右端的距离
-
bottom: "10px", // 图例框的底侧与屏幕底端的距离
-
height: "150px", // 图例框的纵向高度
-
width: "90px", // 图例框的横向长度
-
};
-
-
var legend = ui.Legend(data, style);
-
Map.addUI(legend);
-
-
//导出影像
-
Export.image({
-
image: class_image2,
-
description: "Classified_Image_by_filter",
-
region: anguo,
-
scale: 10,
-
});
返回值:Number
训练精度结果:
这里大家需要注意的是,因为在这里并没有进行影像的计算,而是直接从云端调用已经裁剪和设定好的影像,所以这里并不能更换研究区,如果想要进行研究区的更换,需要自己重写sentinel影像以及NDVI的计算。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfikkge
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01