205 lines
10 KiB
Python
205 lines
10 KiB
Python
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)) |