☰
Sentinel-1A影像PSSBAS地面沉降监测:从数据预处理到形变解算的工程化实践
2026/10/15 10:19:17 网站建设 项目流程

简介:这份PPT资料面向地质灾害监测、InSAR遥感与测绘方向的学习者与工程技术人员,围绕Sentinel-1A卫星影像,系统讲解PS与SBAS两类时序InSAR地面沉降监测方法。内容以天津沉降典型区域为案例,涵盖数据预处理、PSInSAR与SBAS技术流程、参数设置、辅助DEM数据、地理编码及结果展示等环节,并给出传感器、波段、极化方式、轨道方向、影像数量与覆盖时间等关键参数,帮助读者建立从SLC数据到形变速率产品的完整认知。资源包共1个pptx文件,约36.93MB,以幻灯片形式组织技术流程与案例图示,便于按模块查阅与汇报复用。目前已有500人学习下载,适合希望掌握SAR沉降监测原理、流程与工程实现思路的读者参考。

1. 从一份PPT标题说起:Sentinel-1A影像做地面沉降监测,PSSBAS到底怎么落地

第一次看到“基于Sentinel-1A卫星影像PSSBAS地面沉降监测”这个标题,很多人会卡在PSSBAS这个词上——它不像SBAS、PS-InSAR那样在公开文献里高频出现,更像是把PS(永久散射体)和SBAS(小基线集)两条技术路线做了工程化缝合的一套处理流程。我最早接触这类需求是在一个地面沉降普查项目里,甲方给的要求很直接:用免费雷达影像,把某区域过去几年的沉降速率图做出来,精度要能支撑后续巡查。Sentinel-1A的C波段数据是首选,因为它重访周期稳定、覆盖广、数据可公开获取,而PSSBAS这套思路解决的核心问题是:纯PS方法在低相干区域点太稀,纯SBAS在城区又容易丢细节,两者结合才能在城区和城郊过渡带都拿到可用的形变场。这篇文章面向的是已经会用SNAP或ISCE做基础InSAR处理、想进一步把时序沉降监测跑通的人,我会按“数据准备→核心处理→参数调优→避坑”的顺序,把能复现的步骤和参数讲清楚。

2. Sentinel-1A数据选型与预处理:从下载到配准的完整链路

2.1 为什么Sentinel-1A的IW模式是沉降监测的默认选项

Sentinel-1A搭载的C波段SAR,波长约5.6厘米,对地表微小形变敏感,同时C波段在植被穿透和大气影响之间取得了一个工程上可接受的平衡。做地面沉降监测,通常选IW(干涉宽幅)模式下的SLC产品,因为它以TOPS模式成像,三个子条带拼接后幅宽250公里,方位向分辨率约20米,距离向约5米,单景覆盖范围足够大,能减少拼接带来的相位不连续问题。升降轨数据的选择要看沉降方向:如果区域以垂向沉降为主,升轨和降轨都能用,但降轨对南北向形变更敏感,实际项目里我一般会同时下载升轨和降轨,后续做二维形变分解。时间基线方面,Sentinel-1A单星重访周期是12天,但实际可用干涉对受轨道管控制约,同一轨道号的数据才能做干涉,所以下载前先确认相对轨道号和帧号,别拿到不同轨道的影像硬配,那是白费功夫。

2.2 用SNAP做轨道校正、去burst和配准的最小命令

预处理阶段我习惯用SNAP的GPT命令行模式,方便批量跑。下面这段bash脚本完成的是:应用精密轨道文件、去burst拼接、基于DEM配准、生成干涉图。每一步都有对应的参数含义,改的时候心里有数。

