从SNAP到StaMPS:Ubuntu环境下PS-InSAR数据处理全流程解析

1. 环境准备与数据获取

在开始PS-InSAR处理之前,我们需要准备好Ubuntu操作系统环境并获取Sentinel-1雷达数据。我推荐使用Ubuntu 18.04或20.04 LTS版本,这两个版本在稳定性与软件兼容性方面表现最佳。

首先安装基础依赖包:

sudo apt update sudo apt install -y git gcc g++ make python3 python3-pip

对于数据获取,阿拉斯加大学(alaska.edu)提供了便捷的Sentinel-1数据下载服务。实际操作中我发现,选择数据时需要注意以下几点:

  • 优先选择同一轨道(relative orbit)的数据,确保影像间有足够重叠区域
  • 时间跨度建议6个月以上,这样能获得更好的时序分析结果
  • 下载时选择SLC(Single Look Complex)格式数据,这是干涉处理的原始数据格式

我通常会建立一个专门的项目目录来管理数据:

mkdir -p ~/insar_project/{data,processing,results} cd ~/insar_project/data # 这里放置下载的.zip格式Sentinel-1数据

2. SNAP软件安装与配置

SNAP(Sentinel Application Platform)是ESA官方开发的雷达数据处理工具。在Ubuntu下安装最新版SNAP(当前为8.0)的步骤如下:

wget https://step.esa.int/downloads/8.0/installers/esa-snap_sentinel_unix_8_0.sh chmod +x esa-snap_sentinel_unix_8_0.sh ./esa-snap_sentinel_unix_8_0.sh

安装完成后需要配置SNAP-StaMPS插件,这个插件负责将SNAP处理结果转换为StaMPS可读格式。我遇到过插件版本不兼容的问题,建议使用以下稳定版本:

cd ~/snap/plugins wget https://github.com/insarlab/SNAP2StaMPS/releases/download/v2.0/snap2stamps-2.0.jar

配置完成后,在终端输入snap即可启动图形界面。第一次启动时会自动下载必要的辅助数据,这个过程可能需要较长时间。

3. Sentinel-1数据预处理流程

SNAP中的干涉处理包含多个关键步骤,每个步骤都有需要注意的技术细节:

3.1 数据分割与轨道校正

# 在SNAP Graph Builder中构建处理流程: Split -> Apply Orbit -> Back-Geocoding -> Deburst -> Subset -> Interferogram

实际操作中发现几个易错点:

  1. Split步骤:必须选择相同的极化方式(建议VV),不同极化数据无法进行干涉处理
  2. Apply Orbit:务必选择"Sentinel Precise Orbit"选项,使用精密轨道文件能显著提高定位精度
  3. Back-Geocoding:主影像(Master)选择很关键,我一般选择时间序列中间且质量最好的影像

3.2 干涉图生成与导出

生成干涉图时需要特别注意:

  • 滤波窗口大小建议设置为32x32,这个参数在城区和山区都能取得不错效果
  • 多视处理(Multilooking)可以降低噪声,但会损失分辨率,我通常选择2:2的比例

导出StaMPS格式时,务必确保:

  1. subset文件在上,干涉图在下
  2. 每个文件包含dem、diff0、geo、rslc四个文件夹
  3. 所有文件整理到一个目录中,目录结构如下:
Export/ ├── dem/ ├── diff0/ ├── geo/ └── rslc/

4. StaMPS环境配置

StaMPS需要MATLAB环境支持,以下是完整的配置过程:

4.1 MATLAB安装

从MathWorks官网下载R2020b或更新版本的Linux安装包。安装时建议选择以下组件:

  • MATLAB主程序
  • Signal Processing Toolbox
  • Image Processing Toolbox
  • Parallel Computing Toolbox(可选,用于加速处理)

4.2 StaMPS安装与编译

git clone https://github.com/dbekaert/StaMPS cd StaMPS/src make make install

编译时常见问题解决:

  • 如果遇到g++版本问题,可以安装g++-7:
    sudo apt install g++-7 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 60
  • 缺少matlab.h头文件时,需要确认MATLAB安装路径是否正确

4.3 环境变量配置

编辑~/.bashrc文件,添加:

export STAMPS_HOME=/path/to/StaMPS export PATH=$STAMPS_HOME/bin:$PATH export MATLABPATH=$STAMPS_HOME/matlab:$MATLABPATH

然后执行source ~/.bashrc使配置生效。

5. PS-InSAR处理实战

在MATLAB中运行处理脚本前,需要先准备masterdate参数。这个日期应该与SNAP中选择的主影像日期一致,格式为YYYYMMDD。

5.1 初始处理脚本

% 基本参数设置 ADD_PS = 0.4; % PS点选择阈值 NPatchesRange = 5; % 距离向分块数 NPatchesAzimuth = 5; % 方位向分块数 masterdate = '20210825'; % 主影像日期 % 准备数据 cmd = ['mt_prep_snap ' masterdate ' ' pwd '/Export ' num2str(ADD_PS) ' ' ... num2str(NPatchesRange) ' ' num2str(NPatchesAzimuth) ' 50 50']; system(cmd); % 启动StaMPS处理 stamps(1,1);

5.2 分块处理与合并

由于大区域处理内存需求高,StaMPS采用分块处理策略:

% 进入每个patch目录运行前5步 for i = 1:NPatchesRange*NPatchesAzimuth cd(['PATCH_' num2str(i)]); stamps(1,5); cd .. end % 合并结果并继续处理 stamps(5,5);

5.3 大气校正与相位解缠

GACOS大气校正数据需要提前申请,处理流程如下:

% 配置GACOS参数 setparm_aps('gacos_datapath','./APS'); setparm_aps('UTC_sat','10:29'); % 卫星过境时间 aps_weather_model('gacos',1,3); % 相位解缠 setparm('unwrap_method','3D'); % 使用3D解缠算法 stamps(6,6); stamps(7,7);

6. 结果可视化与分析

StaMPS提供了多种结果可视化方式,最常用的是形变时间序列图:

ps_plot('V-dao','a_gacos',1,0,0,'ts');

这个命令会生成三种图形:

  1. 平均形变速率图(mm/yr)
  2. 高程误差图(m)
  3. 时间序列形变图(mm)

对于专业分析,我建议将结果导出为GIS兼容格式:

load ps2; load ps_plot_v-do.mat fid = fopen('deformation.xyz','w'); fprintf(fid,'%f %f %f \n',[lonlat ph_disp]'); fclose(fid);

7. 常见问题解决方案

在实际项目中遇到过几个典型问题,这里分享我的解决经验:

7.1 干涉图质量差

可能原因:

  • 主从影像时间基线过长(建议<100天)
  • 空间基线过大(建议<200m)
  • 强大气干扰

解决方案:

  1. 检查影像对的时空基线
  2. 尝试不同的主影像
  3. 应用更严格的多视处理

7.2 PS点数量不足

当研究区域PS点过少时,可以:

  1. 降低ADD_PS阈值(如从0.4调到0.6)
  2. 增大clap_win参数(默认32,可尝试64)
  3. 检查原始数据质量,排除低相干区域

7.3 MATLAB内存不足

对于大数据量处理:

  1. 增加分块数量(NPatchesRange/Azimuth)
  2. 使用MATLAB的memory命令调整Java堆大小
  3. 考虑使用服务器或云计算资源

整个流程走下来,从数据下载到最终形变图生成,大概需要2-3天时间(取决于数据量和硬件配置)。最关键的是SNAP预处理环节,这里的参数设置会直接影响后续分析结果。建议新手先用小区域测试,熟悉流程后再处理大范围数据。