从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实际操作中发现几个易错点:
- Split步骤:必须选择相同的极化方式(建议VV),不同极化数据无法进行干涉处理
- Apply Orbit:务必选择"Sentinel Precise Orbit"选项,使用精密轨道文件能显著提高定位精度
- Back-Geocoding:主影像(Master)选择很关键,我一般选择时间序列中间且质量最好的影像
3.2 干涉图生成与导出
生成干涉图时需要特别注意:
- 滤波窗口大小建议设置为32x32,这个参数在城区和山区都能取得不错效果
- 多视处理(Multilooking)可以降低噪声,但会损失分辨率,我通常选择2:2的比例
导出StaMPS格式时,务必确保:
- subset文件在上,干涉图在下
- 每个文件包含dem、diff0、geo、rslc四个文件夹
- 所有文件整理到一个目录中,目录结构如下:
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');这个命令会生成三种图形:
- 平均形变速率图(mm/yr)
- 高程误差图(m)
- 时间序列形变图(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)
- 强大气干扰
解决方案:
- 检查影像对的时空基线
- 尝试不同的主影像
- 应用更严格的多视处理
7.2 PS点数量不足
当研究区域PS点过少时,可以:
- 降低ADD_PS阈值(如从0.4调到0.6)
- 增大clap_win参数(默认32,可尝试64)
- 检查原始数据质量,排除低相干区域
7.3 MATLAB内存不足
对于大数据量处理:
- 增加分块数量(NPatchesRange/Azimuth)
- 使用MATLAB的memory命令调整Java堆大小
- 考虑使用服务器或云计算资源
整个流程走下来,从数据下载到最终形变图生成,大概需要2-3天时间(取决于数据量和硬件配置)。最关键的是SNAP预处理环节,这里的参数设置会直接影响后续分析结果。建议新手先用小区域测试,熟悉流程后再处理大范围数据。
