ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

哨兵2号遥感影像处理全流程:从波段设计、指数计算到深度学习分类

哨兵2号遥感影像处理全流程:从波段设计、指数计算到深度学习分类 做遥感这些年哨兵2号Sentinel-2几乎成了我默认的第一数据源。它免费、公开、全球覆盖拥有13个波段双星配合下5天就能重访一次而且ESA官方直接发布经过大气校正的Level-2A地表反射率产品。可以说它把过去很多需要自己动手解决的技术门槛降到了很低的程度。但数据好拿不代表解析流程简单——从影像下载、预处理、波段组合到指数计算、传统算法分类再到深度学习模型训练每一步都有不少道道。这篇文章我按自己实际跑通项目时的顺序从步骤、算法到AI应用把这套全流程拆开细讲也附上我踩过的坑。无论你是遥感入门学生、GIS从业者还是从计算机视觉转来做遥感方向的AI工程师应该都能从这里找到直接能用的东西。1. 哨兵2号数据基础波段设计、分辨率与获取方式1.1 13个波段是怎么设计的哨兵2号搭载的是MSIMulti-Spectral Instrument多光谱成像仪它不像Landsat那样在宽波段上做中规中矩的观测而是把光谱切得更细尤其是红边区域的连续覆盖。这13个波段分别落在可见光、近红外和短波红外区间分辨率也分成三档10米波段有4个B2蓝、B3绿、B4红、B8近红外20米波段有6个B5/B6/B7红边、B8A窄近红外、B11/B12短波红外60米波段有3个B1气溶胶、B9水汽、B10卷云。这里最关键的设计点就是红边波段。B5约705nm、B6约740nm、B7约783nm这三个波段正好卡在植被光谱“红边”快速上升的位置对叶绿素含量、氮素胁迫、物候变化非常敏感。传统Landsat只有一两个宽波段很难精细刻画植被的生理状态而哨兵2号把这块补上了。农业遥感里经常用的红边NDVINDVIre就是靠B5/B6做出来的用在作物长势监测上比常规NDVI滞后性更小表现也好得多。另外哨兵2号是12bit辐射分辨率DN值范围0到4095相比Landsat的16bit虽然位数低一些但已经足够容纳高亮建筑物和阴影区域的反差。实际处理时你会发现它在云层、雪地和城市高反射区的细节比8bit数据好处理得多不容易出现白饱和一片的情况。1.2 Level-1C和Level-2A怎么选哨兵2号的数据产品级别日常最常用的是L1C和L2A。L1C是经过几何精校正的大气表观反射率产品像素值是SRTop of Atmosphere Reflectance单位反射率不是DN值。它没有做大气校正也就是说影像里面还混合了大气分子和气溶胶的散射影响直接拿去做定量分析比如算NDVI的绝对值、反演叶面积指数都会偏。L2A是经过大气校正的地表反射率产品ESA官方用Sen2Cor程序统一处理输出才是真正的地面反射率Bottom of Atmosphere ReflectanceBOA。L2A还附带一个Scene Classification LayerSCL把云、阴影、水体、雪等类别都标好了这对后续云掩膜处理特别方便。从2017年起L2A就已经全球范围内正式发布现在在Copernicus平台下载时默认选L2A基本不会错。我的建议是凡是做时序分析、定量反演、分类训练一律直接使用L2A把时间节省下来用在更值得分析的地方。只有你做大气校正方法研究、对比不同校正算法的场景下才需要回到L1C自己跑Sen2Cor。1.3 数据获取渠道对比获取哨兵2号影像的渠道很多我按自己的使用频率排个序Copernicus Data Space Ecosystem这是欧洲航天局的官方分发平台支持浏览器交互式选区和下载也提供API批量获取。数据全、延迟低、版本最新适合做正式项目。申请账号后可以通过Sentinel Hub、OData API等方式批量查询和下载。Google Earth EngineGEE如果不想操心下载、存储、预处理这些事GEE是最快的入口。里面可以直接调用COPERNICUS/S2_SR_HARMONIZED集合注意要选HARMONIZED版本它把L2A数据统一到了Landsat的坐标系避免了一些波段对齐偏差在云端做掩膜、指数计算、时序合成几分钟出一张全国范围的NDVI图都没问题。Microsoft Planetary Computer类似GEE的云平台STAC接口规范做得好适合做更开放的数据工程架构时使用。其他像AWS公开数据集、国内一些镜像站点也能获取但版本和时效性参差不齐。我个人更推荐把Copernicus或GEE作为主渠道。获取方式适合场景使用门槛备注官方Copernicus平台正式项目、离线分析需账号和数据下载经验数据最新最全GEE快速分析、大区域时序需会JavaScript/Python免下载、免存储Planetary Computer工程化处理和Stac流程需API基础可结合开源生态AWS公开数据桶批量下载原始L2A中适合熟悉云存储的人2. 预处理从原始影像到可分析数据的关键步骤2.1 辐射定标、大气校正与重采样很多人一开始容易忽略这步直接拿L1C像元值算植被指数结果发现数值范围一塌糊涂。遥感影像的记录值要经过一条链路才变成“物理量”传感器记录的DN值先做辐射定标转换成辐射亮度或反射率再经过大气校正把大气分子散射、水汽吸收、气溶胶影响去掉得到地表反射率。L2A其实已经把辐射定标和大气校正做完了这里就不重复讲原理但你需要知道它用的Sen2Cor是做什么的。Sen2Cor是基于查表法和辐射传输模型近似的大气校正器能同时输出地表反射率、气溶胶光学厚度AOT、水汽柱含量和SCL分类层。如果你拿到的是L1C跑一遍Sen2Cor就能得到L2A。重采样则是把不同分辨率的波段统一到同一个网格上。10米波段和20米波段空间分辨率不一致做波段融合或指数计算前必须重采样。一般做法是统一到10米使用双线性或三次卷积插值。千万别用最邻近插值去重采样20米波段到10米会让红边波段出现明显的块状感特别是在地物边缘。但反过来如果只是计算指数不要求空间细节也可以统一到20米能减少不少内存占用。2.2 云检测与掩膜处理云的干扰是光学遥感永远的痛。哨兵2号的L2A自带SCL波段里面把影像分成了11类包括0无数据、1饱和/缺陷、2暗部、3云影、4植被、5裸土、6水体、7低云、8中云、9高云、10雪、11云。尤其是3、7、8、9这几类做掩膜时可以直接置为无效。但SCL在高亮地表比如城市、盐碱地上偶尔会误判把房屋错分成云。这种情况下可以结合s2cloudless模型它是哥白尼计划开源的一个基于LightGBM的云检测器通过概率阈值判断每个像元是否为云效果通常比SCL更精细。我的做法是两者结合以SCL为主对疑似边界像元再用s2cloudless的概率值复核。如果做的是大范围时间序列分析更省心的是直接在GEE里用CLOUDY_PIXEL_PERCENTAGE元数据筛影像再叠加SCL掩膜最后用中位数或绿度最大值合成这样生成的影像基本干净。这里给一段常用的GEE预处理代码// GEE预处理示例加载哨兵2 L2A并计算NDVI var s2 ee.ImageCollection(COPERNICUS/S2_SR_HARMONIZED) .filterBounds(roi) .filterDate(2024-01-01, 2024-12-31) .filter(ee.Filter.lt(CLOUDY_PIXEL_PERCENTAGE, 20)) .map(function(img) { // 使用SCL波段生成云和阴影掩膜 var scl img.select(SCL); var cloudMask scl.gte(3).and(scl.lte(9)).not(); var ndvi img.normalizedDifference([B8, B4]).rename(NDVI); return img.updateMask(cloudMask).addBands(ndvi); }); var composite s2.median().clip(roi);注意HARMONIZED版本偶有负值像元通常是海岸或地形阴影导致的分析前裁剪到合理范围更稳妥。2.3 坐标与裁剪预处理里最容易被小看的是投影坐标系。哨兵2号L2A原始数据默认是UTM投影但不同分带之间拼接时坐标基准会不一致。做小范围分析直接用UTM没问题但跨带的大区域制图建议统一重投影到Albers等积投影或者国家平面坐标系再看你要做面积统计还是空间分析来选择。千万别在Web墨卡托EPSG:3857下直接算面积纬度越高偏差越大统计结果会明显偏大。裁剪时同时注意边界对齐如果和行政区划、地块矢量数据叠加保持原始坐标系一致可以减少很多不必要的麻烦。3. 波段组合与指数计算让影像“开口说话”3.1 常用波段组合的RGB通道设置我经常看到新手提问“怎么把哨兵2号弄成好看的彩色图”。其实不同的波段组合对应不同的信息表达调色板上RGB三个通道分别放哪个波段直接决定了你能看到什么。这里列几个我几乎每个项目都会用到的组合真彩色组合RB4GB3BB2。直观用于目视解译和报告展示但植被偏暗层次不够丰富。假彩色植被组合RB8GB4BB3。近红外放到红色通道植被呈现鲜红色农田和森林边界清晰是做植被制图时的首选。农业/短波红外组合RB11GB8BB2。短波红外对含水量和土壤背景敏感裸地和农田对比度高常用于干旱监测、土壤湿度分析。红边植被组合RB8GB5BB4。红边波段对叶绿素变化敏感能看出作物早期胁迫和成熟度差异比普通假彩色更精细。水体组合RB8GB11BB3。水体在水色差异和悬浮物识别上更有效适合做水环境监测。这些组合都不是死的做项目时多换几个组合对比看信息量差别很大。比如早期判读建设用地我习惯用B12、B8、B4的组合城市不透水面会呈暗紫红色和周边农田区分极明显。3.2 植被与水体的核心指数计算指数计算的本质是把多波段信息压缩成一个有物理含义的单波段变量。哨兵2号最常用的几个指数如下指数公式用途阈值参考NDVI(B8-B4)/(B8B4)植被覆盖度、长势小于0为裸土/水0.2~0.5为中等植被大于0.5为茂密植被NDWI(B3-B8)/(B3B8)水体提取大于0通常为水MNDWI(B3-B11)/(B3B11)水体提取更抗阴影大于0为水优于NDWI在建成区的水体识别EVI2.5×(B8-B4)/(B86×B4-7.5×B21)高植被区减弱饱和高植被区比NDVI更稳定NDBI(B11-B8)/(B11B8)建设用地提取大于0多为建筑/裸土计算NDVI这类比值指数时分母接近0的区域水域、阴影会出现噪声代码里通常加一个极小量eps来防除零例如(nir - red) / (nir red 1e-10)。这里特别强调一下NDWI的老版本和MNDWI在哨兵2号上的表现。传统NDWI用的是绿光和近红外在包含建成区的影像里建筑物不透水面也会呈正值导致水体误提。MNDWI改用短波红外B11做分母水体信息更强城市阴影和水体区分度高很多。我在做城市内涝淹没范围提取时MNDWI的效果明显好于NDWI建议优先用它做水体提取任务。3.3 指数在长时间序列分析中的用法哨兵2号双星带来5天重访这让NDVI时序曲线在农业监测里非常有用。实际做法是先对每个月份做中值合成生成一张月尺度NDVI影像再按月堆叠成时间序列。然后可以物候参数化提取生长季开始时间、峰值时间、峰值NDVI、生长季长度、生长季NDVI积分等。这些特征可以直接用于作物分类和产量估算。时序分析还有一个常被忽略的好处对单期影像里的云和噪声有天然平滑作用。用中位数合成代替最大值合成能大幅降低异常值影响。比如用每月中值合成NDVI即使某旬有云污染时序曲线上也就只是一个小凹陷而不是一条突兀的尖刺后面对比分类就会稳定得多。4. 传统遥感算法从阈值分割到随机森林4.1 阈值分割最简单却仍好用阈值分割看着简单但它是很多实际生产项目的基石。核心思想是指数值在某个阈值两侧属于不同地类比如NDBI大于0.15的像元判为建筑区NDWI大于0的判为水体NDVI大于0.6判为茂密植被。难在阈值怎么定。如果影像直方图呈双峰分布直接取两峰之间的谷底即可这就是直方图双峰法。更自动化的做法是用最大类间方差法OTSU它自动搜索一个阈值让分割成两类的类内方差最小、类间方差最大。对单景影像做水体或植被提取OTSU几乎是无脑可用的首选。但在大范围或者多时相场景下全局固定阈值并不可靠。同一套NDVI阈值在不同地区、不同季节、不同传感器状态下表现差异巨大。这时可以分段自适应先按行政区域或生态分区统计指数分布各区域独立定阈值。我在做城市扩展监测时就是分城郊和远郊两块分别用OTSU提建设用地再合并结果准确率比全图一刀切高不少。4.2 非监督分类与监督分类非监督分类不需要样本适合快速摸底。K-Means和ISODATA是常见算法把像元光谱向量聚类到K个类别再人工判读每个类别的意义。实际操作时根据影像地类复杂度设置K通常从10到20类宁多勿少聚类后再去归并。这样做法的优点是快、不依赖训练样本缺点是类别与目标地类没有直接对应后期人工处理量大而且很难保证分类边界的地物合理性。监督分类则是先由人选定代表性样本再训练分类器。最大似然分类是最经典的方法假设每一类的光谱值服从多维正态分布然后用概率密度做分类。它的优点是统计理论扎实小样本下效果稳定缺点是当类别光谱分布不规则、多峰时正态假设会崩掉。真正在工程里用得最多的其实是随机森林Random Forest。它对非线性关系适应力强、对高维特征不敏感、不容易过拟合还能输出特征重要性排序。实际做土地利用分类时我常用20米波段B5/B6/B7/B8A/B11/B12加派生指数NDVI/MNDWI/纹理特征一起扔进随机森林分类精度明显高于只用原始10米波段。支持向量机SVM在小样本高维数据上表现也好特别是样本量少、维度高、类别复杂的场景。它的关键是核函数选择径向基核最通用但对参数C和gamma比较敏感需要网格搜索调参。我的体会是在同等样本量下SVM在精细地类比如不同作物类型上的表现常优于随机森林但训练速度慢调参麻烦样本多的时候往往随机森林更划算。4.3 面向对象影像分析OBIA像元级分类的一个大问题是椒盐噪声。地物本身是斑块状分布的但单个像元的分类结果却可能是碎点导致最终图斑细碎、边界不平滑。面向对象影像分析Object-Based Image AnalysisOBIA先把影像分割成同质图斑再基于图斑的光谱、纹理、形状、上下文特征分类能很好解决这个问题。分割阶段商业软件eCognition里的多尺度分割最经典通过设置尺度参数控制图斑大小再结合光谱和形状因子调节同质性。开源实现里可以用SLIC超像素或者scikit-image里的quickshift做近似效果。分割质量直接决定上限所以这一步值得反复调参尺度太大会把不同地类揉进一个图斑尺度太小又会出现大量碎片。分类阶段同样用随机森林或SVM只是特征从像元变成了图斑的统计量均值、标准差、面积、周长/面积比、纹理GLCM等。OBIA做高分辨率影像地物提取很稳尤其在建筑物、不透水面这类有明显形状特征的地物上比像元分类高出好几个身位。5. AI与深度学习语义分割、变化检测与数据标注5.1 为什么遥感的深度学习落地要先解决数据问题深度学习这几年把遥感影像分类推到了一个新高度但我接触到的很多AI工程师第一反应是“这不就是图像分割吗”然后拿着ImageNet预训练的U-Net直接跑最后精度惨不忍睹。问题就出在数据和任务定义上。遥感影像和自然图像有本质差异第一输入通道通常不止RGB哨兵2号至少要用B2/B3/B4/B8四个10米波段加上红边和SWIR波段效果更好第二目标是俯视视角下的地物尺度差异巨大一个小区和一块足球场在影像上的视觉相似度比自然图像里猫和狗相似度高得多第三类别极其不均衡建成区、植被、裸土、水体占比悬殊如果直接用交叉熵损失训练小类目基本被大类目淹没。因此我的建议是动手训练前至少要把三件事确认好训练样本是否覆盖了所有的地物场景包括季节变化和区域差异标签类别定义是否清晰统一到同一个分类体系特征通道是否归一化到合理范围。数据没准备好模型再花哨也是白搭。5.2 常用语义分割与变化检测模型语义分割是把每个像元分类成地物类别这在遥感里应用最广建筑物提取、水体分割、作物类型制图都属于这类任务。U-Net是最经典的骨干模型靠编码器-解码器结构和跳接连接保留了空间细节小样本下比很多新模型还稳我现在依然把它当基线来用。它在遥感上的训练成本低框架成熟源码到处都是适合作为第一个跑通的模型。**DeepLabV3**通过ASPP空洞空间金字塔池化结构融合多尺度上下文信息对大目标分割比如城区建筑物整体、大范围水域比U-Net更有优势。它也继承了编码器-解码器的结构但解码器更轻量训练速度也快。SegFormer这类基于Transformer的模型优势在于对全局上下文的建模能力很强适合分割大块连片地物、处理长距离依赖比如大范围农田边界、城市场景中的道路网。缺点是训练显存占用大对小目标精细度有时不如U-Net系列。在实际项目里的选择逻辑是先看目标尺度再做测试。小地块、细碎地物优先用U-Net大范围均匀地物考虑DeepLabV3如果数据集很大、想要更高精度再用SegFormer这类Transformer。不管用哪种训练时损失函数建议用CrossEntropyLoss DiceLoss组合能有效压制类别不平衡。变化检测也是哨兵2号的大应用场景比如城市扩张、植被砍伐、灾后评估。这类模型输入是两期影像输出是变化区域掩膜。经典方案是孪生网络系列Siam-Net、Siam-Unet新一些的有ChangeFormer这类带Transformer的模型专门挖掘时序上下文。如果只是想知道哪儿变了、没变也可以先对两期影像分别做分类再对比分类结果这样还能告诉你变化类型比如从耕地变成建设用地。5.3 训练与推理的工程细节遥感影像通常是大尺寸栅格没法直接整张喂给模型。标准做法是切割成patch比如512x512像素。切块时要注意重叠训练阶段建议带一定的overlap比如64到128像素推理阶段用滑窗加边缘羽化拼接避免边界处产生接缝痕迹。训练集和验证集的划分不能随意随机切分。同一景影像内相距很近的像元光谱强相关如果随机划分模型可能记住空间位置而不是学出通用的语义特征这叫空间自相关导致的数据泄漏。正确做法是按空间区域划分比如以地块或行政区为单位一组区域训练、另一组区域验证这样评估出的泛化能力才真实可靠。推理阶段模型从PyTorch导出ONNX后可以大幅提速还可以用TensorRT做半精度推理。如果是部署到云服务做在线瓦片推理通常会把模型切到小patch按四叉树动态加载影像瓦片逐瓦片预测后拼接。遥感模型部署的重点不是模型花哨而是工程链路稳定。5.4 数据标注与现成标签库标注是深度学习遥感项目里最耗人力的环节。常用标注工具有LabelMe、QGIS加半自动标注插件、Raster Vision等。建议先用传统算法比如NDWI、OTSU做一个初版分割结果人工只修正边界这样能省下不少时间。对于地块类目标甚至可以先跑SLIC超像素再把超像素聚合结果让人工确认比从零画多边形轻松很多。如果你不想从零标注也有不少现成的高质量全球产品可以直接当作训练标签。ESA的WorldCover用哨兵1号/2号影像生成了10米分辨率全球土地覆盖数据类别体系清晰ESRI 2020 Land Cover也类似Google的Dynamic World更偏动态逐景输出概率结果。用这些产品做标签训练自己的分类器虽然会有一些标注噪声但只要选择时序中比较稳定的区域做样本效果往往还不错。近几年SAMSegment Anything Model开源后遥感社区也出现了SAM-Remote这类适配方案能零样本分割出很多地物目标。不过SAM本身不直接做语义分类更合适的用法是先生成分割掩膜再做人工打标签或者结合CLIP做自动分类相当于一个强大的预标注工具。6. 实操中踩过的坑与提速技巧6.1 云和薄雾最常见的数据杀手我踩过的最大坑是早期不注意云掩膜直接拿L2A算NDVI时序结果冬春季的NDVI曲线上出现一堆异常的负值尖峰。后来学聪明了任何单景分析都要先看SCL或者s2cloudless掩膜时序分析尽量用月合成。薄云和雾最棘手因为SCL对它们识别没那么准。这种时候我一般会把影像放到短波红外和红边组合下目视检查一遍薄云区域在B11上的纹理会被抹平。处理薄云污染还有一招用B1气溶胶波段做参考构建一个雾霾指数然后做相对辐射归一化但这个方法的参数调节比较复杂一般项目里我宁可直接找无云时相的影像替换。6.2 内存不够分块处理才是正解哨兵2号一景L2A在10米分辨率的全尺寸下大约是1万像素乘1万像素的水平单波段内存占用就接近400MB多波段、多时相叠起来普通电脑很容易卡死。我刚开始做全国尺度分析时因为图方便直接在本地一次性处理结果不是内存溢出就是硬盘写满。现在我的习惯是能用GEE/Planetary Computer在云端做的就不下载必须下载的场景严格按图幅分块每个分块单独预处理最后再拼镶嵌。模型推理时分块更是必须项滑窗重叠后再加权融合基本看不出拼接痕迹。6.3 现成标签库与预训练权重别重复造轮子做AI分类时很多人一开始都会从标了上千个多边形开始我却建议先找现成的一是已有全球分类产品当标签比如WorldCover、ESRI Land Cover、Dynamic World这些产品即便不完美也远比十几个孤立的样本点可靠。二是用预训练权重做迁移学习。遥感领域有TorchGeo等开源库CLIP也出现了遥感版本RemoteCLIP能让模型理解“这是建筑区”“这是植被”这类语义。即便你不做零样本分类用预训练权重初始化编码器再在自己的数据上微调也能大幅减少标注量。三是利用哨兵2号自身的时序信息做自监督预训练比如SatMAE、ScaleMAE这类方法先用大量无标注影像学习光谱时空表征再微调到下游任务。虽然自监督预训练对个人开发者来说门槛偏高但社区里公开权重越来越多直接用也是个路子。6.4 面积统计与坐标系陷阱最后说一个我屡试不爽的经验。做完分类、出一张漂亮的专题图的时候很多人会顺手用QGIS里的“字段计算器”算面积结果发现单位是度数值毫无意义。明确一下EPSG:4326经纬坐标系下没有真实的面积和距离含义EPSG:3857下也不是等积投影。要做面积统计务必先重投影到UTM分带或者Albers等积投影上再进行计算。另有一个细节是哨兵2号原始数据使用UTM分带但北极地区分带处理比较特殊跨带拼接时不要盲目重投影建议参考相邻图幅的元数据确认投影参数统一。6.5 重要教训预处理比模型更影响结果文章最后给刚入门的朋友一句实在话如果你要做土地利用分类先确保输入数据没有问题再做模型。在脏数据上跑再好的模型结果也只是垃圾进垃圾出。我见过不少同学花大力气调网络结构NDVI却还在用不干净的原始反射率计算边界一塌糊涂。先把数据基础打牢再把波段组合、指数计算、样本质量这些环节走稳模型部分反而没那么玄乎。我个人的习惯流程是先选一景云量最少的影像走一遍“下载—预处理—画样本—训练—推理—出图”把链路跑顺再逐渐扩大到多时相、大范围。这个过程枯燥但有效很多“看起来突然很厉害”的项目背后其实都是这些基础功夫堆出来的。遥感的AI应用这几年进展确实快变化检测、大模型、自监督一个个火起来但快速变化的技术背后对数据物理意义的理解才是真正能长期复用的能力。希望这篇内容能帮你把哨兵2号解析链路走通少走点我当年走过的弯路。
返回列表