# 批量预处理Sentinel-1A SLC对 # 输入:主影像master.zip、从影像slave.zip、DEM文件 # 输出:配准后的干涉图 gpt Apply-Orbit-File.xml \ -Pfile=master.zip \ -PorbitType=Sentinel Precise \ -PpolyDegree=3 \ -t master_orb.dim gpt Apply-Orbit-File.xml \ -Pfile=slave.zip \ -PorbitType=Sentinel Precise \ -PpolyDegree=3 \ -t slave_orb.dim # TOPSAR Split:按子条带拆分,避免burst间相位跳变 gpt TOPSAR-Split.xml \ -Psubswath=IW2 \ -PselectedPolarisations=VV \ -t master_split.dim gpt TOPSAR-Split.xml \ -Psubswath=IW2 \ -PselectedPolarisations=VV \ -t slave_split.dim # 应用轨道文件到拆分后的数据 gpt Apply-Orbit-File.xml \ -Pfile=master_split.dim \ -PorbitType=Sentinel Precise \ -t master_orb_split.dim # 配准:Back-Geocoding,用DEM辅助 gpt Back-Geocoding.xml \ -PdemName=SRTM 1Sec HGT \ -PdemResamplingMethod=BILINEAR_INTERPOLATION \ -PresamplingType=BILINEAR_INTERPOLATION \ -t coregistered.dim # 生成干涉图 gpt Interferogram.xml \ -Psubswath=IW2 \ -PselectedPolarisations=VV \ -t ifg.dim

这段脚本里,Apply-Orbit-File的orbitType选Sentinel Precise,因为精密轨道文件在影像获取后约20天发布,精度到厘米级,比快速轨道可靠得多。TOPSAR-Split的subswath参数选IW2是经验做法——IW2通常覆盖研究区中心,且burst重叠度适中,后续去burst时相位跳变最少。Back-Geocoding里的DEM用SRTM 1Sec HGT,重采样方法选双线性,因为地形起伏大的区域用最近邻会产生阶梯状误差。配准完成后,检查coregistered.dim里的相干性图,如果整体相干性低于0.3,说明主从影像时间基线太长或区域植被太密,需要换干涉对。

2.3 去burst与相干性估计:两个容易被忽略的细节

去burst(Deburst)这步在SNAP里叫TOPSAR-Deburst,它的作用是把多个burst拼接成连续条带,消除burst之间的相位跳变。很多人跑完干涉图直接看相位,发现有条带状的异常,八成是没做去burst。命令很简单,但要注意:去burst必须在配准之后、滤波之前做,顺序错了相位就救不回来。相干性估计用Coherence算子,窗口大小我一般设cohWinAz=4、cohWinRg=20,这个组合在城区和农田过渡带都能拿到稳定的相干性估计。窗口再大,空间分辨率损失明显;窗口太小,相干性估计噪声大,后续PS点选取会混入大量虚假点。

3. PSSBAS核心处理:PS点选取、SBAS组网与形变解算

3.1 PS点选取:振幅离散指数与相干性系数的双阈值策略

PSSBAS的第一步是选出永久散射体候选点。纯PS方法常用振幅离散指数(ADI)来筛选,公式是振幅标准差除以振幅均值,阈值一般设0.25。但在低相干区域,ADI会漏掉很多有效点,所以PSSBAS里我通常会叠加相干性系数作为第二判据:相干性均值大于0.7且时序相干性标准差小于0.15的点才保留。下面这段Python代码用numpy和gdal读取相干性时序栈,计算双阈值掩膜。

import numpy as np from osgeo import gdal # 读取相干性时序栈,假设有N个干涉对,每个文件是单波段tif coh_stack = [] for i in range(N): ds = gdal.Open(f'coh_{i}.tif') coh_stack.append(ds.ReadAsArray()) coh_stack = np.array(coh_stack) # shape: (N, H, W) # 计算时序相干性均值和标准差 coh_mean = np.mean(coh_stack, axis=0) coh_std = np.std(coh_stack, axis=0) # 双阈值掩膜 mask = (coh_mean > 0.7) & (coh_std < 0.15) # 统计候选点数量 print(f'候选PS点数量: {np.sum(mask)}') print(f'占全图比例: {np.sum(mask) / mask.size:.4f}')

这段代码里,coh_mean > 0.7保证点在整个时间序列上保持稳定,coh_std < 0.15排除那些偶尔相干但整体不稳定的点。两个阈值不是拍脑袋定的:相干性均值0.7对应相位标准差约0.2弧度,换算成C波段形变约1.1毫米,满足沉降监测的毫米级需求;标准差0.15则过滤掉那些因季节变化或农事活动导致的伪稳定点。实际跑的时候,如果候选点太少,先把相干性均值降到0.6试试,但标准差阈值别动,否则后续解算容易发散。

3.2 SBAS组网:小基线集的时间基线与空间基线约束

