3、遥感数据获取:数据源介绍、检索下载与预处理
各位同学,大家好。今天我们来聊聊遥感数据获取这个环节。说实话,很多刚入行的朋友觉得这步就是“点几下鼠标下载”,其实不然。我做了这么多年遥感应用,见过太多项目因为数据源选错、预处理没做好,后面分析全白费的情况。所以这一章,咱们把数据获取的来龙去脉讲透。
3.1 主流数据源介绍
先说说数据从哪来。目前全球主流的遥感数据源,我习惯分成三大阵营:美国的、欧洲的,还有咱们国内的。每个阵营都有自己的看家本领。
3.1.1 USGS(美国地质调查局)
USGS 的 Landsat 系列,可以说是遥感界的“老大哥”了。从 1972 年到现在,连续观测了 50 多年。我个人最常用的是 Landsat 8 和 Landsat 9,30 米分辨率,覆盖全球,免费开放。你想想看,做长时序分析,比如城市扩张、植被变化,Landsat 几乎是唯一的选择。
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 也类似。国内平台,比如中国资源卫星应用中心,检索界面稍微复杂点,但功能是够的。
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
其中 Lλ 是辐射亮度,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 配合 GDAL 的 gdalwarp 工具:
# 使用 gdalwarp 进行几何校正
gdalwarp -t_srs EPSG:4326 -r cubic input.tif output.tif
这里 -t_srs 指定目标坐标系,-r cubic 是重采样方法。我一般用三次卷积,效果比最近邻好,但计算量也大一些。
3.4 本章知识体系
下面这张图,是我自己总结的数据获取与预处理流程,你一看就明白了:
这张图把整个流程串起来了:从数据源选择,到检索下载,再到三步预处理,最后得到可用的数据。你每次做项目,都可以拿这张图对照一下,看看自己走到哪一步了。
好了,这一章的内容就到这里。数据获取是遥感分析的基础,基础打牢了,后面的分析才能站得住脚。下一章我们会讲数据预处理的高级技巧,包括如何批量处理、如何选择重采样方法等。各位回去可以先把 USGS 的账号注册好,下载一景 Landsat 数据练练手。