【问题标题】:Exporting image array to TFRecord in Google Earth Engine在 Google 地球引擎中将图像数组导出到 TFRecord
【发布时间】:2019-06-22 06:27:09
【问题描述】:

我想将 3 个 Landsat 图像(每个 12 个波段)的集合转换为单个图像阵列,然后以 TFRecord 格式导出。我使用了下面的代码。我的输入集合名为imagesimageT 是累积的图像,从最后丢弃的零带开始。最终imageOfSeries 图像的每个像素都包含一个大小为 3x12 的矩阵:

var imageT = ee.Image(0)
images = images.map(function(image){
  return image.toArray();
})   
var accumulate = function(image, imageT) {
  return(ee.Image(imageT).addBands(image)) 
};
var imageOfSeries = ee.Image(images.iterate(accumulate, imageT))
                             .slice(1).toArray(1).matrixTranspose()        
Export.image.toDrive({
  image: imageOfSeries,
  description: 'imageOfSeriesExample',
  scale: 30,
  region: geometry,
  fileFormat: 'TFRecord',
  formatOptions: {
    patchDimensions: [10,10],
    tensorDepths: [3,12]
  }
});

但是 GEE 在运行导出任务时返回错误并说Arrays must have dimensions = 1。 我怎样才能完成我的任务?在这种情况下,我还需要有关如何解码 TFRecord 文件的更多信息,我在 GEE 教程中找不到任何示例。

【问题讨论】:

    标签: export google-earth-engine


    【解决方案1】:

    要执行您想要的操作,您需要展平矩阵以进行导出:导出到 TFRecord 仅支持一维数组(如错误所指出的那样)。目前 EE 不支持直接数组展平,并且希望每个展平的数组元素都有标签。

    张量深度也需要数组波段的一维长度。

    假设您的图像只有一个数组波段,这应该可以工作(详细说明):

    var imageT = ee.Image(0)
    images = images.map(function(image){
      return image.toArray();
    })   
    var accumulate = function(image, imageT) {
      return(ee.Image(imageT).addBands(image)) 
    };
    var imageOfSeries = ee.Image(images.iterate(accumulate, imageT))
                                 .slice(1).toArray(1).matrixTranspose()  
    
    imageOfSeriesFlattened = imageOfSeries
        .arrayFlatten([
            ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'],
            ['13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24'],
            ['25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36']])
        .toArray();  
    
    Export.image.toDrive({
      image: imageOfSeriesFlattened,
      description: 'imageOfSeriesExample',
      scale: 30,
      region: geometry,
      fileFormat: 'TFRecord',
      formatOptions: {
        patchDimensions: [10,10],
        tensorDepths: [36]
      }
    });
    

    【讨论】:

    • 感谢您的回复。是的,我设法通过将所有内容制作为 1D 来做到这一点,但我不认为这是一个限制......
    猜你喜欢
    • 2017-10-07
    • 1970-01-01
    • 2022-06-21
    • 2018-02-22
    • 2023-04-03
    • 2019-05-21
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多