Google Earth Engine - 从 ImageCollection 导出 RGB 图像 Python API
Google Earth Engine - RGB image export from ImageCollection Python API
我在使用 Google Earth Engine python API 基于 ImageCollection 生成 RGB 图像时遇到了一些问题。
基本上,为了将 ImageCollection 转换为图像,我应用了中值缩减。减少后,我在需要定义不同变量(如最小值和最大值)的地方应用可视化函数。问题是这两个值取决于图像。
dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(ee.Geometry.Polygon([[39.05789266, 13.59051553],
[39.11335033, 13.59051553],
[39.11335033, 13.64477783],
[39.05789266, 13.64477783],
[39.05789266, 13.59051553]]))
.filterDate('2016-01-01', '2016-12-31')
.select(['B4', 'B3', 'B2'])
reduction = dataset.reduce('median')
.visualize(bands=['B4_median', 'B3_median', 'B2_median'],
min=0,
max=3000,
gamma=1)
因此,对于每个不同的图像,我需要处理这两个可以明显改变的值。由于我需要生成的图像数量巨大,手动完成是不可能的。我不知道如何克服这个问题,也找不到该问题的任何答案。一个想法是找到图像的最小值和最大值。但是我没有找到任何允许在 Javascript 或 python API 上执行此操作的函数。
希望有人能帮助我。
您可以使用 img.reduceRegion()
获取您想要的区域和每个要导出的图像的图像统计信息。您必须将区域缩减的结果调用到可视化函数中。这是一个例子:
geom = ee.Geometry.Polygon([[39.05789266, 13.59051553],
[39.11335033, 13.59051553],
[39.11335033, 13.64477783],
[39.05789266, 13.64477783],
[39.05789266, 13.59051553]])
dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')\
.filterBounds(geom)\
.filterDate('2016-01-01', '2016-12-31')\
.select(['B4', 'B3', 'B2'])
reduction = dataset.median()
stats = reduction.reduceRegion(reducer=ee.Reducer.minMax(),geometry=geom,scale=100,bestEffort=True)
statDict = stats.getInfo()
prettyImg = reduction.visualize(bands=['B4', 'B3', 'B2'],
min=[statDict['B4_min'],statDict['B3_min'],statDict['B2_min']]
max=[statDict['B4_max'],statDict['B3_max'],statDict['B2_max']],
gamma=1)
使用这种方法,我得到了这样的输出图像:
希望对您有所帮助!
我在使用 Google Earth Engine python API 基于 ImageCollection 生成 RGB 图像时遇到了一些问题。
基本上,为了将 ImageCollection 转换为图像,我应用了中值缩减。减少后,我在需要定义不同变量(如最小值和最大值)的地方应用可视化函数。问题是这两个值取决于图像。
dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')
.filterBounds(ee.Geometry.Polygon([[39.05789266, 13.59051553],
[39.11335033, 13.59051553],
[39.11335033, 13.64477783],
[39.05789266, 13.64477783],
[39.05789266, 13.59051553]]))
.filterDate('2016-01-01', '2016-12-31')
.select(['B4', 'B3', 'B2'])
reduction = dataset.reduce('median')
.visualize(bands=['B4_median', 'B3_median', 'B2_median'],
min=0,
max=3000,
gamma=1)
因此,对于每个不同的图像,我需要处理这两个可以明显改变的值。由于我需要生成的图像数量巨大,手动完成是不可能的。我不知道如何克服这个问题,也找不到该问题的任何答案。一个想法是找到图像的最小值和最大值。但是我没有找到任何允许在 Javascript 或 python API 上执行此操作的函数。
希望有人能帮助我。
您可以使用 img.reduceRegion()
获取您想要的区域和每个要导出的图像的图像统计信息。您必须将区域缩减的结果调用到可视化函数中。这是一个例子:
geom = ee.Geometry.Polygon([[39.05789266, 13.59051553],
[39.11335033, 13.59051553],
[39.11335033, 13.64477783],
[39.05789266, 13.64477783],
[39.05789266, 13.59051553]])
dataset = ee.ImageCollection('LANDSAT/LC08/C01/T1_SR')\
.filterBounds(geom)\
.filterDate('2016-01-01', '2016-12-31')\
.select(['B4', 'B3', 'B2'])
reduction = dataset.median()
stats = reduction.reduceRegion(reducer=ee.Reducer.minMax(),geometry=geom,scale=100,bestEffort=True)
statDict = stats.getInfo()
prettyImg = reduction.visualize(bands=['B4', 'B3', 'B2'],
min=[statDict['B4_min'],statDict['B3_min'],statDict['B2_min']]
max=[statDict['B4_max'],statDict['B3_max'],statDict['B2_max']],
gamma=1)
使用这种方法,我得到了这样的输出图像:
希望对您有所帮助!