• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

PIE-engine 教程 ——随机森林监督分类案例河北安国市为例

武飞扬头像
此星光明
帮助1

本次举一个简答的案例,通过对一个县级市进行监督分类采样,然后进行耕地、林地、园地和其它的划分,除此之外,我们还需要掌握随机样本点的采集,混淆矩阵以及精度计算等问题。首先我们看一下随机样本点的选取函数:

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)

混合矩阵对象

代码:

  1.  
    /**
  2.  
    * @File : 安国市耕林园地随机森林监督分类
  3.  
    * @Time : 2022/3/1
  4.  
    * @Author : piesat
  5.  
    * @Version : 1.0
  6.  
    * @Contact : 400-890-0662
  7.  
    * @License : (C)Copyright 航天宏图信息技术股份有限公司
  8.  
    * @Desc : 安国市耕林园地随机森林监督分类
  9.  
    */
  10.  
    var imageCollection0 = pie.ImageCollection("GF2/L1A/Fusion");
  11.  
    var featureCollection0 = pie.FeatureCollection("NGCC/CHINA_COUNTY_BOUNDARY");
  12.  
    var imageCollection0 = pie.ImageCollection("NGCC/GLOBELAND30");
  13.  
    // 耕、林、园地分类
  14.  
    // 1.加载研究区-安国市行政边界
  15.  
    var anguo = pie
  16.  
    .FeatureCollection("NGCC/CHINA_COUNTY_BOUNDARY")
  17.  
    .filter(pie.Filter.eq("name", "安国市"))
  18.  
    .first()
  19.  
    .geometry();
  20.  
    Map.centerObject(anguo, 10);
  21.  
     
  22.  
    Map.addLayer(anguo, { color: "red", fillColor: "00000000", width: 2 }, "anguo");
  23.  
     
  24.  
    // 2.加载栅格影像
  25.  
    // 数据说明:image为保存于云端、计算好的sentinel合成的NDVI多时序波段数据.
  26.  
    //images_Anguo_City数据中B1、B2、B3为Sentinel的三个波段,B4-B11计算好的sentinel合成的NDVI多时序波段数据
  27.  
    var bands = ["B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11"];
  28.  
    var image = pie
  29.  
    .Image("user/pieadmin/public/Raster/images_Anguo_City")
  30.  
    .select(bands)
  31.  
    .multiply(10000);
  32.  
    print("img", image);
  33.  
     
  34.  
    // 加载显示一个波段2020.7.6_NDVI
  35.  
    var image0 = pie.Image("user/pieadmin/public/Raster/images_Anguo_City");
  36.  
    Map.addLayer(image0.select("B4"), { min: -1, max: 1 }, "2020.7.6_NDVI", false);
  37.  
     
  38.  
    // Sentinel2数据显示
  39.  
    var image_vis = pie
  40.  
    .Image("user/pieadmin/public/Raster/images_Anguo_City")
  41.  
    .select(["B1", "B2", "B3"]);
  42.  
    var visParam = { min: 0, max: 3000, bands: ["B1", "B2", "B3"] };
  43.  
    Map.addLayer(
  44.  
    image_vis.select(["B1", "B2", "B3"]),
  45.  
    visParam,
  46.  
    "Sentinel2_image",
  47.  
    false
  48.  
    );
  49.  
     
  50.  
    // 3.point为样本点,0为耕地,1为林地,2为园地,3为其他地物.
  51.  
    var point = pie.FeatureCollection(
  52.  
    "user/pieadmin/public/shape/Training_Points_Anguo_City"
  53.  
    );
  54.  
    Map.addLayer(point, { color: "Red" }, "points");
  55.  
    // print(point)
  56.  
     
  57.  
    // 获取训练样本
  58.  
    var training = image.sampleRegions(point, ["landcover"], 10, "", "", true);
  59.  
    // Map.addLayer(training, {color: "FAFAD2"}, "trainingpoints");
  60.  
     
  61.  
    var withRandom = pie.FeatureCollection("user/HaorenWang/withRandom");
  62.  
    var trainPartition = withRandom.filter(pie.Filter.lte("random", 0.7));
  63.  
    var testPartition = withRandom.filter(pie.Filter.gt("random", 0.7));
  64.  
    Map.addLayer(trainPartition, { color: "red" }, "training");
  65.  
    Map.addLayer(testPartition, { color: "blue" }, "validation");
  66.  
    print("withRandom", withRandom);
  67.  
    print("training", trainPartition);
  68.  
    print("validation", testPartition);
  69.  
     
  70.  
    // 4.构建分类器,利用70%数据进行训练.30%数据进行测试
  71.  
    // 构建随机森林Random Forest
  72.  
    var classifer = pie.Classifier.rTrees().train(
  73.  
    trainPartition,
  74.  
    "landcover",
  75.  
    bands
  76.  
    );
  77.  
     
  78.  
    // 5.进行分类
  79.  
    var class_image1 = image.classify(classifer);
  80.  
     
  81.  
    // 分类后处理:平滑影像,进行开闭运算剔除噪声影响.
  82.  
    var class_image2 = class_image1.focal_min(2).focal_max(2);
  83.  
    // var kernel= pie.Kernel().mean(3)
  84.  
    // class_image2 = class_image1.convolve(kernel)
  85.  
     
  86.  
    // 分类结果显示. 蓝色为耕地,绿色为林地,黄色为园地,紫色为其他.
  87.  
    var visParam = {
  88.  
    opacity: 1,
  89.  
    uniqueValue: "0,1,2,3",
  90.  
    palette: "#4169E1,#7CFC00,#FFD700,#FF00FF",
  91.  
    };
  92.  
    //加载分类结果
  93.  
    Map.addLayer(class_image1, visParam, "class_image1");
  94.  
    //加载分类后处理结果
  95.  
    Map.addLayer(class_image2, visParam, "class_image2");
  96.  
     
  97.  
    //6.精度验证
  98.  
    var matrix = classifer.confusionMatrix();
  99.  
    print("matrix", matrix);
  100.  
    // 评估训练样本的精度.
  101.  
    var checkM = classifer.confusionMatrix();
  102.  
    print("训练矩阵-ACC系数:", checkM.acc());
  103.  
    print("训练矩阵-Kappa系数:", checkM.kappa());
  104.  
     
  105.  
    // 评估验证样本的精度.
  106.  
    var predictResult = testPartition.classify(classifer, "classification");
  107.  
    var errorM = predictResult.errorMatrix("landcover", "classification");
  108.  
    print("验证矩阵-ACC系数:", errorM.acc());
  109.  
    print("验证矩阵-Kappa系数:", errorM.kappa());
  110.  
     
  111.  
    // 7.添加图例
  112.  
    var data = {
  113.  
    title: "图例",
  114.  
    colors: ["#4169E1", "#7CFC00", "#FFD700", "#FF00FF"],
  115.  
    labels: ["耕地", "林地", "园地", "其他"],
  116.  
    step: 1, // 将每个单位色块均分为30个
  117.  
    isvertical: true,
  118.  
    };
  119.  
     
  120.  
    var style = {
  121.  
    right: "140px", // 图例框的右侧与屏幕最右端的距离
  122.  
    bottom: "10px", // 图例框的底侧与屏幕底端的距离
  123.  
    height: "150px", // 图例框的纵向高度
  124.  
    width: "90px", // 图例框的横向长度
  125.  
    };
  126.  
     
  127.  
    var legend = ui.Legend(data, style);
  128.  
    Map.addUI(legend);
  129.  
     
  130.  
    //导出影像
  131.  
    Export.image({
  132.  
    image: class_image2,
  133.  
    description: "Classified_Image_by_filter",
  134.  
    region: anguo,
  135.  
    scale: 10,
  136.  
    });

返回值:Number

学新通

 训练精度结果:

学新通

 这里大家需要注意的是,因为在这里并没有进行影像的计算,而是直接从云端调用已经裁剪和设定好的影像,所以这里并不能更换研究区,如果想要进行研究区的更换,需要自己重写sentinel影像以及NDVI的计算。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfikkge
系列文章
更多 icon
同类精品
更多 icon
继续加载