SIMOrthoProgram-Orth_LT1AB-.../Ortho/tool/algorithm/polsarpro/pspSurfaceInversion.py

393 lines
13 KiB
Python
Raw Normal View History

import logging
import os
import shutil
import subprocess
logger = logging.getLogger("mylog")
class SurfaceInversionDubois:
"""
调用polsarpro4.2.0的surface_inversion_dubois.exe做土壤水分反演
"""
def __init__(self, exeFilterName='surface_inversion_dubois.exe'):
self.__exeName = exeFilterName
pass
def api_surface_inversion_dubois(
self,
exeDir,
inT3Dir,
outDir,
incidence,
rectX,
rectY,
row,
col,
frequency, # GHZ
angleFlag, # 0:deg, 1:rad
):
"""
:param exeDir:exe所在目录
:param inT3Dir:T3矩阵目录
:param outDir:输出目录
:param rectX:有效区域x
:param rectY:有效区域y
:param rectWidth:有效区域宽
:param rectHeight:有效区域高
:param Nwin:滤波窗口大小 3 5 7 9 11
:param Nlook:一般是1
"""
if len(exeDir) == 0:
if not os.path.exists(self.__exeName):
raise Exception(self.__exeName + ' not exists.')
exePath = self.__exeName
else:
if not os.path.exists(exeDir + '\\' + self.__exeName):
raise Exception(
exeDir +
'\\' +
self.__exeName +
' not exists.')
exePath = exeDir + '\\' + self.__exeName
if not self._checkT3Matrix(inT3Dir):
raise Exception('T3 Matrix check failed.')
if not os.path.exists(outDir):
os.makedirs(outDir)
Off_lig = rectX
Off_col = rectY
Sub_Nlig = row
Sub_Ncol = col
dataFormat = 'T3'
calibration_flag = 1
calibration_coefficient = 0.0
threshold_HHHH_VVVV = 0.0
threshold_HVHV_VVVV = 0.0
para_list = [
exePath,
inT3Dir,
outDir,
dataFormat,
incidence,
Off_lig,
Off_col,
Sub_Nlig,
Sub_Ncol,
frequency, # GHZ
angleFlag,
]
cmd = "surface_inversion_dubois.exe -id {} -od {} -iodf {} -ang {} -ofr {} -ofc {} -fnr {} -fnc {} -fr {} -un {} -caf {} -cac {} -th1 {} -th2 {}".format(
inT3Dir, outDir, dataFormat, incidence, Off_lig, Off_col, Sub_Nlig, Sub_Ncol, frequency, angleFlag,
calibration_flag, calibration_coefficient, threshold_HHHH_VVVV, threshold_HVHV_VVVV)
logger.info('surface_inversion_dubois:{}'.format(cmd))
result = os.system(cmd)
logger.info('cmd_result:{}'.format(result))
logger.info('surface_inversion_dubois finish!')
config_path = os.path.join(inT3Dir, 'config.txt')
shutil.copyfile(config_path, os.path.join(outDir, 'config.txt'))
# cmd = ' '.join(str(i) for i in para_list)
# config_path = os.path.join(inT3Dir, 'config.txt')
# shutil.copyfile(config_path, os.path.join(outDir, 'config.txt'))
# result_tuple = subprocess.getstatusoutput(cmd)
#
# if result_tuple[0] != 1 or result_tuple[1].find('error') != -1:
# raise Exception(result_tuple[1])
@staticmethod
def _checkT3Matrix(T3Dir):
# 检测T3矩阵
if not os.path.exists(T3Dir):
return False
file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin',
'T13_real.bin', 'T13_imag.bin', 'T22.bin',
'T23_real.bin', 'T23_imag.bin', 'T33.bin']
for item in file_name_in_out:
if not os.path.exists(T3Dir + "\\" + item):
return False
return True
class SurfaceInversionHisto:
"""
调用polsarpro4.2.0的surface_inversion_histo.exe做土壤水分反演
"""
def __init__(self, exeFilterName='surface_inversion_histo.exe'):
self.__exeName = exeFilterName
pass
def api_surface_inversion_histo(
self,
exeDir,
inT3Dir,
outDir,
rectX,
rectY,
rectWidth,
rectHeight,
Nwin=7,
Nlook=1):
"""
:param exeDir:exe所在目录
:param inT3Dir:T3矩阵目录
:param outDir:输出目录
:param rectX:有效区域x
:param rectY:有效区域y
:param rectWidth:有效区域宽
:param rectHeight:有效区域高
:param Nwin:滤波窗口大小 3 5 7 9 11
:param Nlook:一般是1
"""
if len(exeDir) == 0:
if not os.path.exists(self.__exeName):
raise Exception(self.__exeName + ' not exists.')
exePath = self.__exeName
else:
if not os.path.exists(exeDir + '\\' + self.__exeName):
raise Exception(
exeDir +
'\\' +
self.__exeName +
' not exists.')
exePath = exeDir + '\\' + self.__exeName
if not self._checkT3Matrix(inT3Dir):
raise Exception('T3 Matrix check failed.')
if not os.path.exists(outDir):
os.makedirs(outDir)
if (Nwin % 2) == 0 or Nwin < 0: # 如果为偶数或小于0则使用默认值
Nwin = 7
Off_lig = rectX
Off_col = rectY
Sub_Nlig = rectWidth
Sub_Ncol = rectHeight
para_list = [
exePath,
inT3Dir,
outDir,
Nlook,
Nwin,
Off_lig,
Off_col,
Sub_Nlig,
Sub_Ncol]
cmd = ' '.join(str(i) for i in para_list)
config_path = os.path.join(inT3Dir, 'config.txt')
shutil.copyfile(config_path, os.path.join(outDir, 'config.txt'))
result_tuple = subprocess.getstatusoutput(cmd)
if result_tuple[0] != 1 or result_tuple[1].find('error') != -1:
raise Exception(result_tuple[1])
@staticmethod
def _checkT3Matrix(T3Dir):
# 检测T3矩阵
if not os.path.exists(T3Dir):
return False
file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin',
'T13_real.bin', 'T13_imag.bin', 'T22.bin',
'T23_real.bin', 'T23_imag.bin', 'T33.bin']
for item in file_name_in_out:
if not os.path.exists(T3Dir + "\\" + item):
return False
return True
class SurfaceInversionOh:
"""
调用polsarpro4.2.0的surface_inversion_oh.exe做土壤水分反演
"""
def __init__(self, exeFilterName='surface_inversion_oh.exe'):
self.__exeName = exeFilterName
pass
def api_surface_inversion_oh(
self,
exeDir,
inT3Dir,
outDir,
rectX,
rectY,
rectWidth,
rectHeight,
Nwin=7,
Nlook=1):
"""
:param exeDir:exe所在目录
:param inT3Dir:T3矩阵目录
:param outDir:输出目录
:param rectX:有效区域x
:param rectY:有效区域y
:param rectWidth:有效区域宽
:param rectHeight:有效区域高
:param Nwin:滤波窗口大小 3 5 7 9 11
:param Nlook:一般是1
"""
if len(exeDir) == 0:
if not os.path.exists(self.__exeName):
raise Exception(self.__exeName + ' not exists.')
exePath = self.__exeName
else:
if not os.path.exists(exeDir + '\\' + self.__exeName):
raise Exception(
exeDir +
'\\' +
self.__exeName +
' not exists.')
exePath = exeDir + '\\' + self.__exeName
if not self._checkT3Matrix(inT3Dir):
raise Exception('T3 Matrix check failed.')
if not os.path.exists(outDir):
os.makedirs(outDir)
if (Nwin % 2) == 0 or Nwin < 0: # 如果为偶数或小于0则使用默认值
Nwin = 7
Off_lig = rectX
Off_col = rectY
Sub_Nlig = rectWidth
Sub_Ncol = rectHeight
para_list = [
exePath,
inT3Dir,
outDir,
Nlook,
Nwin,
Off_lig,
Off_col,
Sub_Nlig,
Sub_Ncol]
cmd = ' '.join(str(i) for i in para_list)
config_path = os.path.join(inT3Dir, 'config.txt')
shutil.copyfile(config_path, os.path.join(outDir, 'config.txt'))
result_tuple = subprocess.getstatusoutput(cmd)
if result_tuple[0] != 1 or result_tuple[1].find('error') != -1:
raise Exception(result_tuple[1])
@staticmethod
def _checkT3Matrix(T3Dir):
# 检测T3矩阵
if not os.path.exists(T3Dir):
return False
file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin',
'T13_real.bin', 'T13_imag.bin', 'T22.bin',
'T23_real.bin', 'T23_imag.bin', 'T33.bin']
for item in file_name_in_out:
if not os.path.exists(T3Dir + "\\" + item):
return False
return True
class SurfaceInversionOh2004:
"""
调用polsarpro4.2.0的surface_inversion_oh2004.exe做土壤水分反演
"""
def __init__(self, exeFilterName='surface_inversion_oh2004.exe'):
self.__exeName = exeFilterName
pass
def api_surface_inversion_oh2004(
self,
exeDir,
inT3Dir,
outDir,
incidence,
rectY,
rectX,
row,
col,
frequency, # GHZ
angleFlag):
"""
:param exeDir:exe所在目录
:param inT3Dir:T3矩阵目录
:param outDir:输出目录
:param rectX:有效区域x
:param rectY:有效区域y
:param rectWidth:有效区域宽
:param rectHeight:有效区域高
:param Nwin:滤波窗口大小 3 5 7 9 11
:param Nlook:一般是1
"""
if len(exeDir) == 0:
if not os.path.exists(self.__exeName):
raise Exception(self.__exeName + ' not exists.')
exePath = self.__exeName
else:
if not os.path.exists(exeDir + '\\' + self.__exeName):
raise Exception(
exeDir +
'\\' +
self.__exeName +
' not exists.')
exePath = exeDir + '\\' + self.__exeName
if not self._checkT3Matrix(inT3Dir):
raise Exception('T3 Matrix check failed.')
if not os.path.exists(outDir):
os.makedirs(outDir)
Off_lig = rectX
Off_col = rectY
Sub_Nlig = row
Sub_Ncol = col
dataFormat = 'T3'
threshold_mv = 1.0
threshold_s = 7.0
para_list = [
exePath,
inT3Dir,
outDir,
dataFormat,
incidence,
Off_lig,
Off_col,
Sub_Nlig,
Sub_Ncol,
frequency, # GHZ
angleFlag,
threshold_mv,
threshold_s]
cmd = "surface_inversion_oh2004.exe -id {} -od {} -iodf {} -ang {} -ofr {} -ofc {} -fnr {} -fnc {} -fr {} -un {} -th1 {} -th2 {}".format(
inT3Dir, outDir, dataFormat, incidence, Off_lig, Off_col, Sub_Nlig, Sub_Ncol, frequency, angleFlag, threshold_mv, threshold_s)
logger.info('surface_inversion_oh2004:{}'.format(cmd))
result = os.system(cmd)
logger.info('cmd_result:{}'.format(result))
logger.info('surface_inversion_oh2004 finish!')
config_path = os.path.join(inT3Dir, 'config.txt')
shutil.copyfile(config_path, os.path.join(outDir, 'config.txt'))
# cmd = ' '.join(str(i) for i in para_list)
# result_tuple = subprocess.getstatusoutput(cmd)
# #
# if result_tuple[0] != 1 or result_tuple[1].find('error') != -1:
# raise Exception(result_tuple[1])
@staticmethod
def _checkT3Matrix(T3Dir):
# 检测T3矩阵
if not os.path.exists(T3Dir):
return False
file_name_in_out = ['T11.bin', 'T12_real.bin', 'T12_imag.bin',
'T13_real.bin', 'T13_imag.bin', 'T22.bin',
'T23_real.bin', 'T23_imag.bin', 'T33.bin']
# file_name_in_out = ['T11.img', 'T12_real.img', 'T12_imag.img',
# 'T13_real.img', 'T13_imag.img', 'T22.img',
# 'T23_real.img', 'T23_imag.img', 'T33.img']
for item in file_name_in_out:
if not os.path.exists(T3Dir + "\\" + item):
return False
return True