首页 > 系统相关 >【GMTSAR】虚拟机Ubuntu22.04使用GMTSAR进行D-InSAR和SBAS-InSAR处理

【GMTSAR】虚拟机Ubuntu22.04使用GMTSAR进行D-InSAR和SBAS-InSAR处理

时间:2025-01-17 23:01:00浏览次数:3  
标签:文件 intf csh GMTSAR 虚拟机 grd InSAR 目录

近期学习了一下GMTSAR,记录一下使用过程

电脑为处理器为i7-13700K,给虚拟机分配了32G内存。大致的处理流程命令如下(因为懒得截图以及复制起来简单直接写在了txt文本里)

虚拟机挂载共享文件夹
虚拟机的安装教程CSDN有很多,可以看最新的教程,去官网下载新版(但是要创建账号填写相关信息,虚拟机我用的Ubuntu22.04)

vmware-hgfsclient    
sudo apt-get install open-vm-tools
sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other

sudo apt-get install open-vm-tools 可以不每次都输入,还可以设置Ubuntu开机自动挂载,但是不懂是不是我电脑原因没成功,加上用的不多,所以也懒得弄了。

安装GMTSAR(我安装的6.5版本)

在Ubuntu中安装make git等常用包,记得切换源等操作

安装GMT所需要的包

sudo apt-get install csh subversion autoconf libtiff5-dev libhdf5-dev wget
sudo apt-get install liblapack-dev
sudo apt-get install gfortran
sudo apt-get install g++
sudo apt-get install libgmt-dev
sudo apt-get install gmt-dcw gmt-gshhg
sudo apt-get install gmt

安装GMTSAR (解压后的gmtsar文件夹命名为GMTSAR,在home路径下)

先在home下sudo chown -R $USER GMTSAR (给权限)

cd GMTSAR (进入GMTSAR解压后的文件夹)

autoconf
autoupdate
./configure --with-orbits-dir=/tmp CFLAGS='-z muldefs' LDFLAGS='-z muldefs'

