3、遥感数据获取:数据源介绍、检索下载与预处理

各位同学,大家好。今天我们来聊聊遥感数据获取这个环节。说实话,很多刚入行的朋友觉得这步就是“点几下鼠标下载”,其实不然。我做了这么多年遥感应用,见过太多项目因为数据源选错、预处理没做好,后面分析全白费的情况。所以这一章,咱们把数据获取的来龙去脉讲透。

3.1 主流数据源介绍

先说说数据从哪来。目前全球主流的遥感数据源,我习惯分成三大阵营:美国的、欧洲的,还有咱们国内的。每个阵营都有自己的看家本领。

3.1.1 USGS(美国地质调查局)

USGS 的 Landsat 系列,可以说是遥感界的“老大哥”了。从 1972 年到现在,连续观测了 50 多年。我个人最常用的是 Landsat 8 和 Landsat 9,30 米分辨率,覆盖全球,免费开放。你想想看,做长时序分析,比如城市扩张、植被变化,Landsat 几乎是唯一的选择。

小提示: USGS 的 EarthExplorer 平台,数据检索功能非常强大。我建议你注册一个账号,把常用的研究区域存成“多边形”,下次直接调出来用,省事。

3.1.2 ESA(欧洲空间局)

ESA 的 Sentinel 系列,尤其是 Sentinel-2,这几年风头很劲。10 米分辨率,重访周期 5 天,比 Landsat 更勤快。我记得有一次做农业监测,需要看作物生长季内的快速变化,Landsat 16 天一景根本不够用,换成 Sentinel-2 就好多了。

ESA 还有一个 Copernicus Open Access Hub,下载速度有时候不太稳定。嗯,这里要注意,如果你要批量下载,建议用 Python 的 sentinelhub 库,能省不少时间。

3.1.3 国内平台

咱们国内的高分系列(GF-1、GF-2、GF-6 等),这几年进步很快。GF-2 能做到亚米级分辨率,做城市精细分类非常合适。不过国内平台的下载流程稍微复杂一些,有的需要申请、审核。我曾经为了拿一景 GF-2 数据,等了整整两周。所以如果你项目时间紧,建议提前规划。

另外,像资源三号(ZY-3)做立体测图很厉害,环境系列(HJ-1A/B)做环境监测也不错。国内平台的数据政策在逐步开放,这是个好趋势。

数据源 典型卫星 分辨率 重访周期 获取方式
USGS Landsat 8/9 30m 16天 免费,EarthExplorer
ESA Sentinel-2 10m 5天 免费,Copernicus Hub
国内 GF-2、ZY-3 0.8m~2m 按需 申请审核

3.2 数据检索与下载

数据源选好了,接下来就是怎么找到并下载你需要的数据。说白了,就是“大海捞针”的技术活。

3.2.1 检索技巧

我个人的习惯是,先确定三个要素:时间范围空间范围云量阈值。比如做植被分析,我一般选生长季内的数据,云量控制在 10% 以下。你想想看,如果一景影像一半都是云,那后面的分析基本没法做。

USGS 的 EarthExplorer 支持按经纬度、按行政区划、按矢量文件检索。ESA 的 Copernicus Hub 也类似。国内平台,比如中国资源卫星应用中心,检索界面稍微复杂点,但功能是够的。

避坑指南: 我曾经因为没注意“云量”这个参数,下载了十几景全是云的影像,白白浪费了三天时间。后来我学乖了,检索时一定把云量阈值设好,比如 <10%。另外,有些平台显示的云量是“整景云量”,实际局部可能更差,最好预览一下。

3.2.2 下载方式

小批量数据,直接网页下载就行。大批量数据,我建议用 API 或脚本。比如 USGS 的 landsatxplore 库,ESA 的 sentinelhub 库,都能实现自动化下载。下面给个简单的 Python 示例:

# 使用 landsatxplore 下载 Landsat 数据
from landsatxplore.api import API
from landsatxplore.earthexplorer import EarthExplorer

# 初始化 API
api = API('your_username', 'your_password')

# 检索数据
scenes = api.search(
    dataset='landsat_ot_c2_l2',
    latitude=40.0,
    longitude=116.0,
    start_date='2023-06-01',
    end_date='2023-09-30',
    max_cloud_cover=10
)

print(f"找到 {len(scenes)} 景影像")

