ARTICLE DETAIL

资讯详情

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

Sentinel-1 SLC数据在SNAP中的预处理全流程解析

Sentinel-1 SLC数据在SNAP中的预处理全流程解析 干过InSAR的人都知道拿到一景Sentinel-1 SLC数据那一刻真正的工作才刚刚开始。多数新手打开SNAP把SLC文件拖进Product Explorer屏幕上一片灰白连地物轮廓都看不出来——当场就怀疑自己是不是数据下错了。其实SLC本来就是这个脾气它保存的是一组组复数振幅和相位混在一起不像GRD那样开箱就是一张像样的雷达强度图。这篇就围绕Sentinel-1 SLC数据在SNAP里的预处理全流程展开把每一步的操作动机、参数设置和常见坑位讲透。内容面向正在做InSAR、D-InSAR、时序形变测量或者只是被导师丢了一句话“你先把数据预处理了”的新手。读完你不仅能跑通流程还能理解为什么要做TOPSAR Split、为什么要Deburst、为什么干涉之前必须先配准——这些“为什么”才是避坑的关键。1. 为什么偏偏要拿SLC开头SLC和GRD差的不是分辨率是相位1.1 SLC不只是“更高清的GRD”很多从光学遥感转过来的朋友有个直觉SLCSingle Look Complex和GRDGround Range Detected的区别无非是一个清晰一个模糊。这个理解会害死你。GRD产品是经过多视处理、热噪声去除、辐射定标后的强度数据每个像素只有一个代表后向散射强度的实数。你拿它做分类、做变化检测、做洪水淹没分析都没问题因为它直观、好用、文件也不大。但它把相位信息彻底丢掉了。SLC保存的是每个像素的复数回波信号即实部加虚部或者等效地表示为振幅和相位。振幅就是你熟悉的“亮度”相位则记录了雷达波从卫星到地物再返回的精确路径长度精度可以达到波长的几分之一。Sentinel-1是C波段雷达波长约5.6厘米这意味着相位信息对地面毫米级到厘米级的形变都是敏感的。你如果只是把SLC显示成强度图SNAP里选中Intensity或Amplitude波段那它跟GRD看起来确实差不多甚至更“脏”。但SLC的真正价值在相位而这东西在GRD里已经不存在了。干涉测量的基本原理就是拿两景不同时刻的SLC做共轭相乘用相位差反演两次观测期间地表的位移。没有SLC这一步根本无从谈起。1.2 SLC预处理的最终目标为干涉测量供数那么“预处理”到底要处理到什么程度才算完不同任务差得挺远。如果是做常规的地表形变监测或者地震同震形变场反演预处理的目标通常是输出一景合格的干涉图也就是把主影像和辅影像配准、干涉、去地平效应之后的产品。如果你的目标是生成数字高程模型或者做更复杂的时序分析那还要继续往下走比如相位解缠、地理编码、SBAS或PS-InSAR流程。但无论如何SNAP里的SLC预处理流水线是共同的轨道校正、TOPSAR Split、Deburst、配准、干涉。我用一个比喻帮新手建立整体概念GRD相当于直接把拍出来的照片打印出来SLC相当于保留原始底片其实更准确的说法是保留了全部波形记录而预处理就是“显影、裁剪、拼接底片”干涉则是“拿两张底片叠在一起看差异”。你先把底片处理好后面才能放大、测量、出图。SLC的代价也很明显。一景IW模式SLC数据大约4到6GB包含了3个幅宽接近的子带subswath每个子带又由一系列burst组成。这种极其冗余的存储结构是干涉测量必需的但对计算机性能和磁盘空间都不太友好。所以预处理的另一个目标就是尽可能把不关心的区域裁掉只留下研究区对应的那部分数据并且把离散的burst拼接成连续的影像。2. 开工前先武装三轮环境、轨道数据与产品结构2.1 SNAP版本和内存分配8GB是及格线SNAP从7.0到9.0、10.0我都用过目前稳定跑8.0以上版本基本没问题但我建议直接装最新的稳定版毕竟S1数据的更新偶尔会带来兼容性问题。安装完之后第一件事不是急着打开数据而是去改内存配置。默认的SNAP堆内存很小我记得6.x时代默认值连2GB都不到拿这个跑SLC处理跑到TOPSAR Split就给你脸色看。处理一景完整的IW模式SLC8GB内存只是及格线16GB会舒服很多。具体修改方式找到SNAP安装目录下的etc/snap.conf文件打开后找到java.xmx这一项把值改大entry keyjava.xmx8g/entry注意这里没有任何单位后缀问题8g就代表8GB。改完需要重启SNAP才生效。如果你习惯用命令行批处理后面会再提到用gpt -J-Xmx8G这种方式临时指定。另外提醒一句如果你的电脑是32位Java赶紧换成64位否则堆内存一调大就启动失败。很多人改了snap.conf没生效十有八九是Java位数不对。2.2 哨兵1轨道数据去哪找、怎么选预处理第一步要应用精确轨道文件而这个东西很多新手压根没准备。SLC产品本身带一个初步轨道基于预报星历精度大概在10米量级做干涉时不够用。轨道误差会直接转化为干涉图里的条纹误差特别是在长基线情况下尤其明显所以必须用精轨数据替换掉初始轨道。Sentinel-1的轨道数据分两类RESORB快速轨道也叫Restituted Orbit数据获取后几小时到一天内发布精度约10厘米适合处理近期数据。POEORB精确轨道数据获取后大约21天发布精度约5厘米是干涉处理的首选。下载途径有很多我自己常用的是ESA的Sentinel-1 QC平台、Copernicus Data Space Ecosystem和ASF Vertex。检索方式很简单输入卫星编号Sentinel-1A或1B、日期范围、数据类型POEORB或RESORB下载对应的.EOF文件即可。文件名里带有明确的起止时间要和你的数据获取时间匹配。下载好之后把.EOF文件放到一个固定目录里。在SNAP的Preferences里可以设置轨道数据自动下载目录让SNAP自己联网去拉。我更推荐手动下载原因后面在避坑部分会细说——自动下载在网络状况差的时候会卡死整个界面。2.3 认识一景SLC的文件夹结构拿到SLC原始数据解压后是一个.SAFE文件夹现在也有.zip压缩包SNAP能直接读。里面几个关键部分有必要先认一遍manifest.safe产品清单记录了数据格式、波段信息、轨道状态等元数据。SNAP打开产品时首先读的就是它。annotation/每个子带每个极化的注释文件XML格式里面有空基线的几何参数配准和干涉时会用到。measurement/实际测量数据是SLC的复数影像文件通常用TIFF或者类似格式存储一个文件对应一个子带的一个极化。preview/快速预览图就是那个你能直接看出地物轮廓的缩略图。打开产品后在SNAP的Product Explorer里展开Bands你会看到类似Amplitude_IW1_VV、Intensity_IW2_VH这样的命名。带Amplitude的是振幅带Intensity的是振幅的平方后面跟着子带和极化方式。充分理解这些命名后面选参数时才不会懵。3. SNAP里SLC预处理的标准流水线轨道校正、Split、Deburst、干涉图3.1 第一步打开产品并确认基本信息打开SNAPFile → Open Product选中.SAFE文件夹或者.zip压缩包。打开之后先别急着操作看两个地方。一个是Product Explorer里的Metadata确认数据模式确实是IW、分辨率是5米×20米那种SLC而不是GRD。另一个是查看GCP列表或者轨道信息确认产品时间、轨道号和自己任务的预期吻合。这个“看一眼”的习惯非常有用。我有一次做了半天预处理输出干涉图后发现条纹方向不对劲回头一查才发现主影像和辅影像用的是同一轨道的不同帧根本不是同一个区域的观测——如果一开始就检查产品元数据里的坐标范围和轨道号这半小时就不会白费。3.2 第二步应用轨道文件Apply Orbit File这一步在SNAP菜单里是Radar → Apply Orbit File。界面会显示当前加载产品的卫星平台你需要选择轨道来源如果已经手动下载了.EOF文件选“File”方式把文件路径指过去。如果让SNAP自己下载选“Auto”方式它会尝试访问轨道数据服务器。实际执行时SNAP会把原产品的轨道信息替换成精轨信息输出一个新文件。这一步的输出仍然是一个SLC产品没有任何像素级别变化只是元数据更精确了。有一点很容易被忽略轨道文件必须覆盖产品数据的完整时间范围。Sentinel-1 SLC的轨道编号、数据获取时间要和.EOF文件里标注的起止时间区间匹配。如果你的数据是最近几天获取的POEORB还没发布那就老老实实用RESORB不要硬等精确轨道。应用完轨道后可以在Metadata里检查轨道状态是不是变成“POD Precise”或“POD Restituted”确认替换成功再继续。3.3 第三步TOPSAR Split把不需要的子带和burst裁掉这是SLC预处理里第一个真正减少计算量的步骤。Sentinel-1在IW模式下采集时用的是一种叫TOPSARTerrain Observation with Progressive Scans SAR的技术卫星用多个子带从不同角度扫描地面每个子带内部又沿方位向分成多个burst。这样能得到大幅宽但代价是数据组织非常破碎——一个SLC产品里有3个子带每个子带有9到十几个burst加起来是几十块独立的小影像。而你做干涉研究时研究区往往只落在其中一个子带、连续几个burst范围内全处理不仅慢而且没必要。操作上对应Radar → Sentinel-1 TOPS → TOPSAR Split。关键参数Subswath选研究区最可能覆盖的那个子带。比如我国中部地区通常在IW2或IW1沿海某些区域可能是IW1。选错了后面出的图会发现研究区完全不在里面所以如果拿不准可以先在preview里对照一下地物。Bursts可以通过索引指定连续的一段burst也可以点Select All保留全部。选择的原则是宁多勿缺稍微向外扩一两个burst因为后期配准和滤波操作会有边缘损失。Polarisations按需勾选VV、VH等。如果做常规地表形变通常只需要VV极化如果还需要VH的强度信息做辅助分析一起选上就是代价是计算量增加。TOPSAR Split执行完输出的产品大小会比原始数据小很多。输出里已经只包含一个子带、你选的burst、你选的极化这对后续所有步骤都是巨大的性能提升。很多人在这一步省事直接略过然后发现后面Deburst要处理3个子带的数据内存和磁盘双双爆炸这就是没理解Split的意义。3.4 第四步Deburst把碎片拼成连续影像经过Split后数据还是“一截一截”的每个burst是一个独立的切片彼此有重叠区域直接看会看到明显的接缝。在做干涉之前需要把它们拼成一整幅连续的影像。这个操作用Radar → Sentinel-1 TOPS → Deburst。Deburst的原理是按burst的几何位置做拼接和重采样最终输出一个各burst无缝衔接的SLC或强度产品。操作界面很简单主要是选极化和是否输出强度。通常在干涉流程里我们Deburst的输入仍是SLC复数数据为后续配准和干涉做准备。这里有个常见认知误区Dividing the full-swath SLC into bursts是TOPSAR数据的固有特性而Deburst之后数据虽然看起来是连续的一景但它仍然包含复数信息。也就是说Deburst不会把SLC降级成GRD。你仍然保留着相位只是拼接方式变得“像一幅正常的影像”而已。另外如果用的SNAP版本较老Deburst偶尔会出现输出范围比Split设定范围大一点的情况。别慌这是拼接时的缓冲区造成的正常情况下不影响后续干涉。3.5 第五步配准与生成干涉图预处理模块的核心交付物到了这一步你已经把单景SLC从“原始底片”整理成了“干净的单张底片”。但如果要做干涉还需要第二景辅影像参与。配准是整个预处理里最“硬核”的一环目标是把主影像和辅影像的每个像素精确对齐到亚像元级别。在SNAP里常用的是Radar → Coregistration → Coregister SLC。界面里会让你设置主影像master和辅影像slave一般情况下选择影像质量更好、轨道误差更小的一景作为主影像。配准方式选择默认的基于轨道的粗配准加基于相干性的精配准即可。Sentinel-1因为是TOPS模式配准精度要求比ScanSAR更严格尤其方位向必须控制在千分像元级别否则burst间会出现相位跳变。配准完成后紧接着是Radar → Interferogram → Interferogram Formation。这一步是把主辅影像共轭相乘得到干涉相位图。界面上需要设定是否生成相干图、是否进行多视处理。如果只是看预处理结果可以先不勾选多视输出原始干涉图。到这一步SLC预处理的主线流程就走完了。后面你可能会继续做滤波、相位解缠、地理编码但那已经属于干涉后处理范畴不再算“预处理”。下面我用一个表格把这套流程串起来步骤菜单路径输入输出核心目的Apply Orbit FileRadar → Apply Orbit FileSLC产品带精轨的SLC消除轨道误差TOPSAR SplitRadar → Sentinel-1 TOPS → TOPSAR Split精轨SLC裁剪后的SLC减小数据量、筛选子带/burstDeburstRadar → Sentinel-1 TOPS → DeburstSplit后的SLC连续SLC影像拼接burst消除碎块感Coregister SLCRadar → Coregistration → Coregister SLC主辅SLC配准后的主辅影像像素级对齐Interferogram FormationRadar → Interferogram → Interferogram Formation配准后的主辅影像干涉图/相干图提取相位差3.6 预处理之外的延伸后面还有哪些工序写完上面的主线我怕有些人直接把干涉图当最终结果拿去写报告了。这里补一句干涉图虽然看着花里胡哨但里面的相位是被包裹的wrapped取值范围在-π到π之间而且叠着平地相位、地形相位和大气延迟。你需要继续做去平Remove Flat Earth Phase消除参考椭球面引起的相位变化。滤波Filter比如Goldstein相位滤波压制斑点噪声和残余噪声。相位解缠Unwrapping把包裹相位恢复成连续相位这一步是形变反演的关键。地理编码Terrain Correction把雷达坐标系下的结果投影到经纬度坐标系。这部分如果展开又是好几篇的篇幅本文不再详述。治学态度是你得知道预处理流水线为后面这些工序准备好了什么高质量的配准SLC、干净的干涉图、以及足够的相位信息。这才是SLC预处理真正的“交付物”。4. 我踩过的坑提前帮你填平4.1 坑一轨道数据下载不出意外地卡住了轨道数据应用这步出问题频率最高的不是SNAP本身而是自动下载。SNAP内置的自动下载功能看起来挺美但在某些网络条件下会长时间转圈甚至直接把SNAP整个卡死。我的做法是永远手动下载。打开轨道数据网站输入日期范围筛选POEORB或RESORB下载后放到D:/Sentinel1_Orbits之类的固定目录。在SNAP的Preferences里把轨道数据目录指过去这样Apply Orbit File时SNAP能直接从本地文件夹识别不需要联网。还有个小细节轨道文件要和你的数据获取年份匹配。很多人输入日期的时候写成“2023-08-15”这种产品获取日期但其实轨道检索界面要求的也是数据获取的时间区间逻辑一致注意别把起止时间填反了就行。4.2 坑二SLC打开一片灰白不是数据坏了前面提到了SLC默认显示的是复数数据模板SNAP在做强度显示之前需要你手动选择波段。打开产品后如果在Bands下面看到的是好几个Amplitude_IW1_VV这种双击它就能显示振幅图看起来和雷达强度图类似。如果你看到一片灰白通常是你点开了某个相位相关的复杂显示或者没有正确选择振幅波段。解决办法在Product Explorer里找到Band列表双击对应的Amplitude波段或者用Window → Image Display手动切换。如果真的什么都没显示检查一下是不是数据本身有问题比如解压文件不完整。这块实在不值得浪费半小时但因为一头雾水的朋友太多我还是写出来。4.3 坑三OutOfMemory内存溢出的众生相处理SLC时内存不够是最常见的崩法。症状是SNAP界面卡住、进度条长时间不动然后弹出一段Java堆内存溢出异常。除了修改snap.conf调大堆内存还有几个实用小经验处理前用TOPSAR Split把数据量切小这是最立竿见影的办法。完好的完整子带不做Split硬啃16GB内存也可能吃力。关掉不用的其他应用程序尤其浏览器里一大堆标签页占内存的那种。如果是在命令行跑gpt可以用gpt -J-Xmx8G这样的参数单独指定内存而不是改全局配置。另外SNAP的临时缓存默认在系统盘如果你的C盘空间不大建议在Preferences里把缓存目录换到一个剩余空间充足的盘。这个很多人不知道SNAP跑大数据时会在缓存目录生成大量临时文件C盘满了它比啥都崩得快。4.4 坑四TOPSAR Split选burst的教训Split的最大坑不在“选哪个子带”而在“选哪些burst”。我之前做一组时序数据想省时间每个子带只选了3个burst恰好覆盖研究区中心。前几景数据都很顺但有一景数据的中心位置因为轨道偏移3个burst没完全包住研究区导致后面干涉图中心区域出现一大片无效值。回头排查了半天才发现是Split的burst选择范围不够。所以我的建议是研究区边缘最好留出至少2个burst的缓冲。burst在方位向上的位置会随轨道变化有轻微移动你不留余量就容易在某景数据上翻车。多处理几秒钟总比后面返工舒服。4.5 坑五生成干涉图时主辅影像时间基线“短”到离谱是怎么回事有朋友跑核心步骤生成的干涉图模糊得没法看检查之后发现主辅影像选择有问题——选了同一轨道的相邻两景甚至同一天获取的重复轨道数据时间基线为0或者几秒根本观测不到形变条纹。这个不算SLC预处理独有的问题但一定要在这里提醒主影像和辅影像必须满足一定的时空基线条件。在SNAP里打开产品列表后确认两景数据的获取日期、轨道方向、以及是否来自同一轨道。理想情况下选同一轨道、同一方向的相邻周期数据做干涉或者如果需要做长时序分析按你的需求选择合适的时间间隔。4.6 坑六一处理就是大半天急性子别硬刚GUISLC预处理在SNAP图形界面里一步步点一景数据跑完可能要好几个小时。如果你有十几景甚至几十景数据要处理手动点击显然不现实。这时候就该上Graph Builder和命令行。其实SNAP的图形界面和命令行的底层算子完全一致但命令行可以并行、可以循环脚本还能断点续跑。下一章我就把Graph Builder的用法单独讲一下这部分对中高级用户来说反而是最省时间的一步。5. 把流水线固化进Graph Builder批处理和命令行运行5.1 在SNAP里搭建Graph从点鼠标到搭流水线SNAP的Graph Builder本质上就是一个可视化算子管道编辑器。你把预处理链路上的算子一个一个拖进画布连起来保存成XML文件。之后每次处理一景新的数据只需要替换输入文件路径就能一键从头跑到尾。我在Graph Builder里最常用的一套流水线长这样Read读取SLC产品Apply-Orbit-File应用轨道文件TOPSAR-Split裁剪子带和burstDeburst拼接burstWrite输出为Beam-DIMAP或GeoTIFF如果你要做干涉再加Coregistration配准Interferogram干涉图生成Write输出Graph Builder界面的操作不复杂左侧是算子列表搜索关键字拖到画布连线然后双击每个节点配置参数。配置参数时和GUI菜单里的选项一模一样唯一要注意的是Read节点的文件路径要写对那相当于整个流水线的入口。5.2 用gpt命令行批量跑效率翻倍的关键Graph保存成.xml文件之后用命令行运行才是真正的高效形态。SNAP安装目录下的bin文件夹里有个gptGraph Processing ToolWindows下是gpt.bat。基础命令格式如下gpt -J-Xmx8G D:/graphs/slc_preprocess.xml -PinfileD:/Sentinel1/S1A_IW_SLC__1SDV_20230815T153026_20230815T153054_012345_012345_0123.SAFE -PoutfileD:/Sentinel1/out/slc_preprocessed.dim这里用-J-Xmx8G单独给Java分配8GB堆内存-P开头的参数是给Graph里的变量赋值比如输入路径和输出路径。如果你有几十景数据要处理写一个简单的循环脚本就能全程自动跑。我一般会把输出路径按轨道号加日期命名方便后面对照主辅影像避免把同一个区域的预处理结果搞混。5.3 一个适合直接抄作业的XML模板下面这个模板是单景SLC预处理的最小可用方案到Deburst为止适合批量跑完再做配准干涉。如果你需要配准和干涉在Deburst节点后面再串即可。graph idSLC_Preprocess version1.0/version node idRead operatorRead/operator sources/ parameters classcom.bc.ceres.binding.dom.XppDomElement file${infile}/file /parameters /node node idApply-Orbit-File operatorApply-Orbit-File/operator sources sourceProduct refidRead/ /sources parameters classcom.bc.ceres.binding.dom.XppDomElement orbitTypeSentinel Precise/orbitType continueOnMissingfalse/continueOnMissing /parameters /node node idTOPSAR-Split operatorTOPSAR-Split/operator sources sourceProduct refidApply-Orbit-File/ /sources parameters classcom.bc.ceres.binding.dom.XppDomElement subswathIW1/subswath bursts1-9/bursts polarisationsVV/polarisations /parameters /node node idDeburst operatorDeburst/operator sources sourceProduct refidTOPSAR-Split/ /sources parameters classcom.bc.ceres.binding.dom.XppDomElement polarisationsVV/polarisations /parameters /node node idWrite operatorWrite/operator sources sourceProduct refidDeburst/ /sources parameters classcom.bc.ceres.binding.dom.XppDomElement file${outfile}/file formatNameBEAM-DIMAP/formatName /parameters /node /graph你在实际使用时把${infile}和${outfile}换成真实路径或通过命令行参数传入都可以。需要注意bursts的写法如果只是指定连续区间像1-9就够了如果是离散的几个burst要用逗号分隔比如1,3,5。这个细节特别容易错写错了SNAP不一定报错但输出影像里会发现有一节变得和预期不一样。6. 写在后面速度、仓位和你自己的习惯最后聊点不太常出现在教程里、但实战中很要命的经验。第一个是速度问题。SLC预处理的瓶颈往往不在算法而在磁盘IO。如果你的数据放在机械硬盘上处理一景的时间可能比放在SSD上多出小一半。我的习惯是数据放SSD中间产物放HDD最终结果再回到SSD加速读取。听着有点绕但实测下来整条流水线快很多。第二个是仓位管理。SLC数据动辄几个GB预处理中间产物、配准输出、干涉图叠在一起一个项目几个月下来几百GB很常见。建议从一开始就建一个固定的目录结构01_raw放原始SLC02_orbits放轨道文件03_preprocessed放预处理结果04_interferograms放干涉输出05_dem放辅助DEM。别小看这个习惯等你要回溯某一次干涉图是怎么生成的干净的目录结构能救你命。第三个是尽量保留过程文件。有些人为了省磁盘空间跑完一步就把中间结果删了。我不建议这么做。SLC预处理本身很耗时一旦后面发现某个参数选错了你还得从头跑。通常我会保留Split和Deburst这两个关键节点的输出因为它们占据的磁盘不太大却能让大部分返工节省一半以上时间。SNAP处理Sentinel-1 SLC的门槛不在操作复杂而在于你懂了原理、却能一头扎进各种参数和异常里。把这篇里提到的流程走一遍再对照避坑部分踩过的坑自查一遍剩下的事情就是耐心等待进度条走完。祝你的干涉图干净漂亮相位解缠顺利出结果。
返回列表