./configure --with-orbits-dir=/home/zyz/orbits(旧版用这个,新版用下面那个
./configure --with-orbits-dir=/tmp CFLAGS=‘-z muldefs’ LDFLAGS=‘-z muldefs’(设置轨道,根据Ubuntu版本改动,我用的这个)

在make之前对config.mk文件进行编辑 sudo gedit config.mk编辑 config.mk
是Ubuntu22.04以上的话,改一下config.mk配件文件(第75、76行)

CFLAGS		=  -O2 -Wall -m64 -fPIC -fno-strict-aliasing -std=c99 -z muldefs
LDFLAGS		=  -m64 -s -Wl,-rpath,/usr/lib/x86_64-linux-gnu -z muldefs

接下来在GMTSAR终端下

make
make install

配置GMTSAR路径

export GMTSAR=/usr/local/GMTSAR
export GMTSAR_csh=/usr/local/GMTSAR/gmtsar/csh
export PATH=$GMTSAR/bin:"$PATH":$GMTSAR_csh 

source ~/.bashrc (刷新变量)

终端测试GMTSAR安装(官网有很多例子)

p2p_processing.csh

一、GMTSAR进行D-InSAR

下载DEM

  make_dem.csh W E S N [mode]

生成干涉图处理的配置文件(Dinsar文件夹终端下内)

pop_config.csh S1_TOPS > config.s1a.txt

打开配置文件更改解缠阈值,0改为0.1或0.15,保存后退出

生成干涉图处理的配置文件
格式:

p2p_S1_TOPS_Frame.csh Master.SAFE Master.EOF Aligned.SAFE Aligned.EOF config.s1a.txt polarization parallel

示例
p2p_S1_TOPS_Frame.csh S1A_IW_SLC__1SDV_20241018T104607_20241018T104634_056156_06DF6D_B364.SAFE S1A_OPER_AUX_POEORB_OPOD_20241107T070648_V20241017T225942_20241019T005942.EOF S1A_IW_SLC__1SDV_20241123T104605_20241123T104632_056681_06F452_9566.SAFE S1A_OPER_AUX_POEORB_OPOD_20241213T070615_V20241122T225942_20241124T005942.EOF config.s1a.txt vv 1

二、GMTSAR进行SBAS-InSAR

##准备相关数据

创建topo、data、reframed文件夹
data文件夹下放入解压后的SAFF文件和轨道EOF文件
下载DEM到topo文件夹下, DEM数据格式: make_dem.csh W E S N [mode] 确保DEM足够大,确保覆盖研究区

在reframed文件夹下创建一个pins.ll,touch pins.ll,并设置裁剪范围大小,用于后续影像裁剪所准备。

pins.ll文件格式
在这里插入图片描述
pins的两个坐标是你研究区域的上下范围,处理的burst,可以比整个SAR影像范围小

##数据预处理

切换到data目录下,并右键终端打开,输入命令:
ls -d $PWD/*.SAFE > SAFE_filelist 将原始数据后缀名“.SAFE”文件列一个名为SAFE_filelst的文件清单
在data目录下,输入命令:ls -d *EOF > orbits.list
将已下载的轨道数据后缀名“.EOF”文件列一个名为orbits.list的轨道文件清单

#影像裁剪(粗裁剪)
生成F*_F*文件夹,也可以重命名为cut等,(我这里是F0580_F0586)

在data目录下,第一次以模式1运行organize_files_tops_linux.csh,
输入命令:organize_files_tops_linux.csh SAFE_filelist ../reframed/pins.ll 1 >& oft_mode1.log &  
(>& oft_mode1.log &  意思为生成一个log日志,记录程序运行过程,也可以不加,会在终端自己显示,这里我都没加 tail -f oft_mode1.log 查看log屏幕输出)

在data目录下,第一次以模式2运行organize_files_tops_linux.csh
一定先第一个结束再开始第二个!!!
输入命令:organize_files_tops_linux.csh SAFE_filelist ../reframed/pins.ll 2 >& oft_mode1.log &
#注:organize_files_tops_linux.csh脚本命令初步裁剪研究区所在burst,并没有按研究区进行裁剪。
#注:若需要处理VH极化,则需要去官网下载最新脚本替换或者安装最新的GMTSAR6.2版本官网organize_files_tops_linux.csh可以选择极化方式,GMTSAR6.1版本之前默认VV极化。

创建F*目录、拷贝参数文件、链接dem
F*目录具体看研究区域在IW哪个条带,哨兵升轨从左到右为3 2 1.降轨从左到右为1 2 3

#创建超链接文件
在F*/topo目录下
ln -s ../../topo/dem.grd . 将dem.grd从外面的topo目录下链接到F*/topo目录下
在F*/raw目录下

ln -s ../../data/F0580_F0586/*.SAFE/*/*iw1*vv*xml .
ln -s ../../data/F0580_F0586/*.SAFE/*/*iw1*vv*tiff .
ln -s ../../data/*.EOF .
ln -s ../topo/dem.grd .

F0580_F0586是我上一步生成文件夹名字,按照实际修改

在F*/raw目录下建立data.in文件
(在GMTSAR安装位置bin文件夹下修改prep_data_linux.csh,去掉里面source那一行,可以解除bin文件夹权限,在GMTSAR下打开终端 Sudo chmod -R 777 bin
在这里插入图片描述

在F*/raw目录下

ls *.EOF > orbits.list
prep_data_linux.csh

##粗配准,将辅影像配准到主影像上
在F*/raw目录下输入命令
在raw目录中,运行 preproc_batch_tops.csh,模式= 1。这将生成一个基线表(baseline_table.dat)

preproc_batch_tops_esd.csh data.in dem.grd 1 1 >& pre1.log &

mv baseline_table.dat ../ 保存(移动)baseline_table.dat到F*目录中,后面做SBAS备用

编辑data.in文件,将选择的主影像(20xx0611)对应数据移动到第一行,并保存,程序默认文件第一行为主影像。

preproc_batch_tops_esd.csh data.in dem.grd 2 1 >& pre2.log &

生成*.LED、.PRM、.SLC文件,其中LED为二进制文件包含着轨道信息,PRM为二进制文件影像配准后的信息,SLC为单视复数影像(记录振幅相位信息)。

##干涉
创建intf.in文件

转到 F* 目录并运行以下命令:select_pairs.csh baseline_table.dat 180 200

运行select_pairs.csh将生成时空基线图(baseline.ps)和所有干涉对(intf.in)
其中:180 是时间基线(天),200 是垂直基线(米),按照需要调整。
输出文件 intf.in 包含时间跨度小于 180天、垂直基线小于 200 米的干涉对
在F*目录下运行命令:wc -l intf.in(可以查看干涉对个数),也可以打开intf.in查看

#多个条带合并(F*文件夹需要自己调整,这是一个示例,不需要合并的跳到下面GMTSAR脚本)
将 intf.in 文件从 F2 目录复制到 F3 目录,并编辑F3 目录的intf.in
在F3目录下,打开终端输入一下命令:
vi intf.in
:%s/F2/F3/g(在 vi 中输入此命令;对于 F3,将 F2 改为 F3)
#将参数配置文件batch_tops.config复制到F2、F3目录下,确保在 F2 和 F3 目录中都有一个 batch_tops.config 文件

准备GMTSAR规范脚本
将参数配置文件batch_tops.config复制到F*目录下(batch_tops.config文件在gmtsar软件安装的路径/usr/local/GMTSAR/gmtsar/csh)

将batch_tops.config中的threshold_snaphu和threshold_geocode设置为0,则表示跳过相位解缠和地理编码。(参数视情况而定)一些参数设置:
Proc_stage = 1
shift_topo = 0
filter_wavelength = 200
range_dec = 4
azimuth_dec = 1
threshold_snaphu = 0
threshold_geocode = 0

设置主影像,可以在intf.in文件中查看名称,该示例主影像为master_image = S1_20210611_ALL_F1

设置Proc_stage = 1,并在F*目录下运行以下命令:#测试、查看一个干涉对。先进行一个干涉,主要来查看干涉结果,方便后面进行修正,Proc_stage = 1将DEM地形转换至雷达坐标,并制作单个干涉图,这将生成一个 trans.dat 文件,以及一个用于检查的topo_ra.pdf 文件。

head -1 intf.in > one.in(将intf.in的第一个干涉对写到one.in文件)
intf_tops.csh one.in batch_tops.config

head -1 intf.in > one.in是将intf.in的第一个干涉对写到one.in文件)

##精裁剪
可以根据运行一个干涉图的结果进行调参,或者进一步对研究区裁剪成更小的区域,加快数据处理进程。
精裁剪范围可以直接查看corr.pdf或者在终端输入:ncview corr.grd查看二进制文件
(需要sudo apt install ncview安装ncview)

运行所有干涉图
编辑 batch_tops.config 参数后,再次以proc_stage = 1,手动删除之前的干涉文件夹intf_all
完成后,更改proc_stage = 2,运行所有干涉图。

在F*目录下,运行单线程处理intf_tops intf.in batch_tops.config
或者多线程处理intf_tops_parallel.csh intf.in batch_tops.config 2 数字为线程数
上述命令之后,将生成所有的干涉图文件夹intf_all

#跨条带合并(如果研究区域在两个条带之间,需要等每个条带按照相同的步骤干涉完成后,合并,进行解缠等操作,不用合并直接跳到解缠步骤)
在项目目录创建merge文件夹(和F文件夹一级),转到F2/intf_all目录下,终端输入命令:ls -d 20 > intflist,将所有的干涉图目录列表列到intflist文件。之后将intflist复制到merge文件夹。(F2和F3的干涉图目录列表名称一样)

在merge目录下,打开终端,输入命令:create_merge_input.csh intflist … 2 > merge_list,将生成merge_list列表清单。
mode=0,将合并F1、F2和F3
mode=1,将合并F1和F2
mode=2,将合并F2和F3

merge_list列表清单文件格式:
IF1_Swath1_Path:master.PRM:repeat.PRM,IF1_Swath2_Path:master.PRM:repeat.PRM,IF1_Swath3_Path:master.PRM:repeat.PRM
IF1_Swath1_Path:master.PRM:repeat.PRM为F1中干涉图的路径,IF1_Swath2_Path:master.PRM:repeat.PRM为F2中干涉图的路径,IF1_Swath3_Path:master.PRM:repeat.PRM为F3中干涉图的路径

打开终端输入merge_batch.csh查看脚本的用法,
merge目录下终端输入命令:
cp …/F2/batch_tops.config .(可将参数配置文件需要复制到merge目录下)
ln -s …/topo/dem.grd . (添加 dem.grd 软链接)
也可以直接将两个文件复制到merge目录下

运行merge_batch.csh,确保编辑了batch_tops.config使其跳过相位解缠和地理编码
merge目录下终端输入命令:
merge_batch.csh merge_list batch_tops.config
输出合并目录中每个干涉图的干涉目录,每个目录包含合并的相干、掩模和相位文件。
注:请注意 merge_batch.csh 在下次运行时不会覆盖现有的 trans.dat 文件。如果您确定 trans.dat 文件计算正确,则无需在再次运行前删除。

##相位解缠
创建脚本文件
首先,在/home/zyz/GMTSAR/bin(GMTSAR脚本在的路径)路径下自定义创建一个脚本文件unwrap_intf.csh

touch unwrap_intf.csh

终端输入命令: sudo gedit unwrap_intf.csh编辑,也可以直接打开编辑 0.1为解缠阈值0.01为平滑阈值

#!/bin/csh -f
#intflist contains a list of all date1_date2 directories.      (#后面有空格,CSDN加空格会变化)
foreach line (`awk '{print}' intflist`)
cd ${line}
snaphu_interp.csh 0.1 0.01  10000/20000/2000/3200 
cd ..
end

注:10000/20000/2000/3200是研究区详细范围,格式RRAA。范围可不输入,先默认解缠一个干涉图,确定合并后相位解缠的Rang和Azi的大小,再根据感兴趣区域范围进行解缠。

编辑脚本并保存,然后给脚本一个可执行权限,在/home/zyz/GMTSAR/bin路径下终端输入命令:

sudo chmod +x unwrap_intf.csh

unwrap_intf.csh脚本包含一个intflist文件,转到intf_all文件夹(在F*下),在该路径下创建一个intflist文件。
终端输入命令:ls -d 20* > intflist

开始进行相位解缠。
在intf_all路径下打开终端运行unwrap_intf.csh intflist 2 后面数字代表线程数量
解缠后生成的结果文件,unwrap.grd二进制文件和unwrap.pdf

为了后续的SBAS正常处理,必须将corr.grd的维度裁剪和unwrap.grd一致。在编辑unwrap_intf.csh时已添加gmt grdcut corr.grd -Runwrap.grd -Gcorr_cut.grd脚本命令。也就是在解缠开始前编辑脚本文件unwrap_intf.csh时添加gmt grdcut corr.grd -Runwrap.grd -Gcorr_cut.grd脚本命令。

#!/bin/csh -f
# intflist contains a list of all date1_date2 directories.
foreach line (`awk '{print}' intflist`)
cd ${line}
snaphu_interp.csh 0.01 0    10000/20000/2000/3200
gmt grdcut corr.grd -Runwrap.grd -Gcorr_cut.grd
cd ..
end

10000/20000/2000/3200 是范围RRAA,保证corr.grd裁剪与unwrap.grd维度一致,可以打开corr_cut.grd查看维度

##SBAS过程
在F目录下创建SBAS文件夹,将F目录下的intf.in和baseline_table.dat复制到SBSA目录中。在SBAS目录下打开终端,输入命令:

prep_sbas.csh intf.in baseline_table.dat ../intf_all unwrap.grd corr.grd

命令prep_sbas.csh生成scene.tab和intf.tab两个文件。

SBAS所需参数及解释

sbas intf.tab scene.tab N S xdim ydim [-atm ni] [-smooth sf] [-wavelength wl] [-incidence inc] [-range -rng] [-rms] [-dem]

注:sbas后面可选参数先后顺序不固定,[]为可选参数,其它为必要参数。

N:干涉对数量198对(可查看intf.in)
S:影像数量52景
xdim:1250
ydim:2500 (输入gmt grdinfo unwrap.grd或者gmt grdinfo corr.grd查看)
-wavelength wl:0.0554658(波长,以米为单位)可在F*/topo文件夹中查看master.PRM文件
range:825423(从雷达到干涉图中心的距离,计算方式如下 )
range=({[(speed of light) / (rng_samp_rate) / 2]* ((x_min+x_max)/2)} /2 ) + near_range
其中:
speed of light is 3 x 10^8 m/s
rng_samp_rate=64345238.125714(在master.PRM文件可查看)
x_min和x_max分别为0和21720(输入gmt grdinfo unwrap.grd或 者gmt grdinfo corr.grd查看)
near_range=799077.640421(在master.PRM文件可查看)
计算挺简单的,简化为
在这里插入图片描述
#入射角,SBAS 中使用的入射角是用于校正 DEM 误差的粗略估计值。通常你可以使用猜测。Sentinel-1 TOPS 数据的发生角度为 30-46,分为 3 个子条带,通常为 30-36、36-41、41-46 左右,因此我将使用 35 或 36 来表示合并的 F1-F2 数据堆栈。

在终端输入命令:(这是我计算后的)

sbas intf.tab scene.tab 198 52 2715 2070 -wavelength 0.0554658 -incidence 44 -range 900344 -smooth 1.0 -atm 3.0 -rms -dem

-atm 3.0 一般3.0或者5.0,看自己情况
可在终端输入gmt grdinfo vel.grd查看在雷达坐标中的年平均速率值

##地理编码
运行 SBAS 之后,得到一个 vel.grd 文件(在雷达坐标中,以毫米/年为单位)。要将其转换为纬度/经度坐标,SBAS下终端依次输入:

ln -s ../topo/trans.dat .
ln -s ../intf_all/2020000_2020048/gauss_200 .
proj_ra2ll.csh trans.dat vel.grd vel_ll.grd
gmt grd2cpt vel_ll.grd -T= -Z -Cjet > vel_ll.cpt
grd2kml.csh vel_ll vel_ll.cpt

2020000_2020048/gauss_200 . 中2020000_2020048是在intf_all文件夹下随便选一个,最新的guass文件统一变为了gauss_200
注意:proj_ra2ll.csh 创建了两个名为 raln.grd 和 ralt.grd 的文件。一旦存在,它们将不会被后续运行覆盖,因此如果您发现自己在此步骤中遇到问题,请确保在运行之间删除这些文件。

可在终端输入gmt grdinfo vel_ll.grd查看在地理编码后的年平均速率值
可以输入脚本:gmt grd2xyz vel_ll.grd > xyz.dat将vel_ll.grd的xyz数据写入到xyz.dat文件中
将vel_ll.grd导入arcgis软件显示结果图

计算某时间段内的累积形变量
输入脚本:gmt grdmath disp_2020000.grd disp_2024351.grd SUB = disp_12.grd
将disp_12.grd进行地理编码
输入脚本:proj_ra2ll.csh trans.dat disp_12.grd disp_12_ll.grd

查看某时间段内的累积形变量,
输入脚本:gmt grdinfo disp_12.grd
disp_12_ll.grd 导入arcgis软件显示结果图

干涉和解缠是影响最后结果的重要因素,编辑干涉图,调整解缠阈值,掩膜处理,合并图像处理,大气校正等更为复杂的操作等后面学习。

标签:文件,intf,csh,GMTSAR,虚拟机,grd,InSAR,目录
From: https://blog.csdn.net/zyz93110/article/details/145215113

相关文章

  • JVM虚拟机监控及性能调优实战
    大家好,欢迎来到程序视点!我是小二哥。今天我们再来聊聊jvisualvm目录jvisualvm介绍代码语言:txt复制1.jvisualvm是JDK自带的可以远程监控内存,跟踪垃圾回收,执行时内存,CPU/线程分析,生成堆快照等的工具。2.jvisualvm是从JDK1.6开始被继承到JDK中的。jvisualvm使用jvisualvm......
  • 告别虚拟机!WSL2安装配置教程!!!
    作者:SkyXZCSDN:SkyXZ~-CSDN博客博客园:SkyXZ-博客园        由于Linux的系统的稳定以及在环境管理方面的优越性,同时Linux对于ROS系统的独占,很多时候我们都乐意在Linux系统下开发我们机器人的算法,但是由于Windows和Linux系统的存在内核方面的天壤之别,在我们手边没有Lin......
  • Windows环境下VMware 共享数据Ubuntu虚拟机的方法研究
        在Windows环境下,通过VMware共享数据给Ubuntu虚拟机,主要有以下几种方法:1.使用VMware自带的共享文件夹功能这是最常用的方法,支持文件夹的双向共享:开启共享文件夹:在VMware中,打开虚拟机的设置,选择“Options”->“SharedFolders”。选择“AlwaysEnab......
  • 【虚拟机硬盘的添加及分区挂载】
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档虚拟机硬盘的添加及分区挂载一、添加类型为SCSI的硬盘二、添加类型为STAT的硬盘三、添加类型为NVME的硬盘一、添加类型为SCSI的硬盘第一块硬盘,虚拟磁盘类型选择SCSI。大小选择5G。按mbr格式分区。分......
  • Java虚拟机堆区域的特点
    JVM(Java虚拟机)的堆(Heap)是用于存储对象实例的内存区域,是Java运行时数据区的一部分。JVM堆被划分为几个主要区域,每个区域都有特定的用途和管理方式。以下是JVM堆的主要结构及其特点:1.新生代(YoungGeneration)新生代是堆中用于存储新创建对象的区域。它被进一步划分为两个主......
  • 创建虚拟机VMware
    创建虚拟机ZF3R0-FHED2-M80TY-8QYGC-NPKYFYF390-0HF8P-M81RQ-2DXQE-M2UT6ZF71R-DMX85-08DQY-8YMNC-PPHV81.创建虚拟机(典型更快)创建虚拟机选择“典型”方式避免自动安装,选择稍后安装系统选择虚拟中的系统设置虚拟机名字与位置(注意:不推荐放到C盘,会有权限问题)......
  • 【Linux】在虚拟机中安装
      ......
  • 西藏定日县6.8级地震InSAR处理详细操作教程
    据中国地震台网中心测定:北京时2025年1月7日9时5分,西藏日喀则市定日县(北纬28.5度,东经87.45度)发生6.8级地震,震源深度10千米。本文以哨兵1A作为数据源,使用DInSAR的方法对本次地震进行干涉测量处理。本文旨在介绍软件处理操作,结果仅供参考,准确结果以官方发布为准。数据情况如下表所......
  • ESXi给虚拟机分区扩容
    ESXI虚拟机磁盘原有是40G现扩容到240G。df-Th这是参数连着写。相当于df-T-h-T:代表type类型,可以查看到磁盘的类型。-h:代表human人类,就是以人们熟悉的单位来表示磁盘大小,如K、M、G。如果不加这个参数,默认以KB字节单位显示,可读性差。查询结果含义:size代表磁盘总大小,used代表......
  • Linux虚拟机vim编辑器
    Linux虚拟机vim编辑器所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。相关文章:史上最全Vim快捷键键位图—入门到进阶什么......