近期学习了一下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