Google Earth Engine(GEE)——LandCoverNet训练标签 v1.0

2024-02-02 14:24:03 浏览数 (2)

LandCoverNet训练标签 v1.0 LandCoverNet是一个全球年度土地覆被分类训练数据集,带有2018年Sentinel-1、Sentinel-2和Landsat-8任务的多光谱卫星图像的标签。LandCoverNet中的图像芯片为256 x 256像素,横跨多个瓦片。每个图像芯片包含来自以下卫星产品的时间观测数据,并带有年度等级标签,全部以栅格格式(GeoTIFF文件)存储。

哨兵-1号地面测距产品(GRD),具有10米空间分辨率的辐射校准和正演功能 哨兵2号表面反射率产品(L2A),10米空间分辨率 Landsat-8的表面反射率产品,来自Collection 2 Level-2 辐射地球基金会在Schmidt Futures的资助下设计并生成了这个数据集,NASA ACCESS、微软AI for Earth提供了额外支持,Sinergise提供了实物技术支持。

这个数据集最强大的特点之一是共识标签,每个图像芯片都由三个独立的用户进行验证。每个用户的准确性是通过使用由辐射地球团队的专家单独标记的芯片来评估的。为了生成每个像素的共识标签,考虑到每个用户的准确性,采用了贝叶斯模型平均法。产生的标签伴随着0到100之间的 "共识分数",表示三个用户之间的一致程度。这就形成了数据集的b2,而b1是等级值。

你可以在这里阅读详细的方法样本,

https://radiantearth.blob.core.windows.net/mlhub/landcovernet_af/Documentation.pdf

你可以到这里的样本数据集页面。

LandCoverNet Africa

你可以在这里阅读论文中的方法

https://arxiv.org/abs/2012.03111

关于这个的教程可以在这里进一步访问

https://nbviewer.org/github/radiantearth/mlhub-tutorials/blob/main/notebooks/radiant-mlhub-landcovernet.ipynb

免责声明:数据集的全部或部分描述是由作者或其作品提供的。

参考文献

Alemohammad, Hamed, and Kevin Booth. "LandCoverNet: A global benchmark land cover classification training dataset."arXiv preprint arXiv:2012.03111 (2020). 数据引用:

Alemohammad S.H., Ballantyne A., Bromberg Gaber Y., Booth K., Nakanuku-Diggs L., & Miglarese A.H. (2020) "LandCoverNet Africa: A Geographically Diverse Land Cover Classification Training Dataset", Version 1.0, Radiant MLHub. [Date Accessed] https://doi.org/10.34911/rdnt.d2ce8i

数据结构和预处理 数据集以光栅芯片的形式提供,分辨率为256 x 256像素,意味着总共有65,536个像素。每个地区的总体数据集分布情况总结如下

Abbreviation

Image Chip Count

Ref ID

Region

Proportion Global

AU

600

ref_landcovernet_au_v1_labels

Australia

6.72

AS

2753

ref_landcovernet_as_v1_labels

Asia

30.81

AF

1980

ref_landcovernet_af_v1_labels

Africa

22.16

EU

840

ref_landcovernet_eu_v1_labels

Europe

9.4

NA

1561

ref_landcovernet_na_v1_labels

North America

17.47

SA

1200

ref_landcovernet_sa_v1_labels

South America

13.43

这些数据集确实由STAC表示,虽然命令行工具是访问这些数据的方式,但我写了一些自定义脚本,用于解析STAC元数据中的属性,以及下载光栅对象和源图像CSVs,作为谷歌地球引擎的assset级属性使用。

保留的元数据包括日期,用于开始和结束日期。

额外的元数据字段a 区别类。每个瓦片的STAC元数据中都有一个类别计数,在这种情况下,我们用一个简单的计数来估计有多少不同的类别可用于芯片,以及这可能对你的整体训练有什么影响。 system:index/id_no是图像中保留的瓦片的名称,没有经过修改。 source_imagery_start/end。使用源图像CSV文件选择源图像的开始和结束日期,对每个芯片的日期进行排序,并添加到允许创建一个时间过滤器。 source_imagery_datelist:这是完整的源图像日期列表,你可以使用该列表来识别和选择S2图像的特定日期,从那些日子里进行分析或比较。

代码:

