第二章 遥感数据获取:常见遥感数据源与预处理
各位同学,大家好。这一章我们来聊聊遥感数据获取。说白了,就是搞明白「去哪里拿数据」和「拿到数据后怎么处理」。我做了十几年遥感分析,见过太多人花大量时间在数据下载和预处理上,结果真正分析的时间反而被压缩了。所以这一章,我会把经验直接告诉你。
2.1 常见遥感数据源:三大主力
目前做城市扩张分析,最常用的就是三个数据源:Landsat、Sentinel 和 MODIS。它们各有各的脾气,我一个个说。
2.1.1 Landsat 系列(美国地质调查局 USGS)
Landsat 是我个人最常用的数据源。从 1972 年到现在,连续观测了 50 多年。你想想看,要做城市扩张的时间序列分析,没有比它更合适的了。
- 空间分辨率:30 米(多光谱),15 米(全色波段)
- 时间分辨率:16 天重访周期
- 常用传感器:Landsat 5 TM、Landsat 7 ETM+、Landsat 8 OLI、Landsat 9 OLI-2
- 波段数:7-11 个波段(视传感器而定)
重要提示:Landsat 7 的 ETM+ 传感器在 2003 年 5 月出现了扫描线校正器故障,导致图像出现条带。如果你要用 2003 年之后的数据,记得做条带修复。我当年第一次做城市扩张分析时,就踩过这个坑。
2.1.2 Sentinel 系列(欧洲航天局 ESA)
Sentinel-2 是近十年才火起来的。它的优势很明显:10 米空间分辨率,5 天重访周期。对于城市扩张这种需要精细边界提取的任务,Sentinel-2 比 Landsat 更合适。
- 空间分辨率:10 米(可见光/近红外),20 米(红边/短波红外),60 米(大气校正波段)
- 时间分辨率:5 天(双星组网)
- 常用传感器:Sentinel-2A、Sentinel-2B
- 波段数:13 个波段
我的经验:做城市扩张分析时,我建议优先用 Sentinel-2。10 米分辨率能看清道路、建筑轮廓,比 Landsat 的 30 米精细得多。但要注意,Sentinel-2 的数据量比 Landsat 大很多,处理起来更吃内存。
2.1.3 MODIS 系列(美国 NASA)
MODIS 是「大尺度、低分辨率」的代表。250 米到 1 公里的空间分辨率,每天覆盖全球一次。它不适合做精细的城市边界提取,但非常适合做城市热岛效应分析、植被覆盖度变化等大尺度研究。
- 空间分辨率:250 米(波段 1-2),500 米(波段 3-7),1 公里(其余波段)
- 时间分辨率:1-2 天
- 常用产品:MOD09GA(地表反射率)、MOD11A2(地表温度)、MCD12Q1(土地覆盖分类)
注意:MODIS 数据虽然时间分辨率高,但空间分辨率太低。如果你要做城市扩张的精细分析,MODIS 只能作为辅助数据,不能作为主数据源。我曾经见过有人用 MODIS 做城市边界提取,结果误差大到无法接受。
2.2 数据下载:去哪里拿?怎么拿?
数据源知道了,接下来就是下载。我整理了几个常用的下载平台,每个平台的特点我都标注了。
| 平台名称 | 数据源 | 特点 | 推荐指数 |
|---|---|---|---|
| USGS EarthExplorer | Landsat、MODIS | 数据最全,支持批量下载 | ★★★★★ |
| ESA Copernicus Open Access Hub | Sentinel | 官方平台,数据免费 | ★★★★★ |
| Google Earth Engine | Landsat、Sentinel、MODIS | 在线处理,无需下载 | ★★★★☆ |
| NASA LAADS DAAC | MODIS | MODIS 数据最全 | ★★★★☆ |
我个人习惯用 USGS EarthExplorer。为什么?因为它的筛选功能很强大,可以按云量、日期、传感器类型精确筛选。你想想看,如果下载了一堆云量超过 50% 的图像,那基本就是白费功夫。
2.3 数据预处理:从原始数据到可用数据
下载下来的数据,不能直接用。原始数据是 DN 值(数字量化值),需要经过一系列预处理才能用于变化检测。我按处理流程一步步说。
2.3.1 辐射定标
辐射定标,就是把 DN 值转换成辐射亮度值或表观反射率。说白了,就是把传感器记录的「原始数字」变成「物理量」。
# Python 示例:Landsat 8 辐射定标
import numpy as np
# 读取元数据中的定标参数
# 对于 Landsat 8 OLI,辐射定标公式:
# Lλ = ML * Qcal + AL
# 其中 ML 是增益,AL 是偏移,Qcal 是 DN 值
def radiometric_calibration(dn_image, ml, al):
"""
辐射定标函数
dn_image: 原始 DN 值图像
ml: 增益系数(从元数据读取)
al: 偏移系数(从元数据读取)
"""
radiance = ml * dn_image + al
return radiance
避坑指南:我曾经在项目中直接用 DN 值做 NDVI 计算,结果植被指数完全不对。后来才发现,必须先把 DN 值转成反射率。记住:DN 值不能直接用于任何定量分析。
2.3.2 大气校正
大气校正是预处理中最关键的一步。大气中的水汽、气溶胶会散射和吸收电磁辐射,导致图像模糊、对比度降低。不做大气校正,变化检测的结果会包含大量「伪变化」。
常用的方法有:
- FLAASH:基于 MODTRAN 辐射传输模型,精度高,但参数设置复杂
- 6S:也是基于辐射传输模型,适合科研使用
- DOS(暗目标法):简单快速,适合快速处理
- Sen2Cor:专门用于 Sentinel-2 的大气校正,ESA 官方工具
我个人建议:如果做高精度变化检测,用 FLAASH 或 6S。如果只是做快速分析,DOS 也够用。但千万别跳过大气校正这一步。
2.3.3 几何校正
几何校正,就是把图像「对齐」到真实的地理坐标上。Landsat 和 Sentinel 的 L1 级产品已经做过系统几何校正,但如果你用的是历史数据,或者不同时相的数据之间需要精确配准,那就要做几何精校正。
# 使用 GDAL 进行几何校正的伪代码
from osgeo import gdal
# 读取原始图像
dataset = gdal.Open('input_image.tif')
# 设置输出投影(例如 WGS84 UTM 50N)
output_projection = 'EPSG:32650'
# 执行几何校正
gdal.Warp('output_image.tif', dataset,
dstSRS=output_projection,
resampleAlg='cubic')
注意:几何校正的精度直接影响变化检测的结果。如果两期影像的配准误差超过 0.5 个像素,那变化检测的结果基本不可信。我建议用地面控制点(GCP)做精校正,误差控制在 0.3 个像素以内。
2.3.4 图像裁剪与镶嵌
研究区通常不是整景图像,需要裁剪。如果研究区跨越多景图像,还需要镶嵌。
- 裁剪:用研究区的矢量边界(Shapefile)裁剪图像
- 镶嵌:将多景图像拼接成一幅,注意接边处的色调一致性
嗯,这里要注意:镶嵌时如果两景图像的色调差异很大,可以用直方图匹配来调整。我做过一个项目,研究区正好在 Landsat 条带重叠区,两景图像的亮度差异很大,不做直方图匹配的话,变化检测结果会出现明显的「条带伪变化」。
2.4 知识体系总览
我把这一章的核心逻辑画成了流程图,方便你理解数据获取与预处理的整体流程。
2.5 本章小结
这一章的内容,说白了就是三件事:选数据、下数据、处理数据。选数据要根据研究目的来,做精细分析用 Sentinel-2,做时间序列用 Landsat,做大尺度分析用 MODIS。下数据推荐 USGS EarthExplorer 和 ESA Copernicus。预处理一定要做辐射定标和大气校正,这是变化检测的基础。
我记得刚入行时,总觉得预处理很麻烦,想跳过。结果第一次做变化检测,发现两期影像的 NDVI 差异图全是噪声。后来老老实实做了大气校正,结果一下子就清晰了。所以,别偷懒,预处理做扎实了,后面的分析才能站得住脚。