ubuntu18中ISCE2.6+stamps实现PSInSAR时序地表形表处理

  • Post author:
  • Post category:其他



一 安装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/”路径下;



版权声明:本文为weixin_42464154原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。