代码语言:javascript复制
var au = ee.ImageCollection("projects/sat-io/open-datasets/LandCoverNet/LABELS/ref_landcovernet_au_v1_labels");
var af = ee.ImageCollection("projects/sat-io/open-datasets/LandCoverNet/LABELS/ref_landcovernet_af_v1_labels");
var as = ee.ImageCollection("projects/sat-io/open-datasets/LandCoverNet/LABELS/ref_landcovernet_as_v1_labels");
var eu = ee.ImageCollection("projects/sat-io/open-datasets/LandCoverNet/LABELS/ref_landcovernet_eu_v1_labels");
var na = ee.ImageCollection("projects/sat-io/open-datasets/LandCoverNet/LABELS/ref_landcovernet_na_v1_labels");
var sa = ee.ImageCollection("projects/sat-io/open-datasets/LandCoverNet/LABELS/ref_landcovernet_sa_v1_labels");


print(af.aggregate_histogram('source_imagery_start'))

//Add a multiclass chip
var image = na.filter(ee.Filter.gte('distinct_classes',7)).first()
image = image.updateMask(image.gt(0)).select('b1')
Map.centerObject(image)

// var img = ee.Image('projects/earthengine-legacy/assets/projects/sat-io/open-datasets/LandCoverNet/LABELS/au/51JXH_01_2018_LC_10m')
// print(img)
// var image = au.first()
// print(au)

print(image)
print(ee.Date.parse("YYYYMMDD",ee.String(ee.List(ee.String(image.get('source_imagery_datelist')).split(',')).sort().get(0)).trim()))
//print(ee.List(ee.String(image.get('datelist')).split(',')).get(20))
// print(ee.Date.parse("YYYYMMDD",ee.String(ee.List(ee.String(image.get('datelist')).split(',')).get(20))))
// print(ee.Date.parse(ee.List(ee.String(image.get('datelist')).split(',')).sort().get(20)))
// var img =ee.Image('projects/sat-io/open-datasets/LandCoverNet/LABELS/ref_landcovernet_au_v1_labels/59GLL_12_2018_LC_10m')
// print(img)

// Define a dictionary which will be used to make legend and visualize image on map
var dict = {
  "names": [
    "Water (Permanent)",//1
    "Artificial",//2
    "Natural",//3
    "Snow/Ice (Permanent)",//4
    "Woody",//5
    "Cultivated",//6
    "(Semi) Natural",//7
  ],
  "colors": [
    "#0000ff",
    "#888888",
    "#d1a46d",
    "#f5f5ff",
    "#d64c2b",
    "#186818",
    "#00ff00"
  ]};

// Create a panel to hold the legend widget
var legend = ui.Panel({
  style: {
    position: 'bottom-left',
    padding: '8px 15px'
  }
});

// Function to generate the legend
function addCategoricalLegend(panel, dict, title) {
  
  // Create and add the legend title.
  var legendTitle = ui.Label({
    value: title,
    style: {
      fontWeight: 'bold',
      fontSize: '18px',
      margin: '0 0 4px 0',
      padding: '0'
    }
  });
  panel.add(legendTitle);
  
  var loading = ui.Label('Loading legend...', {margin: '2px 0 4px 0'});
  panel.add(loading);
  
  // Creates and styles 1 row of the legend.
  var makeRow = function(color, name) {
    // Create the label that is actually the colored box.
    var colorBox = ui.Label({
      style: {
        backgroundColor: color,
        // Use padding to give the box height and width.
        padding: '8px',
        margin: '0 0 4px 0'
      }
    });
  
    // Create the label filled with the description text.
    var description = ui.Label({
      value: name,
      style: {margin: '0 0 4px 6px'}
    });
  
    return ui.Panel({
      widgets: [colorBox, description],
      layout: ui.Panel.Layout.Flow('horizontal')
    });
  };
  
  // Get the list of palette colors and class names from the image.
  var palette = dict['colors'];
  var names = dict['names'];
  loading.style().set('shown', false);
  
  for (var i = 1; i < names.length; i  ) {
    panel.add(makeRow(palette[i], names[i]));
  }
  
  Map.add(panel);
  
}


/*
  // Display map and legend ///
*/

// Add the legend to the map
addCategoricalLegend(legend, dict, 'Land cover');

// Add LC image to the map
Map.addLayer(image, {min:1, max:7, palette:dict['colors']}, 'LandCoverNet v1.0 NA')

//Map.centerObject(collection.first(),8)

License¶

The dataset is released under (CC BY 4.0) license. You can find license summary here

Produced by: Radiant Earth Foundation

Curated in GEE by: Samapriya Roy

Keywords: Land Use, Land Cover, Remote Sensing, landsat-8, sentinel-1, sentinel-2, segmentation

Last updated on GEE: 2022-07-17

0 人点赞