519 lines
24 KiB
Python
519 lines
24 KiB
Python
# -*- coding: UTF-8 -*-
|
||
"""
|
||
@Project :microproduct
|
||
@File :SurfaceSalinityMain.py
|
||
@Author :SHJ
|
||
@Contact:土壤粗糙度算法主函数
|
||
@Date :2022/11/7 9:04
|
||
@Version :2.0.0
|
||
"""
|
||
import logging
|
||
from tool.algorithm.algtools.PreProcess import PreProcess as pp
|
||
from tool.algorithm.image.ImageHandle import ImageHandler
|
||
from tool.algorithm.xml.AlgXmlHandle import ManageAlgXML, CheckSource, InitPara
|
||
from tool.algorithm.algtools.logHandler import LogHandler
|
||
from tool.algorithm.block.blockprocess import BlockProcess
|
||
from tool.algorithm.algtools.MetaDataHandler import MetaDataHandler
|
||
from tool.algorithm.xml.CreatMetafile import CreateMetafile
|
||
from tool.config.ConfigeHandle import Config as cf
|
||
from tool.algorithm.algtools.ROIAlg import ROIAlg
|
||
from tool.file.fileHandle import fileHandle
|
||
import pyproj._compat
|
||
from tool.csv.csvHandle import csvHandle
|
||
from tool.algorithm.algtools.filter.lee_Filter import Filter
|
||
from SurfaceRoughnessALg import RoughnessAlg as alg
|
||
from SurfaceRoughnessXmlInfo import CreateDict, CreateStadardXmlFile
|
||
import os
|
||
import datetime
|
||
import numpy as np
|
||
import shutil
|
||
import scipy #解决打包错误
|
||
import scipy.spatial.transform # 用于解决打包错误
|
||
import scipy.spatial.transform._rotation_groups # 用于解决打包错误
|
||
import scipy.special.cython_special # 用于解决打包错误
|
||
import sys
|
||
from scipy.interpolate import griddata # 引入scipy中的二维插值库
|
||
from scipy.special import lambertw
|
||
import math
|
||
import multiprocessing
|
||
|
||
surface_roughness_value_min = float(cf.get('product_value_min'))
|
||
surface_roughness_value_max = float(cf.get('product_value_max'))
|
||
if cf.get('debug') == 'True':
|
||
DEBUG = True
|
||
else:
|
||
DEBUG = False
|
||
file = fileHandle(DEBUG)
|
||
EXE_NAME = cf.get('exe_name')
|
||
FILTER_SIZE = int(cf.get('filter_size'))
|
||
env_str = os.path.split(os.path.realpath(__file__))[0]
|
||
os.environ['PROJ_LIB'] = env_str
|
||
LogHandler.init_log_handler('run_log\\' + EXE_NAME)
|
||
logger = logging.getLogger("mylog")
|
||
csvh = csvHandle()
|
||
|
||
class RoughnessMain:
|
||
"""
|
||
算法主函数
|
||
"""
|
||
def __init__(self, alg_xml_path):
|
||
self.alg_xml_path = alg_xml_path
|
||
self.imageHandler = ImageHandler()
|
||
self.__alg_xml_handler = ManageAlgXML(alg_xml_path)
|
||
self.__check_handler = CheckSource(self.__alg_xml_handler)
|
||
self.__workspace_path, self.__sar_tif_name, self.__out_para = None, None, None
|
||
self.__input_paras, self.__output_paras, self.__processing_paras, self.__preprocessed_paras = {}, {}, {}, {}
|
||
# 参考影像路径,坐标系
|
||
self.__ref_img_path, self.__proj = '', ''
|
||
# 宽/列数,高/行数
|
||
self.__cols, self.__rows = 0, 0
|
||
# 影像投影变换矩阵
|
||
self.__geo = [0, 0, 0, 0, 0, 0]
|
||
|
||
def check_source(self):
|
||
"""
|
||
检查算法相关的配置文件,图像,辅助文件是否齐全
|
||
"""
|
||
env_str = os.getcwd()
|
||
logger.info("sysdir: %s", env_str)
|
||
|
||
self.__check_handler.check_alg_xml()
|
||
self.__check_handler.check_run_env()
|
||
self.__workspace_path = self.__alg_xml_handler.get_workspace_path()
|
||
|
||
self.__input_paras = self.__alg_xml_handler.get_input_paras()
|
||
Polarization = self.__input_paras['Polarization']['ParaValue']
|
||
if Polarization == "VV":
|
||
self.__sar_tif_name = "VV"
|
||
elif Polarization == "HH":
|
||
self.__sar_tif_name = "HH"
|
||
else:
|
||
raise ValueError("input Para 'Polarization' is not 'HH' or 'VV'!")
|
||
|
||
input_para_names = ["SingleSAR", "MeasuredData", "Covering", "NDVI"]
|
||
if self.__check_handler.check_input_paras(input_para_names) is False:
|
||
return False
|
||
|
||
self.__create_work_space()
|
||
self.__processing_paras = InitPara.init_processing_paras(self.__input_paras)
|
||
self.__processing_paras.update(self.get_tar_gz_inf(self.__processing_paras["sar_path0"]))
|
||
|
||
self.__out_para = os.path.join(self.__workspace_path, EXE_NAME, 'Output', r"SurfaceRoughnessProduct.tar.gz")
|
||
self.__alg_xml_handler.write_out_para("SurfaceRoughnessProduct", self.__out_para) #写入输出参数
|
||
|
||
logger.info('check_source success!')
|
||
logger.info('progress bar: 10%')
|
||
return True
|
||
|
||
def get_tar_gz_inf(self, tar_gz_path):
|
||
para_dic = {}
|
||
name = os.path.split(tar_gz_path)[1].rstrip('.tar.gz')
|
||
file_dir = os.path.join(self.__workspace_preprocessing_path, name + '\\')
|
||
file.de_targz(tar_gz_path, file_dir)
|
||
|
||
# 元文件字典
|
||
para_dic.update(InitPara.get_meta_dic(InitPara.get_meta_paths(file_dir, name), name))
|
||
|
||
# tif路径字典
|
||
pol_dic = InitPara.get_polarization_mode(InitPara.get_tif_paths(file_dir, name))
|
||
|
||
flag_list = [0, 0, 0,0]
|
||
VVVH_list = [0, 0]
|
||
|
||
|
||
# 获取极化类型
|
||
if "HH" in pol_dic.keys() and self.__sar_tif_name == 'HH':
|
||
para_dic.update({self.__sar_tif_name: pol_dic['HH']})
|
||
flag_list[0] = 1
|
||
if "VV" in pol_dic.keys() and self.__sar_tif_name == 'VV':
|
||
para_dic.update({self.__sar_tif_name: pol_dic['VV']})
|
||
flag_list[1] = 1
|
||
if "HV" in pol_dic.keys():
|
||
para_dic.update({'HV': pol_dic['HV']})
|
||
flag_list[3] = 1
|
||
if "LocalIncidenceAngle" in pol_dic.keys():
|
||
para_dic.update({'LocalIncidenceAngle': pol_dic['LocalIncidenceAngle']})
|
||
flag_list[2] = 1
|
||
if 'VH' in pol_dic.keys(): # 判断VV、VH是否存在,用来计算参数L
|
||
para_dic.update({'VH': pol_dic['VH']})
|
||
VVVH_list[0] = 1
|
||
if 'VV' in pol_dic.keys():
|
||
VVVH_list[1] = 1
|
||
if self.__sar_tif_name == 'HH': # 只有手动选择的是'HH',需要把VV路径添加到字典中,
|
||
para_dic.update({'VV': pol_dic['VV']})
|
||
else: # 反之代表则选择的是'VV',不需要把VV路径重复添加到字典中
|
||
pass
|
||
|
||
if flag_list != [1, 0, 1, 1] and flag_list != [0, 1, 1, 1]:
|
||
raise Exception('There are not ' + self.__sar_tif_name + '、LocalIncidenceAngle or meta.xml in path:', tar_gz_path)
|
||
if VVVH_list != [1, 1]:
|
||
raise Exception('There are not VH or VV:', tar_gz_path)
|
||
return para_dic
|
||
|
||
def __create_work_space(self):
|
||
"""
|
||
删除原有工作区文件夹,创建新工作区文件夹
|
||
"""
|
||
self.__workspace_preprocessing_path = self.__workspace_path + EXE_NAME + r"\Temporary\preprocessing""\\"
|
||
self.__workspace_preprocessed_path = self.__workspace_path + EXE_NAME + r"\Temporary\preprocessed""\\"
|
||
self.__workspace_processing_path = self.__workspace_path + EXE_NAME + r"\Temporary\processing""\\"
|
||
self.__workspace_block_tif_path = self.__workspace_path + EXE_NAME + r"\Temporary\blockTif""\\"
|
||
self.__workspace_block_tif_processed_path = self.__workspace_path + EXE_NAME + r"\Temporary\blockTifProcessed""\\"
|
||
self.__workspace_Zs_block_tif_processed_path = self.__workspace_path + EXE_NAME + r"\Temporary\ZsblockTifProcessed""\\"
|
||
self.__feature_tif_dic = self.__workspace_processing_path + 'feature_tif'
|
||
self.__product_dic = self.__workspace_processing_path + 'product\\'
|
||
path_list = [self.__workspace_preprocessing_path, self.__workspace_preprocessed_path,
|
||
self.__workspace_processing_path, self.__workspace_block_tif_path,
|
||
self.__workspace_block_tif_processed_path, self.__workspace_Zs_block_tif_processed_path,
|
||
self.__feature_tif_dic, self.__product_dic]
|
||
file.creat_dirs(path_list)
|
||
logger.info('create new workspace success!')
|
||
|
||
def del_temp_workspace(self):
|
||
"""
|
||
临时工作区
|
||
"""
|
||
if DEBUG is True:
|
||
return
|
||
path = self.__workspace_path + EXE_NAME + r"\Temporary"
|
||
if os.path.exists(path):
|
||
file.del_folder(path)
|
||
|
||
def preprocess_handle(self):
|
||
"""
|
||
预处理
|
||
"""
|
||
para_names=[]
|
||
# 读取每一张图像,检查图像坐标系
|
||
if self.__sar_tif_name == 'HH': # VH与VV参与预处理
|
||
para_names = [self.__sar_tif_name, 'VH','HV', 'VV', "Covering", "NDVI", "LocalIncidenceAngle"]
|
||
elif self.__sar_tif_name == 'VV':
|
||
para_names = [self.__sar_tif_name,'VH','HV','HH' "Covering", "NDVI", "LocalIncidenceAngle"]
|
||
|
||
# if self.__sar_tif_name == 'HH': # VH与VV参与预处理
|
||
# para_names = [self.__sar_tif_name, 'VH', 'VV', "Covering", "NDVI", "LocalIncidenceAngle"]
|
||
# elif self.__sar_tif_name == 'VV':
|
||
# para_names = [self.__sar_tif_name, 'VH', "Covering", "NDVI", "LocalIncidenceAngle"]
|
||
|
||
ref_img_name = self.__sar_tif_name
|
||
p = pp()
|
||
self.__preprocessed_paras = p.preprocessing(para_names, ref_img_name,
|
||
self.__processing_paras,
|
||
self.__workspace_preprocessing_path,
|
||
self.__workspace_preprocessed_path)
|
||
self.__ref_img_path, self.__cols, self.__rows, self.__proj, self.__geo = p.get_ref_inf(
|
||
self.__preprocessed_paras[ref_img_name])
|
||
|
||
logger.info('preprocess_handle success!')
|
||
logger.info('progress bar: 30%')
|
||
|
||
def create_roi(self):
|
||
"""
|
||
计算ROI掩膜
|
||
:return: 掩膜路径
|
||
"""
|
||
names = ['LocalIncidenceAngle', self.__sar_tif_name, 'Covering', 'NDVI']
|
||
r = ROIAlg()
|
||
bare_land_mask_path = r.roi_process(names, self.__workspace_processing_path + "/roi/", self.__processing_paras, self.__preprocessed_paras)
|
||
|
||
logger.info('create masks success!')
|
||
|
||
# 计算roi区域
|
||
ROIAlg().cal_roi(self.__preprocessed_paras["LocalIncidenceAngle"], self.__preprocessed_paras["LocalIncidenceAngle"],
|
||
bare_land_mask_path, background_value=1)
|
||
ROIAlg().cal_roi(self.__preprocessed_paras[self.__sar_tif_name], self.__preprocessed_paras[self.__sar_tif_name],
|
||
bare_land_mask_path, background_value=1)
|
||
shutil.copyfile(bare_land_mask_path, self.__workspace_preprocessed_path + 'mask.tif')
|
||
logger.info('create ROI image success!')
|
||
return bare_land_mask_path
|
||
|
||
def create_soilDLCT_tif(self):
|
||
"""
|
||
创建土壤介电常数影像
|
||
"""
|
||
# 读取实测值,从经纬度坐标系转为图像坐标系
|
||
measured_data_img = csvh.trans_measuredata(csvh.readcsv(self.__processing_paras['MeasuredData']), self.__ref_img_path)
|
||
# 插值法生成土壤介电常数二维影像
|
||
grid_x, grid_y = np.mgrid[0:self.__rows:1, 0:self.__cols:1]
|
||
points = np.array(measured_data_img)[:,0:2]
|
||
values = np.array(measured_data_img)[:,2].T
|
||
grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
|
||
self.__processing_paras['DLCT'] = os.path.join(self.__workspace_preprocessed_path,'DLCT.tif')
|
||
self.imageHandler.write_img(self.__processing_paras['DLCT'],self.__proj,self.__geo,grid_z0)
|
||
logger.info('create soilDLCT image success!')
|
||
|
||
def Calu_Q(self,meta_file_path):
|
||
"""计算参数交叉极化比值Q"""
|
||
VV_proj, VV_geotrans, VV_arr=self.imageHandler.read_img(self.__preprocessed_paras["VV"])
|
||
VH_proj, VH_geotrans, VH_arr = self.imageHandler.read_img(self.__preprocessed_paras["VH"])
|
||
Array_Q=VH_arr/VV_arr
|
||
Out_Q_path=os.path.join(self.__workspace_preprocessed_path,"CrossPolarRatior_q.tif")
|
||
|
||
self.imageHandler.write_img(Out_Q_path, VV_proj, VV_geotrans, Array_Q)
|
||
self.__preprocessed_paras.update({"Ratior_q": Out_Q_path})
|
||
return Out_Q_path
|
||
|
||
def Calu_H(self,Q_path,angle_path,lamda):
|
||
"""
|
||
计算几何特征复合因子H
|
||
Q_path:交叉极化比值Q数据
|
||
angle_path:角度文件
|
||
lamda:波长
|
||
"""
|
||
wave_k=2*math.pi/lamda
|
||
array_angle=self.imageHandler.get_data(angle_path) # 弧度
|
||
Q_proj, Q_geo, Q_arr = self.imageHandler.read_img(Q_path)
|
||
temp_val=np.power((0.13 + np.sin(1.5 * array_angle)),1.4)
|
||
temp_A=Q_arr/(0.095*temp_val)
|
||
Array_H=np.power((-1*np.log(1-temp_A)/1.3),10/9)/wave_k
|
||
Out_H_path=os.path.join(self.__workspace_preprocessed_path, "Factor_H.tif")
|
||
self.imageHandler.write_img(Out_H_path, Q_proj, Q_geo, Array_H)
|
||
|
||
|
||
def Calu_L_Zs(self, Zs_path,L_path, H_path, Fr_path, lamda, seita_Path):
|
||
"""
|
||
计算几何特征复合因子L、Zs
|
||
Zs_path:输出几何特征复合因子 L文件
|
||
H_path:输入几何特征复合因子 Fr文件
|
||
Fr_path:输入的Fr_path
|
||
lamda:输入的波长
|
||
seita_Path:输入的入射角
|
||
"""
|
||
H_proj, H_geo, H_arr = self.imageHandler.read_img(H_path)
|
||
Fr_proj, Fr_geo, Fr_arr = self.imageHandler.read_img(Fr_path)
|
||
array_angle=self.imageHandler.get_data(seita_Path) # 弧度
|
||
k=2*math.pi/lamda
|
||
|
||
a=0.5*H_arr*H_arr
|
||
b=-k*np.sin(array_angle)
|
||
y=Fr_arr
|
||
|
||
ans1 = 2 * lambertw(-b * np.sqrt(y / a) / 2) / b # 计算L的两个值
|
||
ans2 = 2 * lambertw(b * np.sqrt(y / a) / 2) / b # 计算L的两个值
|
||
|
||
if "complex" in ans1.dtype.name:
|
||
ans1_real=ans1.real
|
||
ans2_real = ans2.real
|
||
else:
|
||
ans1_real=ans1
|
||
ans2_real = ans2
|
||
|
||
chazhi=ans1_real-ans2_real
|
||
L=np.where(chazhi>0,ans1_real,ans2_real)
|
||
|
||
L[np.isnan(L)] = 0 # 必须剔除异常值,否则无法写入到tif中
|
||
self.imageHandler.write_img(L_path, Fr_proj, Fr_geo, L)
|
||
|
||
Zs=np.power(H_arr, 2)/L
|
||
|
||
Zs[np.isnan(Zs)] = 0 # 必须剔除异常值,否则无法写入到tif中
|
||
self.imageHandler.write_img(Zs_path, Fr_proj, Fr_geo, Zs)
|
||
|
||
def process_handle(self, start):
|
||
"""
|
||
算法主处理函数
|
||
:return: True or False
|
||
"""
|
||
# 单视复数转DB
|
||
meta_file_path = self.__processing_paras['META']
|
||
|
||
# 获取元文件波长数据,单位转为cm
|
||
lamda = MetaDataHandler.get_lamda(meta_file_path) * 100
|
||
|
||
# 创建土壤介电常数影像
|
||
# self.create_soilDLCT_tif()
|
||
logger.info('progress bar: 50%')
|
||
# 计算roi
|
||
bare_land_mask_path = self.create_roi()
|
||
|
||
# 计算参数交叉极化比值Q、几何特征复合因子H,参考论文2.3 Oh模型
|
||
# Out_Q_path=self.Calu_Q(meta_file_path)
|
||
# self.Calu_H(Out_Q_path, self.__preprocessed_paras['LocalIncidenceAngle'], self.__processing_paras['lamda'])
|
||
|
||
# 分块
|
||
bp = BlockProcess()
|
||
block_size = bp.get_block_size(self.__rows, self.__cols)
|
||
bp.cut(self.__workspace_preprocessed_path, self.__workspace_block_tif_path, ['tif', 'tiff'], 'tif', block_size) # 分块裁剪
|
||
logger.info('blocking tifs success!')
|
||
|
||
img_dir, img_name = bp.get_file_names(self.__workspace_block_tif_path, ['tif'])
|
||
dir_dict = bp.get_same_img(img_dir, img_name) # 同一类别放在一个字典下
|
||
|
||
#改2-取分块的影像VV,VH
|
||
hh_list, vv_list, vh_list, hv_list, mask_list = None, None, None, None, None
|
||
angle_list = None
|
||
sar_tif_list = None
|
||
dlct_list = None
|
||
Factor_H_list = None
|
||
for key in dir_dict.keys():
|
||
tmp = key.split("_", 2)[0]
|
||
if tmp == "LocalIncidenceAngle":
|
||
angle_list = dir_dict[key]
|
||
elif tmp == 'HH':
|
||
hh_list = dir_dict[key]
|
||
elif tmp == 'VV':
|
||
vv_list = dir_dict[key]
|
||
elif tmp == 'VH':
|
||
vh_list = dir_dict[key]
|
||
elif tmp == 'HV':
|
||
hv_list = dir_dict[key]
|
||
elif tmp == 'mask':
|
||
mask_list = dir_dict[key]
|
||
# elif tmp == self.__sar_tif_name:
|
||
# sar_tif_list = dir_dict[key]
|
||
elif tmp == "DLCT":
|
||
dlct_list = dir_dict[key]
|
||
elif tmp == "Factor":
|
||
Factor_H_list = dir_dict[key]
|
||
|
||
# if angle_list is None or sar_tif_list is None or dlct_list is None or Factor_H_list is None:
|
||
# raise ValueError('angle_list is None or sar_tif_list is None or dlct_list or Factor_H_list is None')
|
||
#
|
||
# if not len(angle_list) == len(sar_tif_list) == len(dlct_list) == len(dlct_list):
|
||
# raise ValueError('[en(angle_list) == len(sar_tif_list) == len(dlct_list)] is False!') #原方法
|
||
|
||
if hh_list is None or vv_list is None or vh_list is None or hv_list is None or mask_list is None:
|
||
logger.info('angle_list is None or hh_list is None or vv_list is None or vh_list is None or hv_list is None or ndwi_list is None')
|
||
return False
|
||
if not len(hh_list) == len(vv_list) == len(vh_list) == len(hv_list) == len(mask_list):
|
||
logger.info('[len(angle_list) == len(hh_list) == len(vv_list) == len(vh_list) == len(hv_list) == len(ndwi_list)] is False!')
|
||
return False
|
||
|
||
#lee滤波
|
||
f = Filter()
|
||
processes_num = min([len(hh_list), 4])
|
||
# f.lee_filter_multiprocess(sar_tif_list, sar_tif_list, FILTER_SIZE, processes_num)
|
||
f.lee_filter_multiprocess(hh_list, hh_list, FILTER_SIZE, processes_num)
|
||
f.lee_filter_multiprocess(vv_list, vv_list, FILTER_SIZE, processes_num)
|
||
f.lee_filter_multiprocess(vh_list, vh_list, FILTER_SIZE, processes_num)
|
||
f.lee_filter_multiprocess(hv_list, hv_list, FILTER_SIZE, processes_num)
|
||
pool = multiprocessing.Pool(processes=processes_num)
|
||
pl = []
|
||
|
||
# 计算地表粗糙度
|
||
for i in range(len(angle_list)):
|
||
name = os.path.basename(angle_list[i])
|
||
suffix = '_' + name.split('_')[-4] + "_" + name.split('_')[-3] + "_" + name.split('_')[-2] + "_" + \
|
||
name.split('_')[-1]
|
||
|
||
# dielectric_const_factor_path = self.__workspace_processing_path + "dielectric_const_factor.tif"
|
||
# alg.cal_dielectric_const_factor(dielectric_const_factor_path, dlct_list[i],
|
||
# angle_list[i], self.__sar_tif_name)
|
||
surface_roughness_path = self.__workspace_block_tif_processed_path + "surface_roughness" + suffix
|
||
|
||
pl.append(pool.apply_async(alg.cal_soil_roug, (surface_roughness_path, hh_list[i], vv_list[i], hv_list[i], vh_list[i], angle_list[i], mask_list[i], lamda)))
|
||
|
||
# alg.cal_soil_roug(surface_roughness_path, hh_list[i], vv_list[i], hv_list[i], vh_list[i], angle_list[i],
|
||
# mask_list[i], lamda)
|
||
# alg.cal_soil_roughness(surface_roughness_path, sar_tif_list[i],
|
||
# dielectric_const_factor_path, angle_list[i],
|
||
# self.__processing_paras['lamda'])
|
||
|
||
# #改5- 用l和h计算出ZS,参考论文2.2 公式7
|
||
# H_path=Factor_H_list[i]
|
||
# Fr_path=surface_roughness_path
|
||
# k=self.__processing_paras['lamda']
|
||
# seita_Path=angle_list[i]
|
||
#
|
||
# Zs_path=self.__workspace_Zs_block_tif_processed_path + "Zs" + suffix
|
||
# L_path = self.__workspace_Zs_block_tif_processed_path + "Param_L" + suffix
|
||
# self.Calu_L_Zs(Zs_path,L_path, H_path, Fr_path,k,seita_Path)
|
||
logger.info('total:%s, block:%s cal surfaceRoughness success!', len(angle_list), i)
|
||
|
||
pool.close()
|
||
pool.join()
|
||
# 合并处理后的影像
|
||
data_dir = self.__workspace_block_tif_processed_path
|
||
w = ImageHandler.get_img_width(self.__preprocessed_paras['HH'])
|
||
h = ImageHandler.get_img_height(self.__preprocessed_paras["HH"])
|
||
out_path = self.__workspace_processing_path[0:-1]
|
||
tif_type = bp.get_tif_dtype(self.__preprocessed_paras['HH'])
|
||
bp.combine(data_dir, w, h, out_path, file_type=['tif'], datetype=tif_type)
|
||
|
||
# 添加地理信息
|
||
surface_roughness_path = self.__workspace_processing_path + "surface_roughness.tif"
|
||
bp.assign_spatial_reference_byfile(self.__preprocessed_paras['HH'], surface_roughness_path)
|
||
logger.info('progress bar: 80%')
|
||
|
||
# # Zs拼接成一幅tif数据
|
||
# Zs_data_dir = self.__workspace_Zs_block_tif_processed_path
|
||
# ref_proj, ref_geo, im_arr = ImageHandler.read_img(surface_roughness_path)
|
||
# bp.combine_Tif(Zs_data_dir, w, h, out_path, ref_proj, ref_geo, out_type='tif', file_type=['tif', 'tiff'], datetype='float16')
|
||
# Zs_path = self.__workspace_processing_path + "Zs.tif"
|
||
# L_path = self.__workspace_processing_path + "Param_L.tif"
|
||
# Out_H_path = os.path.join(self.__workspace_preprocessed_path, "Factor_H.tif")
|
||
#
|
||
# # product_Zs_path = os.path.join(self.__product_dic, "Zs.tif")
|
||
# product_L_path = os.path.join(self.__product_dic, "L.tif")
|
||
# product_H_path = os.path.join(self.__product_dic, "H.tif")
|
||
# # alg.cal_roi(product_Zs_path, Zs_path, bare_land_mask_path, background_value=np.nan)
|
||
# ROIAlg().cal_roi(product_L_path, L_path, bare_land_mask_path, background_value=np.nan)
|
||
# ROIAlg().cal_roi(product_H_path, Out_H_path, bare_land_mask_path, background_value=np.nan)
|
||
|
||
#生成roi区域
|
||
product_mask_path = self.__workspace_processing_path + 'SurfaceRoughnessProductMask.tif'
|
||
ROIAlg().cal_roi(product_mask_path, surface_roughness_path, bare_land_mask_path, background_value=np.nan)
|
||
product_path = os.path.join(self.__product_dic, 'SurfaceRoughnessProduct.tif')
|
||
self.imageHandler.limit_field(product_path, product_mask_path, surface_roughness_value_min, surface_roughness_value_max)
|
||
|
||
logger.info('cal soil_roughness success!')
|
||
|
||
# 生成快视图
|
||
self.imageHandler.write_quick_view(product_path)
|
||
# self.imageHandler.write_quick_view(product_Zs_path) # 新增加三个
|
||
# self.imageHandler.write_quick_view(product_L_path)
|
||
# self.imageHandler.write_quick_view(product_H_path)
|
||
|
||
logger.info('packing!')
|
||
|
||
xml_path = "./model_meta.xml"
|
||
tem_folder = self.__workspace_path + EXE_NAME + r"\Temporary""\\"
|
||
image_path = product_path
|
||
out_path1 = os.path.join(tem_folder, "trans_geo_projcs.tif")
|
||
out_path2 = os.path.join(tem_folder, "trans_projcs_geo.tif")
|
||
par_dict = CreateDict(image_path, out_path1, out_path2).calu_nature(start)
|
||
model_xml_path = os.path.join(tem_folder, "creat_standard.meta.xml") # 输出xml路径
|
||
CreateStadardXmlFile(xml_path, self.alg_xml_path, par_dict, model_xml_path).create_standard_xml()
|
||
|
||
|
||
# 文件夹打包
|
||
SrcImagePath = self.__input_paras["SingleSAR"]['ParaValue']
|
||
paths = SrcImagePath.split(';')
|
||
SrcImageName = os.path.split(paths[0])[1].split('.tar.gz')[0]
|
||
if len(paths) >= 2:
|
||
for i in range(1, len(paths)):
|
||
SrcImageName=SrcImageName+";"+os.path.split(paths[i])[1].split('.tar.gz')[0]
|
||
meta_xml_path = self.__product_dic+EXE_NAME+"Product.meta.xml"
|
||
CreateMetafile(self.__processing_paras['META'], self.alg_xml_path, model_xml_path, meta_xml_path).process(SrcImageName)
|
||
file.make_targz(self.__out_para, self.__product_dic)
|
||
|
||
logger.info('process_handle success!')
|
||
logger.info('progress bar: 100%')
|
||
|
||
|
||
if __name__ == '__main__':
|
||
multiprocessing.freeze_support() #解决多进程打包成exe后,运行错误
|
||
start = datetime.datetime.now()
|
||
try:
|
||
if len(sys.argv) < 2:
|
||
xml_path = 'SurfaceRoughness.xml'
|
||
else:
|
||
xml_path = sys.argv[1]
|
||
main_handler = RoughnessMain(xml_path)
|
||
if main_handler.check_source() is False:
|
||
raise Exception('check_source() failed!')
|
||
if main_handler.preprocess_handle() is False:
|
||
raise Exception('preprocess_handle() failed!')
|
||
if main_handler.process_handle(start) is False:
|
||
raise Exception('process_handle() failed!')
|
||
logger.info('successful production of ' + EXE_NAME + ' products!')
|
||
except Exception:
|
||
logger.exception("run-time error!")
|
||
finally:
|
||
main_handler.del_temp_workspace()
|
||
|
||
end = datetime.datetime.now()
|
||
msg = 'running use time: %s ' % (end - start)
|
||
logger.info(msg)
|
||
|