# 下载第一景
ee = EarthExplorer('your_username', 'your_password')
ee.download(scenes[0]['entity_id'], output_dir='./data')

这段代码,说白了就是帮你自动检索并下载。我建议你把账号信息存成环境变量,别硬编码在代码里,安全第一。

3.3 数据预处理流程

数据下载下来,还不能直接用。原始数据是“生肉”,预处理就是“烹饪”。预处理做不好,后面分析全是错的。我见过太多人直接拿原始 DN 值做分类,结果一塌糊涂。

3.3.1 辐射定标

辐射定标,就是把传感器记录的 DN 值(数字量化值)转换成物理量,比如辐射亮度或反射率。为什么要做?因为 DN 值受传感器增益、偏移等影响,不同时间、不同传感器之间没法直接比较。

Landsat 8 的辐射定标公式很简单:

Lλ = ML * Qcal + AL

其中 是辐射亮度,ML 是增益系数,AL 是偏移系数,Qcal 就是 DN 值。这些系数都在元数据文件(MTL.txt)里。

在 ENVI 里,直接用 Radiometric Calibration 工具就行。我个人习惯用 Python 的 rasterio 库手动处理,更灵活:

import rasterio
import numpy as np

with rasterio.open('LC08_B4.TIF') as src:
    dn = src.read(1).astype(np.float32)
    # 假设元数据中增益=0.00002,偏移=-0.1
    radiance = dn * 0.00002 - 0.1

3.3.2 大气校正

大气校正,说白了就是去掉大气对信号的干扰。太阳光穿过大气、地面反射、再穿过大气到传感器,这中间大气会吸收、散射一部分能量。如果不校正,你看到的“绿色植被”可能比实际暗,或者偏蓝。

常用的方法有:

  • 6S 模型:物理模型,精度高,但参数多,操作复杂。
  • FLAASH:ENVI 里集成的大气校正模块,基于 MODTRAN,我用得最多。
  • QUAC:快速大气校正,不需要太多参数,适合快速处理。

我曾经在做一个荒漠化监测项目时,偷懒没做大气校正,结果植被指数 NDVI 值普遍偏低,跟地面实测数据对不上。后来老老实实做了 FLAASH 校正,结果才合理。所以,大气校正这步,千万别省。

核心要点: 大气校正后的反射率,才是真正的地表反射率。后续的植被指数、水体指数、土地分类,都应该基于校正后的数据。

3.3.3 几何校正

几何校正,就是解决“影像上的像素点对应地面哪个位置”的问题。原始影像可能有几何畸变,比如地形起伏引起的偏移、传感器姿态变化引起的扭曲。

几何校正分两种:

  • 粗校正:基于卫星轨道参数和传感器模型,一般数据商已经做了。
  • 精校正:基于地面控制点(GCP),把影像配准到精确的地理坐标上。

我建议,如果你做的是多时相分析,一定要做几何精校正。否则两期影像的同一个像素,可能对应地面不同的位置,变化检测结果全是噪声。

在 ENVI 里,用 Image Registration Workflow 可以自动找控制点。在 Python 里,可以用 rasterio 配合 GDALgdalwarp 工具:

# 使用 gdalwarp 进行几何校正
gdalwarp -t_srs EPSG:4326 -r cubic input.tif output.tif

这里 -t_srs 指定目标坐标系,-r cubic 是重采样方法。我一般用三次卷积,效果比最近邻好,但计算量也大一些。

3.4 本章知识体系

下面这张图,是我自己总结的数据获取与预处理流程,你一看就明白了:

遥感数据获取与预处理流程 数据源选择 USGS / ESA / 国内平台 检索与下载 时间/空间/云量 预处理 辐射定标 大气校正 几何校正 可用的地表反射率/坐标数据

这张图把整个流程串起来了:从数据源选择,到检索下载,再到三步预处理,最后得到可用的数据。你每次做项目,都可以拿这张图对照一下,看看自己走到哪一步了。

好了,这一章的内容就到这里。数据获取是遥感分析的基础,基础打牢了,后面的分析才能站得住脚。下一章我们会讲数据预处理的高级技巧,包括如何批量处理、如何选择重采样方法等。各位回去可以先把 USGS 的账号注册好,下载一景 Landsat 数据练练手。


专注资料整理