PSSBAS的SBAS部分负责把PS点连成网络,通过多组小基线干涉对来解算时序形变。组网的核心是两个约束:时间基线不超过60天,空间基线不超过150米。时间基线太长,相干性下降快;空间基线太大,地形相位残差难消除。下面这段代码用networkx构建干涉对图,并输出可用的边列表。

import networkx as nx import itertools # 假设有M景影像,每景有获取日期和垂直基线 dates = [...] # 获取日期列表,datetime格式 baselines = [...] # 垂直基线列表,单位米 G = nx.Graph() G.add_nodes_from(range(M)) # 遍历所有影像对,满足约束的加边 for i, j in itertools.combinations(range(M), 2): dt = abs((dates[i] - dates[j]).days) db = abs(baselines[i] - baselines[j]) if dt <= 60 and db <= 150: G.add_edge(i, j, weight=dt) # 输出边列表 edges = list(G.edges(data=True)) print(f'可用干涉对数量: {len(edges)}') for e in edges[:5]: print(f'影像{e[0]}-{e[1]}, 时间基线{e[2]["weight"]}天')

这段代码的关键在于dt <= 60和db <= 150这两个阈值。时间基线60天是经验值,Sentinel-1A在C波段下,60天内城区相干性通常能保持在0.5以上;空间基线150米对应垂直基线去相关相位小于0.3弧度,不会淹没形变信号。如果研究区植被覆盖高,时间基线要收紧到36天;如果地形平坦且城区为主,可以放宽到72天,但别超过90天,否则解算时奇异值分解的条件数会变得很差。

3.3 形变解算:从相位到沉降速率的转换与参考点选择

解算阶段用最小二乘或奇异值分解(SVD)求解形变速率。PSSBAS里我一般用SVD,因为干涉对数量多于影像数时,最小二乘会秩亏。解算前要选参考点,参考点选在已知稳定的基岩出露区或远离沉降中心的城区。下面这段代码展示用scipy的lstsq做解算的核心逻辑。

import numpy as np from scipy.linalg import lstsq # 构建观测矩阵A,每行对应一个干涉对,每列对应一景影像 # A[i, master] = -1, A[i, slave] = 1, 其余为0 A = np.zeros((num_ifg, num_images)) for k, (m, s) in enumerate(ifg_pairs): A[k, m] = -1 A[k, s] = 1 # 相位观测值,已去除地形相位和大气相位 phi = np.array([...]) # 长度等于num_ifg # 解算形变相位,单位弧度 # 注意:这里假设形变是线性的,非线性形变需要加周期项 x, residuals, rank, sv = lstsq(A, phi) # 转换为沉降速率,C波段波长5.6cm wavelength = 0.056 # 米 velocity = x * wavelength / (4 * np.pi) # 米/天 velocity_mm_per_year = velocity * 1000 * 365 print(f'平均沉降速率: {np.mean(velocity_mm_per_year):.2f} mm/year')

这段代码里,A矩阵的构建方式是SBAS的标准做法:每个干涉对对应主影像-1、从影像+1,这样解出的x就是每景影像相对于参考时间的形变相位。lstsq返回的residuals用来评估拟合质量,如果残差相位标准差超过0.5弧度,说明有未建模的误差,通常是大气延迟或轨道残差。velocity_mm_per_year是最终输出,正值表示抬升,负值表示沉降。参考点的选择直接影响绝对速率,我一般选在研究区边缘的稳定区域,且该点在所有干涉对里相干性都高于0.8。

4. 避坑与排查:PSSBAS落地时最容易翻车的五个地方

4.1 相位解缠错误导致沉降区域出现“孤岛”

现象:沉降中心周围出现一圈不连续的相位跳变,解缠后的形变图里沉降区像孤岛一样被高值包围。原因:相位解缠时如果相干性阈值设得太低,低相干区域的噪声会被当成真实相位梯度,解缠算法在噪声区累积误差,形成2π跳变。解决:解缠前先做相干性掩膜,把相干性低于0.3的区域标记为无效,解缠时跳过这些区域。SNAP里用SnaphuExport时,在cohThreshold参数里设0.3,同时把initMethod改成MCF,比MST在低相干区更稳健。

4.2 大气延迟让沉降速率出现季节性波动

