You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Earth Engine如何将影像集合转换为像素值频率直方图

Google Colab 环境下 GEE 实现影像集区域像素频率直方图方案
  • 环境初始化
    先在Colab里完成GEE的依赖安装与账号授权,直接运行以下代码即可,初始化阶段替换成你自己的GEE项目ID。
# 安装Earth Engine依赖
!pip install earthengine-api -q
import ee
import pandas as pd
import matplotlib.pyplot as plt
from google.colab import auth

# 完成GEE账号授权
auth.authenticate_user()
# 初始化GEE环境
ee.Initialize(project='替换为你的GEE项目ID')
  • 研究区与影像集配置
    先划定要统计的目标区域,再加载对应时相、对应数据源的卫星影像集,提前做好去云、非作物区域掩膜等预处理,避免无关像素干扰统计结果。以下示例以作物生长季MODIS NDVI影像集、作物主产区为演示场景,可按需替换为自有研究区资产、Sentinel-2/Landsat等其他数据源。
# 定义研究区,可替换为上传到GEE资产的自有边界
roi = ee.FeatureCollection("TIGER/2018/States").filter(ee.Filter.eq('NAME','Illinois')).geometry()

# 影像集预处理函数:去云、裁剪研究区
def img_preprocess(img):
    qa = img.select('SummaryQA')
    valid_mask = qa.bitwiseAnd(3).eq(0) # 剔除非优质观测像素
    return img.updateMask(valid_mask).select('NDVI').clip(roi)

# 加载目标时段影像集
dataset = ee.ImageCollection('MODIS/061/MOD13Q1')\
            .filterDate('2020-06-01', '2020-09-30')\
            .map(img_preprocess)
  • 核心直方图统计
    直接调用GEE内置的直方图聚合reducer即可实现全量像素统计,不需要逐影像遍历统计再合并,能避免统计口径偏差。参数里的分箱数、数值范围、统计分辨率可根据复现的论文要求调整,记得调大maxPixels阈值避免大区域统计时报错。
# 配置直方图统计参数
hist_config = {
    'reducer': ee.Reducer.histogram(
        maxBuckets=256, # 直方图分箱数量,按需调整
        minBucketWidth=0.001 # 最小分箱宽度,避免数值过密导致分箱异常
    ),
    'geometry': roi,
    'scale': 250, # 与所用影像的原始空间分辨率保持一致
    'maxPixels': 1e13, # 调大像素数阈值,避免大区域统计超限
    'bestEffort': True
}

# 聚合统计区域内所有像素,拉取结果到本地
hist_result = dataset.reduce(**hist_config).getInfo()
  • 结果解析与导出
    返回的统计结果包含每个分箱的像素均值、对应像素计数,可直接转成结构化数据表,计算频率占比后用于后续机器学习模型的特征输入,也可以直接绘图核对分布形态。
# 提取目标波段的直方图结果
ndvi_hist = hist_result['NDVI']
hist_df = pd.DataFrame({
    'pixel_value': ndvi_hist['bucketMeans'],
    'pixel_count': ndvi_hist['histogram']
})
# 计算频率占比
hist_df['frequency'] = hist_df['pixel_count'] / hist_df['pixel_count'].sum()

# 可视化核对分布
plt.figure(figsize=(10,4))
plt.bar(hist_df['pixel_value'], hist_df['frequency'], width=0.01)
plt.xlabel('Pixel value')
plt.ylabel('Frequency')
plt.title('Regional pixel value frequency histogram')
plt.show()

# 导出结果为CSV,可直接下载到本地用于后续建模
hist_df.to_csv('pixel_histogram.csv', index=False)

踩坑提示:

  1. 统计前务必确认影像已经做过对应掩膜,作物产量预测场景下要提前剔除非耕地区域、云遮挡像素,否则直方图分布会和论文结果出现明显偏差
  2. scale参数要和使用的影像原始空间分辨率保持一致,不要随意设得更小,否则会通过插值生成大量无效重复像素,干扰统计结果
  3. 如果影像集包含多个波段,统计前用select()指定需要生成直方图的目标波段,减少不必要的计算开销
  4. 单区域像素量过大时保持bestEffort=True,GEE会自动调整采样逻辑避免任务超时

内容的提问来源于stack exchange,提问作者ddd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 02:03:50