第一次接触D-InSAR技术时,我被那些复杂的名词和流程搞得晕头转向。直到真正用GMTSAR处理了一对哨兵数据后,才发现这套技术就像做三明治——把雷达影像叠在一起,就能"夹"出地表形变信息。哨兵1号卫星的SLC数据是这道"三明治"的核心原料,它携带的微波可以穿透云层,全天候监测地表毫米级的形变。
你可能要问:为什么非得用哨兵数据?我实测对比过多种SAR数据,哨兵1号的TOPS模式(Terrain Observation with Progressive Scans)有三个不可替代的优势:首先是免费开放政策,欧洲航天局的数据门户就像个永不打烊的自助餐厅;其次是12天的重访周期,比大多数商业卫星更频繁;最后是稳定的轨道控制,这对干涉测量至关重要。记得2021年处理深圳地表沉降时,就是靠哨兵数据捕捉到了建筑工地周边2.8厘米的细微下沉。
准备数据时要注意两个关键文件:SLC影像和精密轨道数据(Precise Orbit Ephemerides)。前者可以在阿拉斯加卫星设施(ASF)官网下载,后者需要到哥白尼数据中心获取。新手常犯的错误是混用不同来源的轨道数据,我有次就因此浪费三天时间——轨道文件就像导航地图,用错版本会导致整个定位系统偏差。
在Ubuntu 20.04上配置GMTSAR环境时,我建议直接用conda安装,比源码编译省心得多。新建一个Python3.8环境后,三条命令就能搞定基础依赖:
bash复制conda install -c conda-forge gmtsar
conda install -c conda-forge gmt
conda install -c conda-forge snaphu
数据目录结构是容易被忽视的重点。我的项目文件夹通常这样组织:
code复制/Sentinel_Project
├── raw/ # 存放原始SLC数据
├── orbit/ # 精密轨道文件
├── topo/ # DEM数据
├── config/ # 配置文件
└── merge/ # 结果输出
下载DEM数据时有个坑要注意:GMTSAR官方推荐的1弧秒SRTM(约30米分辨率)只适合4°×4°范围内的小区域。去年处理横断山脉项目时,我不得不改用NASA的NASADEM-HGT数据,因为大范围拼接时SRTM会出现明显接缝。用make_dem.csh生成DEM时,记得加-r参数指定分辨率,否则默认值可能导致后续配准偏差。
config.s1a.txt这个配置文件就像乐高说明书,每个参数都影响最终成品的精度。我把核心参数分成五类:
bash复制proc_stage = 1 # 从预处理开始
skip_stage = # 不跳过任何阶段
新手建议保持默认,有经验后可以设置skip_stage跳过已完成步骤。上周帮同事调试时,就通过设置proc_stage=4直接从干涉图生成开始,省了6小时计算时间。
bash复制filter_wavelength = 200 # 滤波波长(米)
range_dec = 8 # 距离向降采样
azimuth_dec = 2 # 方位向降采样
这里有个平衡点:波长越大去噪效果越好,但会损失细节。处理城市沉降时我用120米,而冰川监测则用300米。降采样系数直接影响结果分辨率,我的经验法则是:快速评估用8/2,最终成果用4/1。
bash复制threshold_snaphu = 0.1 # 相干系数阈值
mask_water = 1 # 水域掩膜
defomax = 65 # 最大形变量(周期数)
解缠是D-InSAR最脆弱的环节。阈值设0.15会丢失细节,0.05又会产生噪声。对于地震同震形变,必须调高defomax,否则会切断真实形变场。去年处理泸定地震时,defomax=65才完整保留了断层错动信息。
运行主处理脚本时,参数顺序就像电话号码不能错:
bash复制p2p_S1_TOPS_Frame.csh \
S1A_IW_SLC__1SDV_20210520T112620_20210520T112704_037971_047B4F_0A0A.SAFE \
S1A_OPER_AUX_POEORB_OPOD_20210609T121911_V20210519T225942_20210521T005942.EOF \
S1B_IW_SLC__1SDV_20210526T112538_20210526T112628_027075_033C0F_3031.SAFE \
S1B_OPER_AUX_POEORB_OPOD_20210615T111837_V20210525T225942_20210527T005942.EOF \
config.s1a.txt vv 1
结果文件中,这四个最有价值:
corr_ll.grd:相干系数图,值越高可靠性越好。城市区域通常>0.3,植被区<0.1phasefilt_ll.grd:滤波后的干涉相位,每个条纹代表2.8cm形变unwrap_ll.grd:解缠后的绝对相位,需转换为形变量los_ll.grd:视线向形变图,正值为远离卫星运动转换解缠相位到形变量的公式暗藏玄机:
bash复制grdmath unwrap_mask_ll.grd 0.0554658 MUL -79.58 MUL = los_ll.grd
这个魔法数字其实是λ/4π,其中λ是哨兵1号的C波段波长(5.54658cm)。负号表示相位增加对应地表远离卫星。去年某次报告中,我忘了这个负号,把沉降解释成了抬升,闹了大笑话。
最终成图前一定要做滤波处理:
bash复制gmt grdfilter los_ll.grd -Glos_ll_filter.grd -D1 -Fg10+h -V
高斯滤波的窗口大小(-Fg10)需要根据形变特征调整:城市用5-10,地质构造用15-20。太大会平滑真实形变,太小又残留噪声。我习惯生成多组参数对比,选择最能突出目标特征的版本。