一 安装ubuntu
教程参考:https://baijiahao.baidu.com/s?id=1741674041146755999&wfr=spider&for=pc
建议安装18或者20版本,版本过高会导致版本不匹配的问题。
二安装Anaconda3
教程参考:https://zhuanlan.zhihu.com/p/269183148
注意安装的python环境建议为3.6-3.8版本,版本过高也会导致适配问题。
三安装isce2.6
教程参考:https://zhuanlan.zhihu.com/p/269183148
注意这里使用的在线安装,安装过程会存在失败的情况,多重复几次即可,网上很多离线安装的方法,也可以尝试下。
涉及到环境配置如下:
# ISCE2 #
export ISCE_HOME=/home/serena/anaconda3/envs/isce2_env/lib/python3.8/site-packages/isce
export PATH=$PATH:$ISCE_HOME/applications:$ISCE_HOME/bin
export ISCE_STACK=/home/serena/isce2
export prepStackToStaMPS=/home/serena/isce2/contrib/timeseries/prepStackToStaMPS
export PATH=$prepStackToStaMPS/bin:/home/serena/isce2/contrib/stack/topsStack:$PATH
其中export ISCE_HOME=/home/serena/anaconda3/envs/isce2_env/lib/python3.8/site-packages/isce,为在线安装成功后的文件路径,测试topsApp.py --steps --help
和topsApp.py -h就能提示安装成功。
但ps和sbas处理时会用到contrib文件夹下的timeseries和stack两个包,在线安装是没有的,因此存在安装教程中还离线下载包并配置这另个环境的原因。按照
export ISCE_STACK=/home/serena/isce2
export prepStackToStaMPS=/home/serena/isce2/contrib/timeseries/prepStackToStaMPS
export PATH=$prepStackToStaMPS/bin:/home/serena/isce2/contrib/stack/topsStack:$PATH
配置环境后会存在提示找不到文件的情况,可能需要增加配置
export PYTHONPATH="/home/yzm/isce2/contrib/stack:$PYTHONPATH"
export PYTHONPATH="/home/yzm/isce2/contrib/timeseries:$PYTHONPATH"
。
四安装matlab
由于stamps的运行环境为matlab,因此需要优先安装,可以参考的教程为:
https://blog.csdn.net/weixin_43713224/article/details/117548355
需要环境配置中添加alias matlab=“/usr/local/Polyspace/R2020a/bin/matlab”,用于 命令窗口matlab启动程序。
五安装stamps
参考教程如下:https://zhuanlan.zhihu.com/p/53564322
需要注意的是,这个环境变量配置在stamps自己的安装包中的StaMPS_CONFIG修改,在系统的环境变量中只添加StaMPS_CONFIG的路径和启动配置,如下:
# stamps#
export STAMPS_HOME=/home/yzm/文档/StaMPS-master
export SNAPHU_HOME=/home/yzm/文档/snaphu-v2.0.4
export TRAIN_HOME=/home/yzm/文档/TRAIN-master
export PATH=$PATH:$STAMPS_HOME/bin:$SNAPHU_HOME/bin:$TRAIN_HOME/bin
source /home/yzm/文档/StaMPS-master/StaMPS_CONFIG.bash
其中snaphu-v2.0.4和TRAIN-master是stamps使用所需的额外包,也一并配置。
参考教程:https://blog.csdn.net/sa_V_ic/article/details/125997556
六数据预备
需要下载哨兵1和轨道文件,哨兵1下载网址如下:
https://search.asf.alaska.edu/#/
下载py脚本,在命令窗口中python ×× 运行该脚本,下载影像。
下载轨道文件,使用程序:
from data_downloader import downloader,parse_urls
from pathlib import Path
import pandas as pd
import datetime as dt
folder_aux = Path('/home/yzm/文档/INSAR/AxuDir') # 指定aux_cal,辅助数据 的下载文件夹
folder_preorb = Path('/home/yzm/文档/INSAR/Orbits') # 指定aux_poeorb,精密轨道数据 的下载文件夹
def filter_aux_cal_urls(urls, platform='all'):
'''filter files from urls of aux_cal by platform.
Parameters:
----------
urls : list
a list contains the urls of aux_cal
platform : str
platform of satellite. should be one of ['S1A', 'S1B','all']
'''
if platform in ['S1A', 'S1B','all']:
if platform == 'all':
platform = ['S1A', 'S1B']
else:
platform = [platform]
else:
raise ValueError("platform must be one of ['S1A', 'S1B','all']")
_urls = [i for i in urls if Path(i).suffix == '.SAFE']
urls_filter = [i for i in _urls if Path(i).stem[:3] in platform]
return urls_filter
def filter_aux_poeorb_urls(urls, date_start, date_end, platform='all'):
'''filter files from urls of aux_poeorb(precise orbit) by date and platform.
Parameters:
----------
urls : list
a list contains the urls of aux_cal
date_start, date_end : str
start/end date to filter
platform : str
platform of satellite. should be one of ['S1A', 'S1B','all']
'''
if platform in ['S1A', 'S1B', 'all']:
if platform == 'all':
platform = ['S1A', 'S1B']
else:
platform = [platform]
else:
raise ValueError("platform must be one of ['S1A', 'S1B','all']")
date_start = pd.to_datetime(date_start).date()
date_end = pd.to_datetime(date_end).date()
_urls = [i for i in urls if Path(i).suffix == '.EOF']
urls_filter = []
for i in _urls:
name = Path(i).stem
dt_i = (pd.to_datetime(name.split('_')[-1]).date()
- dt.timedelta(days=1))
if (name[:3] in platform and
date_start <= dt_i <= date_end):
urls_filter.append(i)
return urls_filter
# 执行下载 #
# ########### download aux_cal #####################
home_aux_cal = 'https://s1qc.asf.alaska.edu/aux_cal/'
urls_aux_cal = parse_urls.from_html(home_aux_cal)
urls = filter_aux_cal_urls(urls_aux_cal,'S1A') # 获取S1A的所有辅助数据的链接
downloader.async_download_datas(urls, folder=folder_aux)
########### download precise orbit ############
home_preorb = 'https://s1qc.asf.alaska.edu/aux_poeorb/'
urls_preorb = parse_urls.from_html(home_preorb)
urls = filter_aux_poeorb_urls(urls_preorb,
'20220101', '20221215',
'S1A') # 获取所有S1A在20210101-20221215期间的精密轨道数据的链接
downloader.download_datas(urls, folder=folder_preorb)
七isce开始处理
先下载对应区域的dem数据,教程如下:
https://blog.csdn.net/weixin_42464154/article/details/120620958?spm=1001.2014.3001.5501,设置asf帐号和密码如下。
machine urs.earthdata.nasa.gov
login ######
password ######
第六步中也需要用到这个配置帐号。
创建文件夹,命令如下:
mkdir DEM
mkdir SLC
mkdir AxuDir
mkdir Orbits
mkdir Process
将下载的哨兵1放入SLC,将轨道文件放入Orbits。
在DEM中下载dem,命令如下:
cd DEM
dem.py -a stitch -b 30 31 110 112 -r -s 1 -c
rm demLat*.dem demLat*.dem.xml demLat*.dem.vrt
isce生成批处理文件命令如下:
cd Process
stackSentinel.py -s ../SLC/ -d ../DEM/demLat_N30_N31_Lon_E110_E112.dem.wgs84 -a ../AuxDir/ -o ../Orbits -b '30.76 30.94 110.87 111.13' -W slc
在Process文件夹下生成了
这就是时序insar处理时的步骤文件,依次运行即可。这里用python脚本批运行。代码如下:
#!/usr/bin/env python3
#适用于isce2.5及以上版本
import os
import time
start_time = time.time()
print('读取文件')
fileList=os.listdir('./run_files')
for i in range(0,len(fileList)):
for file in fileList:
if i<9:
if file[:7] =='run_0{}_'.format(i+1):
print('*******处理文件:{}********'.format(file))
run_file=open('./run_files/{}'.format(file))
for line in run_file:
print('**运行命令:{}**'.format(line))
os.system(line)
else:
if file[:7] =='run_{}_'.format(i+1):
print('*******处理文件:{}********'.format(file))
run_file=open('./run_files/{}'.format(file))
for line in run_file:
print('**运行命令:{}**'.format(line))
os.system(line)
m, s = divmod(time.time()-start_time, 60)
print('使用时间: {:02.0f} mins {:02.1f} secs\n'.format(m, s))
print('*********完成处理********')
运行完成后,生成如下文件夹:
其中最后的文件都在merged文件夹中。
接下来生成stamps需要的文件格式,在根目录下创建配置文件input_file,文件内容如下:
对应的文件夹路径按照本地路径修改。
source_data slc_stack
slc_stack_path /home/yzm/文档/INSAR/Process/merged/SLC
slc_stack_reference 20220725
slc_stack_geom_path /home/yzm/文档/INSAR/Process/merged/geom_reference
slc_stack_baseline_path /home/yzm/文档/INSAR/Process/merged/baselines
range_looks 40
azimuth_looks 10
aspect_ratio 4
lambda 0.056
slc_suffix .full
geom_suffix .full
其中slc_stack_reference 为主影像日期。
参考教程如下:https://blog.csdn.net/ZB18810657133/article/details/116271460?spm=1001.2014.3001.5501
在input_file所在路径命令窗口运行命令,make_single_reference_stack_isce,生成如下文件夹:
接下来在make_single_reference_stack_isce命令生成的INSAR_20220602目录下,运行如下命令:
mt_extract_info_isce#在INSAR_20220602路径下命令窗口 运行
sb_find(0.4,48,150)#matlab中运行,生成连接图,三个参数分别为最小相干性、最大的时间基线、最大的空间基线
make_small_baselines_isce#在INSAR_20220602路径下命令窗口 运行,生成SMALL_BASELINES文件夹
mt_prep_isce 0.3 3 2 50 200#在SMALL_BASELINES文件夹中运行,提取所需信息,幅度校正,建立分块,选取初始高相干候选点。(0.6这个值要比ps的高点。山区阈值选择0.3)其中3×2就是PATCH块的个数。
注意mt_prep_isce参数设置依次为:
da_thresh //幅度离差阈值,一般取值0.4-0.42,小于此幅度离差的选为PS候选点,默认为0.4
rg_patches //距离向上分块,默认为1
az_patches //方位向上分块,默认为1
rg_overlap //距离向上块间重叠像元数,默认50
az_overlap //方位向上块间重叠像元数,默认200
参考教程如下:
https://blog.csdn.net/ZB18810657133/article/details/120113396
https://www.bilibili.com/video/BV1pm4y1976U?p=3&vd_source=cef0275840744dbd9a65e929713146b2
其中小基线文件夹SMALL_BASELINES,为stamps处理的根目录。八stamps数据处理
在matlab下的SMALL_BASELINES文件夹进行数据处理,分别执行stamps1-5步骤,然后执行ps_merge_patches,合并步骤5中的分块文件夹。再运行stamps6-8,最后matlab中ps_plot(‘v’ ,4)可以显示结果。
参考教程如下:https://blog.csdn.net/ZB18810657133/article/details/119211263
在运行stamps(1,1)等过程中存在报错的情况,说找不到master,原因在于stamps中代码将主影像编写为master,但isce2.5以后,master用reference替代了,因此需要将stamps中对应文件中的代码中查找master,全部替换为reference。按住ctrl,点击报错显示的代码行,进入后在matlab中用查找工具统一替换。
补上一些绘图命令:
matlab运行过程会报错,因此需要安装如下插件:
sudo apt install tcsh
sudo apt-get install gawk
sudo apt-get install libcanberra-gtk-module
sudo apt-get install libgtk2.0-dev
sudo ln -s /usr/lib/x86_64-linux-gnu/gtk-2.0/modules/libcanberra-gtk-module.so /usr/lib/libcanberra-gtk-module.so
1、Ubuntu 18.04/20.04 默认安装了libcanberra-gtk3-module(gtk-3.0+),而Matlab需要调用的是gtk-2.0+的canberra动态链接库;
(实际上gtk-3.0+目录下也有2.0+版本的动态链接库文件,但似乎Matlab并不支持同一路径下的多版本libcanberra-gtk-module.so)
2、linux默认库是从“/usr/lib/”路径下找,而canberra动态链接库位于“/usr/lib/x86_64-linux-gnu/”路径下;