现象:解算出的时序形变曲线呈现明显的年周期,夏季沉降快、冬季沉降慢,但地质资料显示该区域没有季节性地下水开采。原因:C波段对大气水汽敏感,夏季水汽含量高,相位延迟大,被误当成形变。解决:用GACOS或ERA5数据做大气校正。GACOS提供每6小时的水汽场,下载后按影像获取时间插值,从干涉相位里减去大气相位。如果拿不到GACOS,至少用高通滤波在时间维度上分离大气和形变,因为大气是短周期信号,形变是长周期趋势。

4.3 PS点密度在城郊过渡带骤降

现象:城区PS点密度每平方公里上千,到了城郊农田区骤降到几十,沉降漏斗边缘的形变梯度完全丢失。原因:农田区植被覆盖导致相干性低,纯PS方法选不出点。解决:PSSBAS里引入分布式散射体(DS)点,用相干性矩阵的特征值分解来选DS点,阈值设特征值比大于0.6。DS点虽然相位噪声比PS大,但密度能提升3到5倍,配合SBAS组网后形变场连续性明显改善。

4.4 轨道误差在长条带影像上表现为线性相位斜坡

现象:干涉图在距离向或方位向出现线性相位趋势,解缠后形变图整体倾斜。原因:精密轨道文件虽然精度高,但残余轨道误差在长条带上仍会累积,尤其是跨多个子条带时。解决:用多项式拟合去除残余轨道相位。在SNAP里用Remove-Ramp算子,选polynomialDegree=2,同时勾选addRampToPhase为false。如果斜坡在方位向,把rampDirection改成azimuth。拟合后检查残差相位,标准差应小于0.3弧度。

4.5 参考点选错导致全区沉降速率整体偏移

现象:解算出的沉降速率图里,明明稳定的基岩区显示每年下沉5毫米,而沉降中心反而只有2毫米。原因:参考点选在了沉降区内部,所有速率相对于一个下沉的点计算,导致整体偏移。解决:参考点必须选在已知稳定的区域,且该点在所有干涉对里相干性高于0.8。如果研究区没有明显稳定区,用全球导航卫星系统(GNSS)站点做绝对校准,把GNSS测得的垂向速率作为约束,反推参考点的真实形变。

5. 进阶技巧:用时序交叉验证判断沉降是否真实

跑完PSSBAS拿到沉降速率图,别急着出报告。我一般会做两件事来验证结果是否可信。第一件是分时段解算:把时间序列切成前后两段,分别解算速率,如果两段速率差异小于1毫米每年,说明形变是线性的,结果可靠;如果差异大,说明有非线性形变,需要加周期项或分段建模。第二件是升降轨交叉验证:升轨和降轨分别解算垂向速率,理论上两者应该一致,如果差异超过2毫米每年,说明有水平形变分量,需要做二维分解。下面这个表格是我常用的验证指标和阈值。

验证项计算方法可接受阈值超限处理
分时段速率差前段速率减后段速率< 1 mm/year加周期项或分段解算
升降轨垂向速率差升轨垂向减降轨垂向< 2 mm/year做二维形变分解
残差相位标准差解算后残差相位统计< 0.5 rad检查大气校正和轨道误差
PS点时序相干性每个PS点的相干性均值> 0.7剔除低相干点重新组网
GNSS对比最近GNSS站点速率差< 3 mm/year重新选参考点或校准

这张表里的阈值不是绝对的,得根据研究区的地质条件和数据质量调整。比如在软土地区,分时段速率差可能天然就大于1毫米每年,因为软土固结是非线性的,这时候阈值要放宽到2毫米每年。升降轨交叉验证里,如果研究区有采空区导致水平形变,垂向速率差可能到5毫米每年,这时候必须做二维分解,否则垂向速率会被水平分量污染。

最后说一个我踩过的坑:有一次跑完PSSBAS,沉降速率图看起来很正常,但把结果叠加到光学影像上发现,沉降中心正好对应一个大型建筑工地。当时以为是施工降水导致的沉降,后来查了施工记录,发现工地那段时间在基坑开挖,地表是抬升不是沉降。问题出在相位解缠的符号上——SNAP默认的相位符号约定和我的解算代码不一致,导致沉降和抬升反了。从那以后,我每次解算完都会拿一个已知的GNSS站点做符号校验,确认沉降方向正确再往下走。这个习惯帮我省了很多后悔药。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询