0

我希望使用灰度共生矩阵 (GLCM) 在 Google 地球引擎 (GEE) 中提取一组 RGB 卫星图像纹理的摘要统计信息。GEE 有一个内置的 image.glcm() 函数来执行此操作,但是此页面 ( https://developers.google.com/earth-engine/image_texture ) 中的示例代码表明它需要单个波段作为输入:

// Load a high-resolution NAIP image.
var image = ee.Image('USDA/NAIP/DOQQ/m_3712213_sw_10_1_20140613');

// Get the NIR band.
var nir = image.select('N');

// Compute the gray-level co-occurrence matrix (GLCM), get contrast.
var glcm = nir.glcmTexture({size: 4});
var contrast = glcm.select('N_contrast');
Map.addLayer(contrast,
             {min: 0, max: 1500, palette: ['0000CC', 'CC0000']},
             'contrast');

有没有办法在 GEE 中将 RGB 图像转换为单波段灰度图像?

我正在使用 Python API,因此 Python 中的答案将是理想的,但任何建议将不胜感激!

4

1 回答 1

0

好的,我想出了一个方法。本文 ( https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3254613/ ) 评估了不同 RGB 到灰度转换的性能,发现 Luminance 在纹理识别方面表现特别好,在对象检测和GLCM 分析也是一个不错的选择。亮度计算为0.3R + 0.59G + 0.11B

我在这里整理了一些 Python 代码来创建一个 Luminance 层:

image = ee.Image("COPERNICUS/S2/20160620T072622_20160620T075216_T36LYJ")

grayscale = image.expression(
      '(0.3 * R) + (0.59 * G) + (0.11 * B)', {
      'R': image.select(['B4']),
      'G': image.select(['B3']),
      'B': image.select(['B2'])
})

这是一个同样适用于 GEE 代码编辑器的 Java 示例:

var image = ee.Image("COPERNICUS/S2/20160620T072622_20160620T075216_T36LYJ");

var grayscale = image.expression(
      '(0.3 * R) + (0.59 * G) + (0.11 * B)', {
      'R': image.select('B4'),
      'G': image.select('B3'),
      'B': image.select('B2')
});

Map.setCenter(35.524263, -14.955732, 9);
Map.addLayer(grayscale, {min:700, max:1300}, 'Grayscale');
于 2019-08-24T11:33:08.910 回答