
SAR数据处理这件事说难也难说简单也简单。难在链路长、参数多、每一步都有坑简单在于只要你理解了每个环节在干什么剩下的就是按部就班地操作。我接触Sentinel-1数据差不多有几年时间了从最开始连轨道文件该放哪个文件夹都搞不清楚到后来能独立跑完整个干涉测量流程中间踩过的坑可以说能写一本小册子。这篇文章我打算把Sentinel-1 SAR数据从下载到精确配准的完整预处理流程梳理一遍重点讲清楚每一步为什么要这么做、参数该怎么选、哪些地方容易出问题。不管你是刚接触SAR数据的研究生还是从光学遥感转过来的从业者只要跟着这个流程走应该能少走不少弯路。1. 先搞清楚Sentinel-1数据的产品层级和获取方式1.1 不同产品级别的区别与选择逻辑Sentinel-1的数据产品按照处理级别分为好几个层次很多人一开始就被这些缩写搞晕了。我简单梳理一下Level-0是原始数据基本上用不到Level-1分为SLCSingle Look Complex和GRDGround Range Detected两种Level-2就是海洋产品了做干涉的话不用考虑。做InSAR或者需要相位信息的处理你必须用SLC数据。SLC保留了完整的复数信息包括幅度和相位这是干涉测量的基础。GRD数据虽然看起来更好看——它是经过多视处理和地距投影的强度图像但相位信息已经丢失了只能做幅度分析或者变化检测。这里有个容易犯的错误有人拿GRD去做干涉发现怎么都生成不了干涉图折腾半天才发现是数据选错了。所以记住一个原则——只要你的后续处理涉及相位就必须从SLC开始。SLC数据还分不同的极化方式Sentinel-1支持VV和VH两种极化有些模式只有VV。做地表形变监测一般用VV极化因为它在大多数地表类型上回波信号更强。如果是做植被分析VH可能更有用。这个选择在下载数据的时候就要确定好。1.2 数据下载渠道与注意事项下载Sentinel-1数据有几个常用渠道我平时用得比较多的是欧空局的Copernicus Data Space Ecosystem原来叫SciHub现在迁移了。注册账号是免费的搜索界面也比较直观。另一个选择是通过ASFAlaska Satellite Facility下载速度有时候会更快一些。下载之前有几个关键点需要注意确定研究区域和时间范围Sentinel-1的重访周期是6天两颗星联合或12天单颗星做时序分析的话要确保有足够的影像数量。选择正确的轨道方向升轨Ascending和降轨Descending的几何不同同一地区两种轨道的数据不能混用做干涉。一般建议选定一种轨道方向后保持一致。注意帧号Frame的一致性同一轨道上相邻帧之间有重叠如果你研究区域跨了两帧要么分别处理再拼接要么下载时确保覆盖完整。检查数据质量标识下载页面通常会标注数据的质量状态有些因为轨道机动或者仪器异常会有标记尽量避开这些数据。下载下来的数据是一个.zip压缩包解压后是一个以.SAFE为后缀的文件夹。这个文件夹里面包含了manifest.safe文件、测量数据measurement、轨道信息、标注文件等多个子目录。不要随意修改这个文件夹的内部结构SNAP读取的时候依赖这些文件的相对路径关系。提示下载数据的同时建议把对应的精密轨道文件POD Precise Orbit Ephemerides也一并下载好。虽然SNAP可以自动下载轨道文件但有时候网络不稳定会导致下载失败手动下载放在指定目录里更保险。2. SNAP环境配置与数据导入的实操细节2.1 SNAP安装与内存配置的坑SNAPSentinel Application Platform是欧空局开发的免费SAR处理软件目前做Sentinel-1数据预处理基本离不开它。安装过程本身不复杂从官网下载对应操作系统的安装包一路下一步就行。但安装完之后有一个必须调整的地方——内存分配。默认情况下SNAP只分配了大约1GB的堆内存处理SLC数据的时候动不动就内存溢出。你需要找到SNAP安装目录下的etc/snap.conf文件Windows下是snap.confLinux下可能在bin目录修改里面的default_options参数-J-Xmx8G -J-Xms2G这里的Xmx是最大堆内存Xms是初始堆内存。具体给多少取决于你的机器配置一般建议至少给8GB处理大范围数据的话16GB甚至更多也不过分。但注意不要超过物理内存的70%左右否则操作系统本身会变得很卡。还有一个容易忽略的点SNAP的临时文件目录默认在用户目录下处理大数据的时候临时文件可能占几十GB。如果你的系统盘空间不够建议在snap.conf里把临时目录改到空间更大的盘-Djava.io.tmpdir/path/to/your/tmpdir2.2 数据导入与轨道文件应用打开SNAP之后通过File Open Product导入解压后的.SAFE文件夹。导入成功后你会在产品树里看到一系列波段和元数据。第一步操作是应用精密轨道文件Apply Orbit File。为什么要做这一步Sentinel-1数据自带的轨道信息是快速轨道Restituted Orbit精度在10cm左右。而精密轨道文件Precise Orbit的精度可以达到5cm以内。对于干涉测量来说轨道误差会直接转化为相位误差在干涉图上表现为大尺度的条纹。所以这一步不能省。在SNAP里的操作路径是Radar Apply Orbit File。在弹出的对话框中Orbit State Vector选择Sentinel Precise (Auto Download)这样SNAP会自动从网上获取最新的精密轨道文件。如果自动下载失败你可以手动从欧空局网站下载轨道文件.EOF格式放到SNAP的轨道文件目录下然后选择Sentinel Precise让它从本地读取。注意精密轨道文件通常在数据获取后大约2周才会发布。如果你处理的是刚下载的最新数据可能还没有精密轨道可用这时候只能用快速轨道但要在后续处理中注意轨道误差的影响。2.3 子区域裁剪什么时候该做什么时候不该做如果你的研究区域只是整景影像的一小部分做子区域裁剪Subset可以大幅减少后续处理的数据量和时间。在SNAP里通过Raster Subset来操作你可以手动框选区域也可以输入经纬度范围。但这里有个经验之谈不要在预处理的最开始就做裁剪。原因是轨道文件应用、辐射定标这些步骤需要完整的影像信息来保证精度。我一般建议在完成辐射定标和去斑之后、做干涉之前再裁剪。当然如果你机器内存实在有限提前裁剪也是可以接受的妥协方案但要注意裁剪区域要留足够的余量避免边缘效应影响核心区域。裁剪的时候还有一个细节尽量让裁剪区域的边界避开地形剧烈变化的地方。因为后续做配准和干涉的时候地形起伏大的区域容易产生配准误差如果你的研究区边界正好切在山脊上可能会引入不必要的麻烦。3. 辐射定标与热噪声去除被很多人跳过的关键步骤3.1 辐射定标到底在做什么辐射定标Radiometric Calibration的目的是把SAR影像的原始DN值转换成具有物理意义的后向散射系数。Sentinel-1的SLC数据存储的是复数定标之后得到的是β0或者σ0。对于干涉处理来说定标其实不是必须的——因为干涉用的是相位差而定标只影响幅度。但如果你后续要做幅度分析、相干性计算或者变化检测定标就是必不可少的一步。在SNAP里的操作是Radar Radiometric Calibrate。参数选择上Output image in complex要勾选保持复数格式Output sigma0 band根据你的需求选择。做干涉的话其实这一步可以跳过但我个人习惯还是做一下因为定标后的影像在可视化的时候动态范围更合理方便检查数据质量。定标有一个容易搞混的地方β0和σ0的区别。β0是雷达亮度没有做地形校正σ0是后向散射系数考虑了入射角的影响。如果你要做地形归一化还需要进一步做γ0的转换。这些概念在入门的时候容易混淆但只要记住一点——做干涉不用管这些做幅度分析才需要仔细选择。3.2 热噪声去除的实际影响Sentinel-1的TOPS模式Terrain Observation with Progressive Scans有一个特点每个子条带sub-swath之间的边界区域存在热噪声表现为周期性的亮度异常。这个噪声在干涉图上会产生明显的相位跳变如果不处理后续的解缠会出大问题。SNAP提供了Radar Remove GRD Border Noise和Radar Thermal Noise Removal两个工具。对于SLC数据主要用后者。操作很简单选择Thermal Noise Removal保持默认参数即可。处理完之后你可以对比一下处理前后的影像在子条带边界处会看到明显的改善。提示热噪声去除这个步骤在SNAP的Graph Builder里经常被遗漏。如果你是用命令行批量处理记得在XML流程文件里加上这个节点。我见过不少人跑完整个流程才发现干涉图上有规律的条纹回头排查半天才想起来是热噪声没去掉。3.3 去斑滤波做还是不做这是个问题去斑滤波Speckle Filtering的目的是抑制SAR影像固有的相干斑噪声。但这里有一个重要的判断如果你后续要做干涉或者相干性分析不要在干涉之前做去斑滤波。因为滤波会改变像素之间的相位关系影响干涉质量。去斑滤波一般用在两种场景一是做幅度影像的分类或者变化检测二是对干涉图做滤波这是另一回事用的是Goldstein滤波或者Boxcar滤波。对于干涉流程来说多视Multi-looking本身就起到了一定的去斑效果不需要额外做单视影像的滤波。如果你确实需要做去斑SNAP提供了好几种滤波器Lee、Refined Lee、Frost、Gamma MAP等。我一般推荐Refined Lee它在保持边缘细节和抑制噪声之间平衡得比较好。窗口大小通常选7x7太大了会过度平滑太小了效果不明显。4. 精确配准干涉测量的成败关键4.1 配准的基本原理与TOPS模式的特殊挑战配准Coregistration的目的是让主影像和从影像中同一个地面目标对应的像素精确对齐。如果配准精度不够干涉相位里就会混入由几何失配引起的误差表现为干涉图上的条纹不清晰或者出现虚假条纹。对于传统的条带模式SAR配准精度达到0.1个像素就够了。但Sentinel-1的TOPS模式有个特殊问题方位向存在多普勒中心频率的线性变化。这意味着即使配准精度达到了0.1像素在子条带边缘仍然可能出现相位跳变。所以TOPS模式的配准精度要求更高一般需要达到0.001像素量级。SNAP里针对TOPS模式提供了专门的配准工具Radar Coregistration S-1 TOPS Coregistration。这个工具实际上是一个流程链包含了粗配准、精配准和方位向滤波等步骤。4.2 配准流程的逐步拆解SNAP的S-1 TOPS Coregistration工具包含以下几个子步骤第一步Apply Orbit File。前面已经说过了这里不再重复。但要注意的是配准的时候主从影像都需要应用轨道文件。第二步Back Geocoding。这一步利用轨道信息和DEM数字高程模型把从影像映射到主影像的坐标系下。DEM的选择很重要——平坦地区用SRTM 1Sec就够了地形起伏大的区域建议用更精细的DEM比如ASTER GDEM或者TanDEM-X。SNAP内置了自动下载DEM的功能但速度可能比较慢可以提前下载好放在本地。第三步Enhanced Spectral DiversityESD。这是TOPS模式配准的核心步骤。ESD利用子条带重叠区域的数据来估计和校正方位向的配准误差。如果没有这一步子条带之间的相位跳变几乎不可避免。ESD处理之后SNAP会输出一个配准质量报告里面包含了配准精度的估计值。这个值应该小于0.001像素如果大于这个值说明配准可能有问题需要检查轨道文件、DEM或者数据本身的质量。4.3 配准失败的常见原因与排查思路配准失败是新手最常遇到的问题之一。根据我的经验原因通常集中在以下几个方面轨道文件问题如果主从影像的轨道文件不匹配或者缺失配准精度会大幅下降。检查方法是看配准报告里的轨道信息是否完整两个影像的轨道文件是否都是精密轨道。DEM问题如果研究区域地形起伏很大而使用的DEM精度不够Back Geocoding的精度就会受影响。这种情况下可以尝试换用更高精度的DEM或者手动调整配准参数。时间去相干如果主从影像的时间间隔太长比如超过一个月地表变化会导致相干性降低配准算法可能无法找到足够的匹配点。这时候可以考虑缩短时间基线或者使用更鲁棒的配准策略。数据质量问题有些Sentinel-1数据本身存在质量问题比如仪器异常期间获取的数据这种情况下配准失败是数据本身的问题换一景数据就好了。排查的时候我一般会先看配准报告里的几个关键指标配准精度、相干性均值、残余方位向偏移。如果配准精度差但相干性还行可能是参数设置问题如果相干性本身就很低那多半是时间去相干或者数据质量问题。5. 干涉图生成与去平地效应从配准到相位的跨越5.1 干涉图生成的操作与参数选择配准完成之后下一步就是生成干涉图Interferogram Generation。在SNAP里的操作路径是Radar Interferometric Products Interferogram。这个工具会同时完成几件事生成干涉相位、计算相干性、去平地效应Deburst。参数方面Coherence Estimation Window一般保持默认的5x5或者根据数据情况调整。窗口越大相干性估计越稳定但空间分辨率会降低。Number of Looks在做干涉的时候一般设为1因为多视可以在后续步骤中做。干涉图生成之后你会得到一个包含干涉相位、相干性和幅度波段的复合产品。这时候可以初步看一下干涉图的质量——好的干涉图应该能看到清晰的条纹相干性高的区域条纹连续相干性低的区域比如水体、植被密集区表现为噪声。5.2 去平地效应与去burst操作的区别这里有两个容易混淆的概念去平地效应Flat-Earth Removal和去burstDeburst。去平地效应是去除由于地球曲率和参考椭球面引起的系统性相位斜坡。如果不做这一步干涉图上会有一个大尺度的线性相位趋势掩盖掉真正的形变信号。SNAP里的操作是Radar Interferometric Products Interferogram对话框里勾选Subtract flat-earth phase或者在生成干涉图之后单独执行Radar Interferometric Flat-Earth Removal。去burst是针对TOPS模式的特有操作。因为Sentinel-1的TOPS模式是分burst获取的每个burst之间有重叠区域这些重叠区域在干涉图上表现为相位跳变。Deburst操作就是把这些burst拼接成一个连续的影像。在SNAP里通过Radar Interferometric TOPS Deburst来执行。注意Deburst必须在去平地效应之后做顺序不能反。如果先Deburst再去平地重叠区域的相位跳变会影响平地相位估计的精度。5.3 干涉图滤波与相干性掩膜干涉图生成之后通常还需要做滤波来抑制噪声。SNAP提供了Goldstein滤波和Boxcar滤波两种选择。Goldstein滤波是自适应滤波在相干性高的区域滤波力度小相干性低的区域滤波力度大适合大多数场景。Boxcar滤波是简单的均值滤波适合相干性整体较好的情况。滤波之后建议做一次相干性掩膜把相干性低于某个阈值的区域标记出来。这个阈值一般设在0.2到0.3之间具体取决于你的研究区域和数据质量。掩膜之后的干涉图在后续解缠的时候会更稳定因为低相干区域的相位本身就是随机的参与解缠只会引入错误。6. 地形相位去除与地理编码让结果落到真实坐标上6.1 地形相位去除的原理与操作地形相位去除Topographic Phase Removal是利用外部DEM模拟地形引起的相位贡献然后从干涉相位中减去这部分。这一步做完之后剩下的相位就主要是形变相位、大气相位和噪声了。在SNAP里的操作是Radar Interferometric Products Topographic Phase Removal。你需要指定一个DEMSNAP会自动完成模拟和差分。DEM的选择和前面配准时一样平坦地区用SRTM就够了山区建议用更高精度的DEM。这里有一个细节值得注意DEM的垂直精度直接影响地形相位去除的效果。如果DEM本身有较大的高程误差差分之后会残留地形相关的相位。在山区这种残留可能比形变信号还大。所以如果你的研究区域地形复杂建议花点时间找一个高质量的DEM。6.2 地理编码的两种方式与选择地理编码Geocoding是把SAR坐标系下的结果转换到地理坐标系比如WGS84经纬度或者UTM投影。SNAP提供了两种方式Range-Doppler Terrain Correction和SAR Simulation Terrain Correction。Range-Doppler方法是最常用的它利用轨道参数和DEM来做正射校正。操作路径是Radar Geometric Terrain Correction Range-Doppler Terrain Correction。参数方面Pixel Spacing一般设为10米到30米取决于你的应用需求。Map Projection根据研究区域选择国内的话UTM投影比较常用。SAR Simulation方法精度更高但计算量也更大适合地形特别复杂的区域。一般场景下Range-Doppler就够了。地理编码之后你会得到一个带有地理坐标的GeoTIFF文件可以直接导入到GIS软件里和光学影像叠加分析。这时候可以检查一下结果是否合理——比如形变区域的位置是否和已知的地质构造吻合干涉条纹的走向是否和地形一致。6.3 结果验证怎么判断预处理流程是否成功预处理做完之后怎么判断结果是否可靠我一般会从以下几个方面检查干涉图质量好的干涉图应该有清晰的条纹条纹的疏密和走向应该和地形或者形变场一致。如果干涉图上一片噪声说明某个环节出了问题。相干性分布相干性高的区域应该对应稳定的地表比如城市、裸地相干性低的区域应该对应植被、水体等。如果相干性的分布和地表覆盖类型对不上可能是配准或者滤波的问题。配准精度报告前面提到过ESD之后的配准精度应该小于0.001像素。如果这个值偏大后续的干涉相位会有系统性误差。与已知结果的对比如果你的研究区域有GPS观测数据或者之前发表的结果可以做一个粗略的对比。形变趋势应该大致吻合如果差异很大需要回头检查流程。7. 批量处理与自动化当你要处理几十景数据的时候7.1 Graph Builder的基本用法当你需要处理大量数据的时候一景一景手动操作显然不现实。SNAP提供了Graph Builder工具可以把整个处理流程搭建成一个XML格式的流程图然后批量执行。Graph Builder的使用逻辑是你先把整个流程用各个处理节点连起来每个节点对应一个处理步骤比如Apply Orbit File、Calibration、Coregistration等然后配置每个节点的参数。搭好之后保存为XML文件就可以通过命令行或者SNAP的批处理界面来执行了。搭建Graph的时候有几个经验节点顺序要和手动操作一致不能跳步。比如配准之前必须先应用轨道文件。参数要仔细核对特别是文件路径、DEM选择、极化方式这些容易出错的地方。先用一景数据测试确认流程跑通之后再批量执行。我见过有人直接拿几十景数据跑结果跑到一半发现参数设错了全部重来。7.2 命令行批处理的实操要点SNAP提供了命令行工具gptGraph Processing Tool可以在终端里执行Graph XML文件。基本用法是gpt /path/to/graph.xml -Pinput1/path/to/master.SAFE -Pinput2/path/to/slave.SAFE -Poutput/path/to/output.dim这里的-P参数用来覆盖Graph XML里定义的变量。你可以写一个shell脚本或者Python脚本循环调用gpt来处理所有影像对。批处理的时候有几个坑要注意内存管理每个gpt进程都会占用内存如果你同时跑多个进程内存很容易爆掉。建议串行执行或者限制并行数量。临时文件清理SNAP处理过程中会产生大量临时文件批处理的时候要定期清理否则磁盘很快就满了。错误处理不是每一对影像都能成功处理有些可能因为数据质量问题失败。脚本里要加上错误捕获记录失败的影像对方便后续排查。7.3 处理效率优化的几个技巧处理效率这件事硬件配置固然重要但软件层面的优化也能省不少时间合理设置多视参数多视可以降低数据量但会损失空间分辨率。根据你的应用需求选择合适的多视因子不要盲目追求高分辨率。使用SSD存储SNAP的I/O操作很频繁用SSD比机械硬盘快很多。关闭不必要的波段输出Graph里可以配置只输出你需要的波段减少写盘时间。分区域处理如果研究区域很大可以分成几个子区域分别处理最后再拼接。8. 几个我踩过的坑和对应的解决方案8.1 配准精度始终不达标的问题有一次处理一批数据配准精度怎么都到不了0.001像素反复检查了轨道文件和DEM都没问题。后来发现是主影像选得不好——那景主影像获取的时候刚好遇到了轻微的轨道机动虽然数据质量标识是正常的但轨道精度实际上受到了影响。换了一景主影像之后配准精度立刻就达标了。这个经验告诉我主影像的选择很关键。一般来说选择时间上居中的、轨道最稳定的、没有质量标记的影像作为主影像。如果做时序分析主影像一旦选定就不要随意更换否则所有影像对都要重新配准。8.2 干涉图上的周期性条纹有一段时间我处理的干涉图上总是出现周期性的条纹间距大概是几百米。排查了很久最后发现是热噪声去除没有做。Sentinel-1的TOPS模式在子条带边界处的热噪声如果不处理就会在干涉图上产生这种周期性条纹。这个问题的隐蔽性在于它不会导致处理失败干涉图看起来也能用但条纹会干扰后续的解缠和形变提取。所以热噪声去除这一步绝对不能省哪怕你的研究区域不在子条带边界附近做了也不会有坏处。8.3 DEM不匹配导致的系统性相位斜坡还有一次干涉图上出现了一个大尺度的相位斜坡一开始以为是轨道误差试了好几种轨道校正方法都没效果。后来发现是DEM的问题——我用的DEM版本和SNAP默认的参考椭球不一致导致地形相位去除的时候引入了一个系统性的偏差。换了一个和SNAP兼容的DEM之后问题就解决了。这个坑的教训是DEM的选择要注意和软件的兼容性。SNAP内置的SRTM DEM是经过适配的直接用一般没问题。如果你要用外部DEM最好先确认一下它的基准面和SNAP使用的一致。8.4 批量处理时的文件路径问题用Graph Builder做批处理的时候文件路径是最容易出问题的地方。Windows和Linux的路径分隔符不同绝对路径和相对路径的解析方式也不同。我有一次在Windows上搭好的Graph拿到Linux服务器上跑所有的文件路径都失效了。解决办法是在Graph里使用变量来代替硬编码的路径然后在命令行通过-P参数传入实际路径。这样Graph文件就和平台无关了在哪个系统上都能跑。另外路径里尽量不要有空格和特殊字符否则容易出解析错误。9. 从预处理到后续分析的衔接预处理做完之后你得到的是一个经过配准、去平地、去地形相位、地理编码的干涉产品。这个产品可以直接用于后续的形变提取比如相位解缠、时序分析等。但有几个衔接上的问题需要注意。相位解缠的输入要求解缠之前干涉图应该已经去除了平地相位和地形相位并且做了适当的滤波。如果滤波过度解缠可能会失败如果滤波不够解缠结果会有很多噪声。这个平衡需要根据数据质量来调整。时序分析的配准一致性如果你要做时序InSAR比如PS-InSAR或者SBAS所有影像必须配准到同一个主影像上。这意味着你不能每对影像单独选主影像而是要确定一个公共主影像然后把所有从影像都配准到它上面。这个工作在预处理阶段就要规划好。数据格式的转换SNAP输出的.dim格式是它自己的格式后续如果用其他软件比如GAMMA、ISCE处理需要转换成对应的格式。SNAP支持导出为GeoTIFF、ENVI等通用格式但要注意导出的时候波段顺序和数据类型是否正确。元数据的保留预处理过程中产生的元数据比如配准精度、相干性统计、处理参数等要妥善保存。这些信息在后续分析中可能用到特别是当你需要写论文或者报告的时候这些参数是必须提供的。整个Sentinel-1 SAR数据预处理流程走下来涉及的步骤确实不少但每一步都有它存在的理由。理解了这些理由你就能在遇到问题的时候知道该往哪个方向排查而不是盲目地试参数。我个人的建议是刚开始的时候不要怕麻烦每一步都手动做一遍看看中间结果长什么样。等你对整个流程有了感觉再用Graph Builder做自动化。这样即使自动化流程出了问题你也能快速定位到是哪个环节的毛病。