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

393 lines
13 KiB
Python
Raw 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 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