microproduct/vegetationHeight-L-SAR/test.py

205 lines
10 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import os
import sys
print("os.path.abspath(__file__) = ",os.path.dirname(os.path.abspath(__file__)))
from VegetationHeightPrePro import PreProcess as Pp # 此行放在下面会报错,最好放在上面
from tool.algorithm.xml.AlgXmlHandle import ManageAlgXML, CheckSource
# from AlgXmlHandle import ManageAlgXML, CheckSource # 导入xml文件读取与检查文件
from VegetationHeightAlg import PlantHeightAlg, ROIAlg # 此处的ROIAlg可以对多波段数据进行掩膜与tool文件中的ROIAlg不同
from VegetationHeightOrthoAlg import IndirectOrthorectification as Inor
from tool.algorithm.image.ImageHandle import ImageHandler
from tool.algorithm.algtools.logHandler import LogHandler
from AHVToPolSarPro import AHVToPolSarProS2
from tool.algorithm.xml.CreatMetafile import CreateMetafile
from VegetationHeightXmlInfo import CreateDict, CreateStadardXmlFile
from Orthorectification import fine_registration,Orthorectification_RD, header_file_read_angle
import numpy as np
import shutil
import logging
import datetime
import sys
import tarfile
import glob
import gc
import math
import xmltodict, json
import VegetationHeightMain
# polsarpro
AHVToPolSarProS2 = AHVToPolSarProS2()
PlantHeightAlg = PlantHeightAlg()
workspace_preprocessed2_path=r"D:\forestHeight\Result\\" # 结果文件夹
workspace_master_slc_path=r"D:\forestHeight\Input\RS2_OK31134_PK305834_DK273463_FQ20W_20120627_100751_HH_VV_HV_VH_SLC\\"
workspace_slave_slc_path=r"D:\forestHeight\Input\RS2_OK31594_PK309303_DK276153_FQ20W_20120907_100751_HH_VV_HV_VH_SLC\\"
master_s2 = workspace_preprocessed2_path + "master_s2""\\"
os.makedirs(master_s2)
slave_s2 = workspace_preprocessed2_path + "slave_s2""\\"
os.makedirs(slave_s2)
# 主影像->s2
# 输出文件夹
AHVToPolSarProS2.api_ahv_to_polsarpro_s2(master_s2, workspace_master_slc_path) # 全极化影像转S2矩阵
# 辅影像->s2
# 输出文件夹
AHVToPolSarProS2.api_ahv_to_polsarpro_s2(slave_s2, workspace_slave_slc_path) # 全极化影像转S2矩阵
print("slc->s2 finish ")
# 读取轨道节点生产flat kz
master_orbit_path=r"D:\forestHeight\Input\orbit\oribit0907.xml"
slave_orbit_path=r"D:\forestHeight\Input\orbit\oribit0627.xml"
with open(master_orbit_path) as f:
master_orbit_dict = xmltodict.parse(f.read())['orbitInformation']['stateVector']
with open(slave_orbit_path) as f:
slave_orbit_dict = xmltodict.parse(f.read())['orbitInformation']['stateVector']
GPSTime_Format="%Y-%m-%dT%H:%M:%S.%fZ"
GPSNodeNames_list=['timeStamp', 'xPosition', 'yPosition', 'zPosition', 'xVelocity', 'yVelocity', 'zVelocity']
# master
master_orbits=[]
for GPSPoint in master_orbit_dict:
GPSPoint=[
datetime.datetime.strptime(GPSPoint[GPSNodeNames_list[0]],GPSTime_Format).timestamp(), # TimeStamp
float(GPSPoint[GPSNodeNames_list[1]]['#text']), # Xp
float(GPSPoint[GPSNodeNames_list[2]]['#text']), # Yp
float(GPSPoint[GPSNodeNames_list[3]]['#text']), # Zp
float(GPSPoint[GPSNodeNames_list[4]]['#text']), # Vx
float(GPSPoint[GPSNodeNames_list[5]]['#text']), # Vy
float(GPSPoint[GPSNodeNames_list[6]]['#text'])] # VZ
master_orbits.append(GPSPoint)
# slave
slave_orbits=[]
for GPSPoint in slave_orbit_dict:
GPSPoint=[
datetime.datetime.strptime(GPSPoint[GPSNodeNames_list[0]],GPSTime_Format).timestamp(), # TimeStamp
float(GPSPoint[GPSNodeNames_list[1]]['#text']), # Xp
float(GPSPoint[GPSNodeNames_list[2]]['#text']), # Yp
float(GPSPoint[GPSNodeNames_list[3]]['#text']), # Zp
float(GPSPoint[GPSNodeNames_list[4]]['#text']), # Vx
float(GPSPoint[GPSNodeNames_list[5]]['#text']), # Vy
float(GPSPoint[GPSNodeNames_list[6]]['#text'])] # VZ
slave_orbits.append(GPSPoint)
# 设置起始时间
master_start_time=min([p[0] for p in master_orbits])-1
slave_start_time=min([p[0] for p in slave_orbits])-1
for i in range(len(master_orbits)):
master_orbits[i][0]=master_orbits[i][0]-master_start_time
for i in range(len(slave_orbits)):
slave_orbits[i][0]=slave_orbits[i][0]-slave_start_time
master_orbits=np.array(master_orbits)
slave_orbits=np.array(slave_orbits)
# master
master_orbits_fit_dict={}
master_orbits_fit_dict['x']=np.polynomial.hermite.Hermite.fit(master_orbits[:,0],master_orbits[:,1],3)
master_orbits_fit_dict['y']=np.polynomial.hermite.Hermite.fit(master_orbits[:,0],master_orbits[:,2],3)
master_orbits_fit_dict['z']=np.polynomial.hermite.Hermite.fit(master_orbits[:,0],master_orbits[:,3],3)
master_orbits_fit_dict['vx']=np.polynomial.hermite.Hermite.fit(master_orbits[:,0],master_orbits[:,4],3)
master_orbits_fit_dict['vy']=np.polynomial.hermite.Hermite.fit(master_orbits[:,0],master_orbits[:,5],3)
master_orbits_fit_dict['vz']=np.polynomial.hermite.Hermite.fit(master_orbits[:,0],master_orbits[:,6],3)
master_orbits_fit=lambda t:[master_orbits_fit_dict['x'](t),
master_orbits_fit_dict['y'](t),
master_orbits_fit_dict['z'](t),
master_orbits_fit_dict['vx'](t),
master_orbits_fit_dict['vy'](t),
master_orbits_fit_dict['vz'](t)]
# slave
slave_orbits_fit_dict={}
slave_orbits_fit_dict['x']=np.polynomial.hermite.Hermite.fit(slave_orbits[:,0],slave_orbits[:,1],3)
slave_orbits_fit_dict['y']=np.polynomial.hermite.Hermite.fit(slave_orbits[:,0],slave_orbits[:,2],3)
slave_orbits_fit_dict['z']=np.polynomial.hermite.Hermite.fit(slave_orbits[:,0],slave_orbits[:,3],3)
slave_orbits_fit_dict['vx']=np.polynomial.hermite.Hermite.fit(slave_orbits[:,0],slave_orbits[:,4],3)
slave_orbits_fit_dict['vy']=np.polynomial.hermite.Hermite.fit(slave_orbits[:,0],slave_orbits[:,5],3)
slave_orbits_fit_dict['vz']=np.polynomial.hermite.Hermite.fit(slave_orbits[:,0],slave_orbits[:,6],3)
slave_orbits_fit=lambda t:[slave_orbits_fit_dict['x'](t),
slave_orbits_fit_dict['y'](t),
slave_orbits_fit_dict['z'](t),
slave_orbits_fit_dict['vx'](t),
slave_orbits_fit_dict['vy'](t),
slave_orbits_fit_dict['vz'](t)]
master_image_time=[datetime.datetime.strptime(i,GPSTime_Format).timestamp() for i in ["2012-09-07T10:07:52.415268Z","2012-09-07T10:07:56.843662Z"]]
slave_image_time=[datetime.datetime.strptime(i,GPSTime_Format).timestamp() for i in ["2012-06-27T10:07:51.501578Z","2012-06-27T10:07:55.933788Z"]]
master_image_time=np.array(master_image_time)-master_start_time
slave_image_time=np.array(slave_image_time)-slave_start_time
master_lines=6764
master_cols=5804
slave_lines=6764
slave_cols=5809
# 成像时间
master_delta=(np.max(master_image_time)-np.min(master_image_time))/(master_lines-1)
slave_delta=(np.max(slave_image_time)-np.min(slave_image_time))/(slave_lines-1)
master_times=np.array(list(range(master_lines)))*master_delta+np.min(master_image_time)
slave_times=np.array(list(range(slave_lines)))*slave_delta+np.min(slave_image_time)
# 构建成像轨道节点
master_orbits=np.array(master_orbits_fit(master_times)).transpose(1,0)
slave_orbits=np.array(slave_orbits_fit(slave_times)).transpose(1,0)
# 成像中心点
master_center_orbits=np.array(master_orbits_fit(np.mean(master_times)))
slave_center_orbits=np.array(slave_orbits_fit(np.mean(slave_times)))
# 构建向量
B_orbits=slave_orbits-master_orbits
B=np.mean(B_orbits,axis=0)[:3] # 基线向量的平均值
B_=slave_center_orbits-master_center_orbits
# 求解水平角
alpha =math.pi-math.acos(np.dot(master_center_orbits[:3],B[:3])/(np.linalg.norm(master_center_orbits[:3])*np.linalg.norm(B[:3])))
B_h=np.linalg.norm(B[:3])*math.cos(alpha)
B_v=np.linalg.norm(B[:3])*math.sin(alpha)
print(alpha,B_h,B_v)
master_fer = workspace_preprocessed2_path + "master_fer""\\"
slave_fer = workspace_preprocessed2_path + "slave_fer""\\"
os.makedirs(master_fer)
os.makedirs(slave_fer)
master_fer = master_s2
master_slave_t6 = workspace_preprocessed2_path + "master_slave_t6""\\"
current_path=r"D:\forestHeight\vegetationHeight-L-SAR-V1.0-源码\vegetationHeight-L-SAR-V1.0"
# 3、s2+s2->t6
data_convert_s2_t6_path = os.path.join(current_path, "data_convert_MLK_S2_T6.exe")
master_slave_t6 = workspace_preprocessed2_path + "master_slave_t6""\\"
#os.makedirs(master_slave_t6)
PlantHeightAlg.s2_to_t6(master_fer, slave_fer, data_convert_s2_t6_path, master_slave_t6)
# 4、T6->boxcar_filter->T6
boxcar_filter_tool_path = os.path.join(current_path, "boxcar_filter_T6.exe")
# boxcar_filter_tool_path = os.path.join(current_path, "lee_refined_filter_T6.exe")
master_slave_t6_box = workspace_preprocessed2_path + "master_slave_t6_box""\\"
#os.makedirs(master_slave_t6_box)
PlantHeightAlg.polsar_boxcar_filter(master_slave_t6_box, boxcar_filter_tool_path,
master_slave_t6, *(1, 21, 0, 0))
master_slave_t6_box=master_slave_t6
master_slave_t6_box_coh=workspace_preprocessed2_path + "master_slave_t6_box_coh""\\"
#os.makedirs(master_slave_t6_box_coh)
# 5、 T6->coherence_estimation->T6
coherence_estimation_path = os.path.join(current_path, "complex_coherence_estimation_T6.exe")
#coherence_opt_estimation_path = os.path.join(current_path, "complex_coherence_opt_estimation_T6.exe")
#master_slave_t6_box_coh = master_slave_t6_box
PlantHeightAlg.complex_coherence_estimation_T6(master_slave_t6_box,
coherence_estimation_path,
master_slave_t6_box_coh, * (7, 7, 7, 7))
out_kz_path=r"D:\forestHeight\Result\flat_remove\kz.bin"
master_slave_t6_box_coh_rvog = workspace_preprocessed2_path + "master_slave_t6_box_coh_rvog""\\"
# 6、 T6->RVOG->产品
height_estimation_inversion_rvog_path = os.path.join(current_path,
"height_estimation_inversion_procedure_RVOG.exe")
file_gamma_high_file = master_slave_t6_box_coh + "cmplx_coh_HV.bin"
file_gamma_low_file = master_slave_t6_box_coh + "cmplx_coh_HHmVV.bin"
# file_gamma_high_file = master_slave_t6_box_coh + "cmplx_coh_avg_HV.bin"
# file_gamma_low_file = master_slave_t6_box_coh + "cmplx_coh_avg_HHmVV.bin"
PlantHeightAlg.height_estimation_RVOG(master_slave_t6_box_coh, height_estimation_inversion_rvog_path,
file_gamma_high_file, file_gamma_low_file,
master_slave_t6_box_coh_rvog, out_kz_path, *(11, 0.4))