microproduct-l-sar/landcover-L-SAR/tool/algorithm/polsarpro/pspCloudePottierDecompositi...

133 lines
3.8 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.

# -*- coding: UTF-8 -*-
"""
@Project:__init__.py
@File:pspHAAlphaDecomposition.py Cloude-Pottier分解
@Function: Cloude-Pottier eigenvector/eigenvalue based decomposition of a 3x3 coherency matrix [T3]
(Averaging using a sliding window)
V1.0.1:1可选分解特征2bin转tif格式
@Contact:
@Author:SHJ
@Date:2021/9/24 9:06
@Version:1.0.1
"""
import os
import shutil
import subprocess
import logging
logger = logging.getLogger("mylog")
class PspCloudePottierDecomposition:
"""
调用polsarpro4.2.0的Cloude-Pottier极化分解 h_a_alpha_decomposition_T3.exe
"""
def __init__(
self,
exeDir,
inT3Dir,
outDir,
exeDecomposeName='h_a_alpha_decomposition_T3.exe'):
"""
:param exeDir:exe所在目录
:param inT3Dir:T3矩阵目录
:param outDir:输出目录
"""
self.__exeName = exeDecomposeName
self.__exeDir = exeDir
self.__inT3Dir = inT3Dir
self.__outDir = outDir
self.__DecompostFlag = False
pass
def api_h_a_alpha_decomposition_T3(
self,
rectX,
rectY,
rectWidth,
rectHeight,
Nwin=1):
"""
:param rectX:有效区域x
:param rectY:有效区域y
:param rectWidth:有效区域宽
:param rectHeight:有效区域高
:param Nwin :Size of the (Nwin, Nwin) sliding window used to compute local estimates. (int)
"""
if self.__DecompostFlag:
return True
if len(self.__exeDir) == 0:
if not os.path.exists(self.__exeName):
logger.error(self.__exeName + ' not exists.')
return False
exePath = self.__exeName
else:
if not os.path.exists(self.__exeDir + '\\' + self.__exeName):
logger.error(self.__exeName + ' not exists.')
return False
exePath = self.__exeDir + '\\' + self.__exeName
if not self._checkT3Matrix(self.__inT3Dir):
logger.error('T3 Matrix check failed.')
return False
if not os.path.exists(self.__outDir):
os.makedirs(self.__outDir)
alpbetdelgam = 1
Lambda = 1
alpha = 1
entropy = 1
anisotropy = 1
CombHA = 1
CombH1mA = 1
Comb1mHA = 1
Comb1mH1mA = 1
Off_lig = rectX
Off_col = rectY
Sub_Nlig = rectWidth
Sub_Ncol = rectHeight
para_list = [
exePath,
self.__inT3Dir,
self.__outDir,
Nwin,
Off_lig,
Off_col,
Sub_Nlig,
Sub_Ncol,
alpbetdelgam,
Lambda,
alpha,
entropy,
anisotropy,
CombHA,
CombH1mA,
Comb1mHA,
Comb1mH1mA]
cmd = " ".join(str(i) for i in para_list)
config_path = os.path.join(self.__inT3Dir, 'config.txt')
shutil.copyfile(config_path, os.path.join(self.__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])
self.__DecompostFlag = True
return True
@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