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

news2024/9/22 23:24:24

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/98833.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计Python4S店汽车售后服务管理系统(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

RBAC与连表查询

文章目录0. 前言1. RBAC模型1.1 什么是RBAC模型1.2 准备工作2. 连表操作2.1 常用连表图2.2 准备SQL语句2.3 Mybatis 连表3. 总结与补充0. 前言 连表学习、练习经典&#xff1a;RBAC权限模型、5表联查。 本文采用的持久层实现方式&#xff1a;Mybatis/Mybatis-Plus。 学习基础…

QT系列第6节 QT中常用控件

1. QComboBox 下拉列表 2. QPlainTextEdit QPlainTextEdit的文字内容以QTextDocument类型存储&#xff0c;函数document返回这个文档 对象的指针 QTextDocument是内存中的文本对象&#xff0c;以文本块方式存储&#xff0c;每个段落以换行符结束。 QTextDocument提供一些…

常用日期类

第一代日期类 Date类 Date&#xff1a;精确到毫秒&#xff0c;代表特定的瞬间 当需要获取当前时间时可以直接new一个Date对象&#xff0c;使用无参构造器 Date date new Date();日期转文本 但是直接使用的话&#xff0c;它是国外的时间格式&#xff1a;Sat Dec 17 17:02:3…

Apache IoTDB v1.0.0安装试用小结( linux环境)

1 简介 Apache IoTDB 是一个开源物联网时序数据库。 github地址&#xff1a;https://github.com/apache/iotdb 2 下载 下载地址&#xff1a;https://iotdb.apache.org/Download/ 下载&#xff0c;输入命令&#xff1a; wget https://archive.apache.org/dist/iotdb/1.0.…

【简单工厂模式-2】简单工厂模式的代码实现及使用场景

简单工厂模式并属于Gof 23个经典设计模式其中之一&#xff0c;只是通常会将它作为学习其他工厂设计模式的入门&#xff0c;而且在开发中&#xff0c;简单工厂模式也是比较常见的&#xff0c;设计思想比较简单。 1. 定义 简单工厂模式定义一个工厂类&#xff0c;提供获取对象的…

Makefile、.mk、.bp、Blueprint、Soong、kati工具链的关系

一、Android版本相应的发展演变过程: Android 7.0引入ninja和kati Android 8.0使用Android.bp来替换Android.mk&#xff0c;引入Soong Android 9.0强制使用Android.bp 二、生成.ninja工具链关系&#xff1a;Android.bp、Blueprint、Soong、kati&#xff1a;总之都是用来把Make…

数据库拆分4--使用sharding-jdbc来实现水平拆分

有三张表 user log order表&#xff0c;先将user log 和order垂直分库&#xff0c;然后将user表水平拆分 配置文件 spring.shardingsphere.enabledtruespring.shardingsphere.datasource.nameswim-user,wim-orderspring.shardingsphere.datasource.wim-user.typecom.alibaba.…

vue入门--2

1.计算属性和侦听器 计算属性 VS 方法 如果不使用计算属性&#xff0c;在 methods 里定义了一个方法&#xff0c;也可以实现相同的效果&#xff0c;甚至该方法还可以接受参数&#xff0c;使用起来 更灵活。 既然 methods 同样可以解决模板中复杂逻辑计算的问题&#xff0c;那么…

2266. 统计打字方案数-动态规划

2266. 统计打字方案数-动态规划 Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母&#xff0c;Alice 需要 按 对应字母 i 次&#xff0c;i 是该字母在这个按键上所处的位置。 比方说&#xff0c;为了按出字母 s &#xff0c;Alice 需要按 7 …

语雀导出markdown的图片外链问题

本文节选自本人博客&#xff1a;https://www.blog.zeeland.cn/archives/rgoioiabeoi32 Introduction 本人因为经常使用语雀写博客&#xff0c;但是因为语雀转markdown的时候图片存在防外链行为&#xff0c;如果想要把转出的markdown发表在其他平台&#xff0c;就需要把md中所有…

计算机毕设Python+Vue邢台市公寓式月亮酒店管理系统(程序+LW+部署)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

jsp+ssm计算机毕业设计大学生心理咨询网站【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

java计算机毕业设计springboot+vue地铁站自动售票系统-火车票售票系统

项目介绍 本系统是针对目前地铁站自动售票的实际需求,从实际工作出发,对过去的地铁站自动售票管理系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高,节省了开支,提高了工作的效率。 本系统结合计算机系统的结构…

Nacos系列——配置的创建与获取

Nacos系列——配置的创建与获取配置的创建与获取本文资源官方文档创建配置获取Nacos配置程序目录1.引入依赖完整pom2.设置yaml3.配置读取类NacosBasedProperties4.构建日志打印工具LoggerUtil5.构建Nacos基础服务类实现6.构建自动化任务实现结果配置的创建与获取 本文资源 ht…

非零基础自学Golang 第11章 文件操作 11.3 处理JSON文件 11.3.1 编码JSON

非零基础自学Golang 文章目录非零基础自学Golang第11章 文件操作11.3 处理JSON文件11.3.1 编码JSON第11章 文件操作 11.3 处理JSON文件 JSON&#xff08;JavaScript Object Notation&#xff0c;JS对象简谱&#xff09;是一种轻量级的数据交换格式。 JSON最初是属于JavaScri…

C++基础学习笔记(二)——基础入门PART2

一、数组 一个集合中&#xff0c;里面存放了相同类型的数据元素 特点1&#xff1a;数组中的每个数据元素都是相同的数据类型 特点2&#xff1a;数组是由连续的内存位置组成的 1.1 一维数组 一维数组定义的三种方式&#xff1a; 数据类型 数组名[ 数组长度 ];数据类型 数组…

高通平台开发系列讲解(充电篇)充电底层驱动 power_supply 子系统

文章目录 一、Power Supply组成二、power_supply结构体说明三、驱动接口沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 电池驱动采取的是 linux 内核驱动中的power_supply子系统框架进行上报电池状态。 一、Power Supply组成 power supply framework在kernel/driver…

微服务真的是万能解药吗?

程序员宝藏库&#xff1a;https://gitee.com/sharetech_lee/CS-Books-Store DevWeekly收集整理每周优质开发者内容&#xff0c;包括开源项目、资源工具、技术文章等方面。 每周五定期发布&#xff0c;同步更新到 知乎&#xff1a;Jackpop。 欢迎大家投稿&#xff0c;提交issu…

Spring MVC学习 | 拦截器异常处理器

文章目录一、拦截器1.1 简介1.2 拦截器的使用1.2.1 创建1.2.2 配置1.2.3 测试1.3 多个拦截器的执行顺序1.3.1 preHandle()方法返回true1.3.2 preHandle()方法返回false二、异常处理器2.1 简介2.2 配置2.2.1 springmvc.xml中配置2.2.2 注解配置学习视频&#x1f3a5;&#xff1a…