# polsardp - 极化SAR数据处理包
全极化SAR数据的：非相干极化分解、去定向、定向角旋转、螺旋角旋转等算法的Python闭源实现
紧缩极化SAR数据的:非相干紧缩极化分解、全极化T矩阵转换为紧缩极化g矢量等算法的Python闭源实现

[![PyPI Version](https://img.shields.io/pypi/v/polsardp.svg)](https://pypi.org/project/polsardp/)
[![Python Versions](https://img.shields.io/pypi/pyversions/polsardp.svg)](https://pypi.org/project/polsardp/)
[![License: CC BY-NC 4.0](https://img.shields.io/badge/License-CC%20BY--NC%204.0-blue.svg)](https://creativecommons.org/licenses/by-nc/4.0/)
[![Platform](https://img.shields.io/badge/platform-Windows%2064bit-lightgrey.svg)](https://pypi.org/project/polsardp/)

---
⚠️本中文版README仅更新到V0.1.3版本，方便中文用户使用，后续版本更新请以英文版README.md为准


## 简介
`polsardp` 是专为极化SAR数据处理打造的**商用级算法库**，由安文韬基于多年极化SAR数据处理研究成果开发。本库提供业界领先的全极化和紧缩极化目标分解算法，支持定向角旋转、螺旋角旋转、去定向等核心操作，所有算法均经过严格的理论验证和实测数据检验，计算效率高，结果准确可靠。

本库提供简单易用的Python接口，方便科研人员和工程师快速集成使用。后续将持续更新滤波、典型卫星数据导入、检测应用等更多功能，打造一站式极化SAR数据处理解决方案。

⚠️
# 版权声明 (Copyright Declaration)
# 版权所有 © [安文韬] [2026]
# Copyright © [Wentao An] [2026]
#
# 本软件(polsardp)采用 CC BY-NC 4.0 协议授权
# This software (polsardp) is licensed under the CC BY-NC 4.0 License
# 协议官方链接 (Official License Link): https://creativecommons.org/licenses/by-nc/4.0/
#
# 非商业用途使用条款 (Non-Commercial Use Terms):
# 1. 个人学习、科研、教学、公益项目可免费使用 (Free for personal learning, research, teaching, public welfare)
# 2. 使用时必须保留本版权声明并注明作者与来源 (Must retain this copyright notice and credit the author/source)
#
# 商业用途限制 (Commercial Use Restrictions):
# 个人商用、企业使用、盈利项目、收费服务等商业用途必须联系作者购买商业授权
# Commercial use (personal commercial use, corporate use, profit-making projects, paid services, etc.)
# requires purchasing a commercial license by contacting the author.
#
# 商业授权联系方式 (Commercial License Contact):
# 邮箱 (Email): anandyandrew@126.com
# QQ: 85371297

---

## 核心特性
### 已实现功能
- ✅ 全极化SAR非相干极化目标分解（支持几十种主流算法）
- ✅ 紧缩极化SAR非相干紧缩极化目标分解（仅支持圆极化发射HV接收紧缩极化数据）
- ✅ 定向角旋转/去定向处理
- ✅ 螺旋角旋转/去螺旋角处理
- ✅ 极化矩阵转换（相干矩阵T、相关矩阵C、Kennough矩阵K、Pauli矢量k、散射矩阵S、紧缩极化Stokes矢量g等，本程序包处理以T矩阵为主）
- ✅ 极化功率/幅度图像可视化

### 计划更新功能
- 🔄 极化SAR数据滤波（Nonlocal滤波等）
- 🔄 主流SAR卫星数据导入导出（GF-3系列卫星等）
- 🔄 海洋目标检测与识别

---

## 安装
### 系统要求
- 操作系统：Windows 10/11 64位
- Python版本：3.11.x 或 3.12.x 64位
- 依赖库：NumPy ≥ 1.24.0（本包开发用1.26.4）, Matplotlib ≥ 3.7.0（本包开发采用3.10.8，仅画图使用）

### 安装命令
# 安装最新版本
pip install --upgrade polsardp

# 安装指定版本
pip install polsardp==0.1.0

---

## 函数调用方法
### 通用导入方式
本库支持两种标准调用方式，可根据使用习惯自由选择：

1. 整体导入包（多功能使用最便捷）
import polsardp as pdp
result = pdp.函数名(参数)

2. 单独导入指定函数（按需导入，更简洁）
from polsardp import polsar_decompose
result = polsar_decompose(参数)

---


---

## 版本更新日志

v0.1.0（当前最新版，内侧发布版）
1. 加入极化熵H、极化alpha角、极化hq参数计算函数
2. 完善算法内核，可直接用于科研 / 处理数据



v0.0.3
1. 新增极化散射矩阵S、Pauli矢量k、相干矩阵T、相关矩阵C、Kennaugh矩阵K、以及
	紧缩极化Stokes矢量g等极化矩阵和矢量间的相互转换函数
	极化Mueller矩阵，M = np.diag([1,1,1,-1]) @ K
2、四成分分解
#【1】经典Yamaguchi四成分极化分解算法的程序实现
result = polsar_decompose(data, "Y4D")
#【2】去定向Yamaguchi四成分极化分解算法的程序实现
result = polsar_decompose(data, "Y4R")
#【3】G4U四成分极化分解算法的程序实现
result = polsar_decompose(data, "G4U")
#【4】极化对称四成分极化分解算法Version 1版本的程序实现
result = polsar_decompose(data, "PSDv1")
#【5】极化对称四成分极化分解算法Version 2版本的程序实现
result = polsar_decompose(data, "PSDv2")




v0.0.2
1. 新增全极化 SAR 分解功能（polsar_decompose）
2. 新增紧缩极化分解功能（compact_decompose）
3. 新增旋转、去定向、去螺旋角等 10 个工具函数
4. 新增图像可视化函数


v0.0.1
1. 初始占位版本，无实际功能，仅测试包结构

========================================================================
---

## 运行内置演示（推荐）
To quickly get started and understand how to use this package, we provide a ready-to-use demo script together with sample SAR data.
1. The demo file demo.py and sample data GF3_Barnaul_Demo.npy are integrated into the installed package, no extra files are required.
2. Execute the following command in your terminal to run the demo:
```python
python -m polsardp.demo
```
3. What the demo does:
Load the embedded sample polarimetric SAR data.
Perform multiple classic polarimetric decomposition methods.
Display visualization results.
Validate data inversion and deorientation algorithms.

The demo.py file (as follows) is located in the installation directory of the polsardp package. We strongly recommend you read through the source code of this demo carefully. It covers the core calling methods and typical workflows, which will help you master the usage of this package efficiently.

```python
# Import required libraries
import numpy as np
import matplotlib.pyplot as plt
import polsardp as pdp
import os

# Get the installation directory of polsardp package
pkg_dir = os.path.dirname(pdp.__file__)
# Construct full path of the sample NPY data file
npy_path = os.path.join(pkg_dir, "GF3_Barnaul_Demo.npy")
# Load sample SAR data and convert data type to double (float64)
data = np.load(npy_path).astype(np.float64)

# -------------------------- F3R Decomposition --------------------------
# Execute F3R polarimetric decomposition
outP = pdp.polsar_decompose(data, "F3R")
# Visualize decomposition results with different display modes
z = pdp.fSpanImShow2(outP['Ps'], outP['Pd'], outP['Pv'], -1)
z = pdp.fSpanImShow2(outP['Ps'], outP['Pd'], outP['Pv'], -1, [])

# -------------------------- RSD Decomposition --------------------------
# Execute RSD polarimetric decomposition
outP = pdp.polsar_decompose(data, "RSD")
# Set display parameter
imageK = 0
# Visualize decomposition results
z = pdp.fSpanImShow0(outP['Ps'], outP['Pd'], outP['Pv'], imageK-3)
z = pdp.fSpanImShow0(outP['Ps'], outP['Pd'], outP['Pv'], imageK, [])

# -------------------------- RIRSA Decomposition & Inversion --------------------------
# Execute RIRSA polarimetric decomposition
outP = pdp.polsar_decompose(data, "RIRSA")
# Visualize RIRSA decomposition results
z = pdp.fSpanImShow0(outP['Ps'], outP['Pd'], outP['Pv'], imageK-3)
z = pdp.fSpanImShow0(outP['Ps'], outP['Pd'], outP['Pv'], imageK, [])

# Perform RIRSA inversion calculation
dataInv, dataV, data2, dataR = pdp.f_RIRSA_Inv0(outP)
# Calculate maximum absolute error between original and inverted data
print(np.max(np.abs(data - dataInv)))

# -------------------------- MMA Compact Decomposition --------------------------
# Set compact polarization index
indexRL = 2
# Convert original data to compact polarimetric Stokes vector g
g0, g1, g2, g3 = pdp.fT2G(data, indexRL)
# Execute MMA compact polarimetric decomposition
outP = pdp.compact_decompose(g0, g1, g2, g3, indexRL, "mma")
# Visualize MMA decomposition results
z = pdp.fSpanImShow0(outP['Ps'], outP['Pd'], outP['Pv'], imageK-3)
z = pdp.fSpanImShow0(outP['Ps'], outP['Pd'], outP['Pv'], imageK, [])

# -------------------------- Deorientation & Rotation Validation --------------------------
# Execute polarimetric deorientation processing
data0, theta = pdp.fDeorientation0(data)
# Rotate data back with the calculated angle
dataT = pdp.fOrientationAngleRotation(data0, -theta)
# Calculate maximum absolute error before and after rotation
print(np.max(np.abs(data - dataT)))

# Display all generated figures
plt.show()
```
---

========================================================================

## 核心函数功能列表（全部对外可用函数）+调用示例

========================================================================
### fOrientationAngleRotation - 极化定向角旋转（逆旋转）
功能：对全极化SAR极化相干矩阵T的数据进行极化定向角逆旋转处理
注：逆旋转指与定向角正向增大旋转正好相反的逆方向旋转
	采用这样定义是因为我们拿到的观测数据都是旋转后的数据
	反向旋转正好可以让定向角越来越小直至消除
	从而于去定向操作相一致

输入参数：
1. T：三维numpy数组，形状为[Height, Width, 9]
   通道顺序（本包T矩阵数据存储均采用如下标准方式）：
   T[...,0] = T11
   T[...,1] = T22
   T[...,2] = T33
   T[...,3] = Re(T12)
   T[...,4] = Re(T13)
   T[...,5] = Re(T23)
   T[...,6] = Im(T12)
   T[...,7] = Im(T13)
   T[...,8] = Im(T23)

2. phi：旋转角参数（对应 2*theta），即2倍的旋转角度,单位是弧度
 注：如果想实现定向角正向旋转，进需给phi加个负号

输出结果：
返回旋转后的极化相干矩阵T（全新数组，不会修改原始输入数据）

导入方式：
from polsardp import fOrientationAngleRotation

调用示例：
import numpy as np
from polsardp import fOrientationAngleRotation

# 加载全极化T矩阵数据
T_matrix = np.random.rand(5, 5, 9).astype(np.float64)

# 设置旋转角参数 phi，弧度单位
phi = np.pi/4

# 执行定向角逆旋转
T_rotated = fOrientationAngleRotation(T_matrix, phi)

# 查看输出结果
print("旋转后T矩阵形状:", T_rotated.shape)
========================================================================
### fDeorientation0 - 极化数据去定向处理
功能：对全极化SAR数据的相干矩阵T进行去定向处理，自动计算定向角并完成逆旋转校正，
	输出定向角为零的相干矩阵，和输入T矩阵的定向角
输入参数：
1. datain：三维numpy数组，形状为(Height, Width, 9)
   标准极化相干矩阵T，通道顺序：
   datain[...,0] = T11
   datain[...,1] = T22
   datain[...,2] = T33
   datain[...,3] = Re(T12)
   datain[...,4] = Re(T13)
   datain[...,5] = Re(T23)
   datain[...,6] = Im(T12)
   datain[...,7] = Im(T13)
   datain[...,8] = Im(T23)
参数说明：


输出结果：
1. T：去定向处理后的极化相干矩阵（全新数组，不修改原始输入）
2. phi：自动计算得到的定向角参数，注意为2倍定向角，弧度单位
	     phi = 2*theta，值域范围 (-pi/2, pi/2]，即2倍定向角
注：之所以phi为2倍的定向角，是为了计算快速

导入方式：
from polsardp import fDeorientation0

调用示例：
import numpy as np
from polsardp import fDeorientation0

# 加载全极化T矩阵数据
T_matrix = np.load("your_t_matrix_data.npy")

# 执行去定向处理
T_processed, phi = fDeorientation0(T_matrix)

# 查看输出结果
print("处理后T矩阵形状:", T_processed.shape)
print("定向角phi形状:", phi.shape)
========================================================================
### fHelixAngleRotation - 极化螺旋角旋转（正旋转）
功能：对全极化SAR极化相干矩阵T的数据进行极化螺旋角旋转处理
	

输入参数：
1. T：三维numpy数组，形状为[Height, Width, 9]
   通道顺序（本包T矩阵数据存储均采用如下标准方式）：
   T[...,0] = T11
   T[...,1] = T22
   T[...,2] = T33
   T[...,3] = Re(T12)
   T[...,4] = Re(T13)
   T[...,5] = Re(T23)
   T[...,6] = Im(T12)
   T[...,7] = Im(T13)
   T[...,8] = Im(T23)

2. phi：旋转角参数（对应 2*theta），theta即螺旋角，
	phi即2倍的旋转角度，之所以使用phi是为了计算快速
	phi单位是弧度


输出结果：
返回旋转后的极化相干矩阵T（全新数组，不会修改原始输入数据）

导入方式：
from polsardp import fHelixAngleRotation

调用示例：
import numpy as np
from polsardp import fHelixAngleRotation

# 加载全极化T矩阵数据
T_matrix = np.random.rand(5, 5, 9).astype(np.float64)

# 设置旋转角参数 phi，弧度单位
phi = np.pi/8

# 执行螺旋角逆旋转
T_rotated = fHelixAngleRotation(T_matrix, phi)

# 查看输出结果
print("旋转后T矩阵形状:", T_rotated.shape)
========================================================================
### fDeHelixAngle - 极化数据去螺旋角处理
功能：对全极化SAR数据的相干矩阵T进行去螺旋角处理，自动计算螺旋角并完成逆旋转校正，
	输出螺旋角为零的相干矩阵，和输入T矩阵的螺旋角
输入参数：
1. datain：三维numpy数组，形状为(Height, Width, 9)
   标准极化相干矩阵T，通道顺序：
   datain[...,0] = T11
   datain[...,1] = T22
   datain[...,2] = T33
   datain[...,3] = Re(T12)
   datain[...,4] = Re(T13)
   datain[...,5] = Re(T23)
   datain[...,6] = Im(T12)
   datain[...,7] = Im(T13)
   datain[...,8] = Im(T23)


输出结果：
1. T：去螺旋角处理后的极化相干矩阵（全新数组，不修改原始输入）
2. phi：自动计算得到的螺旋角参数，注意为2倍螺旋角，弧度单位
		phi = 2*theta，值域范围 (-pi/2, pi/2]，即2倍螺旋角


导入方式：
from polsardp import fDeHelixAngle

调用示例：
import numpy as np
from polsardp import fDeHelixAngle

# 加载全极化T矩阵数据
T_matrix = np.load("your_t_matrix_data.npy")

# 执行去螺旋角处理
T_processed, phi = fDeHelixAngle(T_matrix)

# 查看输出结果
print("处理后T矩阵形状:", T_processed.shape)
print("螺旋角phi形状:", phi.shape)
========================================================================
### polsar_decompose - 全极化SAR非相干极化分解入口函数
功能：全极化SAR数据非相干极化分解统一总入口，内置经典及改进型分解算法几十种，根据传入算法标识自动匹配对应内核完成计算，支持动态传入扩展参数适配不同算法配置需求

输入参数：
1. data：三维numpy数组，固定形状为[Height, Width, 9]
   标准全极化相干矩阵T数据，通道顺序遵循本包统一规范：
   data[...,0] = T11
   data[...,1] = T22
   data[...,2] = T33
   data[...,3] = Re(T12)
   data[...,4] = Re(T13)
   data[...,5] = Re(T23)
   data[...,6] = Im(T12)
   data[...,7] = Im(T13)
   data[...,8] = Im(T23)
   函数内置维度校验，非三维9通道数据将直接抛出异常

2. method：str类型，分解算法名称（不区分大小写）
	支持分解算法名称输入列表：
	# 三成分分解类
	freeman_modified、modified_freeman、mfdd、mf3d、f3r
	freeman_durden、freeman、fdd、f3d
	dnned、mnned、nned
	cui、modified_cui、mcui、c3m、cui+hac
	rsd、mrsd
	tcd、t3d
	rsa
	# 四成分分解类
	y4d、y4r、g4u
	psdv1、psdv2
	# 基于矩阵分量分解类
	t22_based、t33_based、t11_based
	t22_based_rsa、t33_based_rsa、t11_based_rsa
	# 其他特色分解
	rirsa、ici

3. **kwargs：可选动态扩展关键字参数
	部分算法支持自定义配置参数，例如去定向开关deorientation等，无额外配置需求可省略不传
   携带kwargs自定义参数仅部分专属算法生效，通用经典算法无需传入

输出结果：
返回字典格式结构化分解结果，固定内置公共字段：
- method：当前调用的分解算法名称
通用基础输出字段：
- Ps：表面散射功率
- Pd：二次散射功率
- Pv：体散射功率
依据所选算法不同，额外搭载对应专属极化特征参数、分解子矩阵、角度参数等自定义字段

导入方式：
from polsardp import polsar_decompose

调用示例：
import numpy as np
from polsardp import polsar_decompose

# 加载标准9通道全极化相干矩阵数据
T_data = np.load("full_polar_t_matrix.npy")

# 配置分解算法
method = "RSD"

# 执行全极化分解，无扩展参数直接调用
res = polsar_decompose(T_data, method)

# 查看基础分解结果
print("所用分解算法：", res["method"])
print("表面散射分量形状：", res["Ps"].shape)
print("二面角散射分量形状：", res["Pd"].shape)

# 携带扩展参数调用示例
res2 = polsar_decompose(T_data, "t22_based", deorientation=True)
==================================================
支持分解算法大类汇总：
1、四成分分解
#【1】经典Yamaguchi四成分极化分解算法的程序实现
result = polsar_decompose(data, "Y4D")
#【2】去定向Yamaguchi四成分极化分解算法的程序实现
result = polsar_decompose(data, "Y4R")
#【3】G4U四成分极化分解算法的程序实现
G4U四成分极化分解算法的程序实现
#【4】极化对称四成分极化分解算法Version 1版本的程序实现
result = polsar_decompose(data, "PSDv1")
#【5】极化对称四成分极化分解算法Version 2版本的程序实现
result = polsar_decompose(data, "PSDv2")

2、三成分分解
#【6】经典Freeman-Durden分解算法的程序实现
result = polsar_decompose(data, "FDD") 
#【7】去定向三成分极化分解算法的程序实现
result = polsar_decompose(data, "T3D")
#【8】去定向改进Freeman-Durden分解算法的程序实现
result = polsar_decompose(data, “F3R”)
#【9】经典Non-Negative Eigenvalue Decomposition分解算法的程序实现
result = polsar_decompose(data, "NNED")
#【10】去定向非负特征值分解算法的程序实现
result = polsar_decompose(data, "DNNED")
#【11】YI CUI提出的基于模型三成分全极化分解算法
result = polsar_decompose(data, "CUI")
#【12】改进型CUI三成分全极化分解算法的程序实现
result = polsar_decompose(data, "C3M")
#【13】融合螺旋角补偿的改进CUI 全极化分解算法的程序实现
result = polsar_decompose(data, "CUI+HAC")
#【14】反射对称三成分全极化分解算法
result = polsar_decompose(data, "RSD")
#【15】基于T22通道反射对称近似的三成分极化分解算法的程序实现
result = polsar_decompose(data, "T22_based", deorientation=True/False)
#【16】基于T33通道反射对称近似的三成分极化分解算法的程序实现
result = polsar_decompose(data, "T33_based", deorientation=True/False)
#【17】基于T11通道反射对称近似的三成分极化分解算法的程序实现
result = polsar_decompose(data, "T11_based", deorientation=True/False)

2.1基于反射对称近似的三成分分解
#【18】反射对称近似加FDD分解的三成分极化分解算法的程序实现
result = polsar_decompose(data, "RSA")
#【19】基于T22分量反射对称近似加FDD的三成分极化分解算法的程序实现
result = polsar_decompose(data, "T22_based_rsa", deorientation=True/False)
#【20】基于T33分量反射对称近似加FDD的三成分极化分解算法的程序实现
result = polsar_decompose(data, "T33_based_rsa", deorientation=True/False)
#【21】基于T11分量反射对称近似加FDD的三成分极化分解算法的程序实现
result = polsar_decompose(data, "T11_based_rsa", deorientation=True/False)
#【22】旋转不变（成分间相互独立）反射对称近似极化分解算法的程序实现
调用方法：result = polsar_decompose(data, "ICI")


📌 算法应用推荐使用优先级排序：
1、三成分分解程序	
	输入T数据等效视数足够时：
	ICI：最推荐使用，完全三成分分解，三成分间相互独立，各自定向角旋转不影响分解结果
	RSD：第二推荐，完全三成分分解，二次散射功率结果突出
	RSA：第三推荐
	输入T数据等效实数不足时：
	F3R:计算简便、图像可视效果好
	DNNED：第二推荐
2、四成分分解程序	
	输入T数据等效视数足够时：
	PSDv1：最推荐使用，完全四成分分解，计算快速
	PSDv2：第二推荐，完全四成分分解， 计算稍复杂
	输入T数据等效实数不足时：
	F4R:计算简便、图像可视效果好
📌 其它分解算法建议仅做与研究比较使用，不建议用于应用场景使用
===================== 算法详细说明 =====================
【1】算法名称：y4d
调用标识：method="y4d"
调用方法：result = polsar_decompose(data, "Y4D")
算法简介：经典Yamaguchi四成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   Ph：螺旋散射功率分量
参考文献：
   Y. Yamaguchi, T. Moriyama, M. Ishido, and H. Yamada, “Fourcomponent scattering model for polarimetric SAR image decomposition,” IEEE Trans. Geosci. Remote Sens., vol. 43, no. 8, pp. 1699–1706,
Aug. 2005.
==================================================
【2】算法名称：y4r
调用标识：method="y4r"
调用方法：result = polsar_decompose(data, "Y4R")
算法简介：去定向Yamaguchi四成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   Ph：螺旋散射功率分量
参考文献：
   Wentao An, Chunhua Xie, Xinzhe Yuan, Yi Cui, and Jian Yang. “Four-Component Decomposition of Polarimetric SAR Images With Deorientation,” IEEE Geoscience and Remote Sensing Letters, vol.8, no.6, pp.1090-1094, Nov. 2011.
注：先采用去定向，在使用Yamaguchi分解，并采用了非负特征值限制，请注意仅使用了经典体散射模型，未使用基于2dB判断的扩展体散射模型
==================================================
【3】算法名称：g4u
调用标识：method="g4u"
调用方法：result = polsar_decompose(data, "G4U", deorientation=True/False)
算法简介：G4U四成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   Ph：螺旋散射功率分量
补充参数：
   deorientation：可选布尔参数，开启/关闭去定向处理，默认False
参考文献：
   G. Singh, Y. Yamaguchi, and S.-E. Park, “General four-component scattering power decomposition with unitary transformation of coherency
matrix,” IEEE Trans. Geosci. Remote Sens., vol. 51, no. 5,
pp. 3014–3022, May 2013.
==================================================
【4】算法名称：psdv1
调用标识：method="psdv1"
调用方法：result = polsar_decompose(data, "PSDv1")
算法简介：极化对称四成分极化分解算法Version 1版本的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
	Ph:螺旋散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
        dataH: 螺旋散射成分极化相干矩阵T数据
	indexH: 采用标准螺旋散射模型的像素点标识
参考文献：
   Wentao An, and Mingsen Lin. “An Incoherent Decomposition Algorithm Based on Polarimetric Symmetry for Multilook Polarimetric SAR Data,” IEEE Transactions on Geoscience and Remote Sensing, vol.58, no.4, pp. 2383- 2397, Apr. 2020.
==================================================
【5】算法名称：psdv2
调用标识：method="psdv2"
调用方法：result = polsar_decompose(data, "PSDv2")
算法简介：极化对称四成分极化分解算法Version 2版本的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
	Ph: 螺旋散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
        dataH: 螺旋散射成分极化相干矩阵T数据
	indexZ: [Height,Width,3]的布尔矩阵,分别表示采用标准螺旋散射模型、扩展螺旋散射模型、无法使用螺旋散射模型的像素点标识
参考文献：
   Wentao An, and Mingsen Lin. “An Incoherent Decomposition Algorithm Based on Polarimetric Symmetry for Multilook Polarimetric SAR Data,” IEEE Transactions on Geoscience and Remote Sensing, vol.58, no.4, pp. 2383- 2397, Apr. 2020.
===================== 算法详细说明 =====================
【6】算法名称：freeman_durden / freeman / fdd / f3d
调用标识：method="freeman_durden"  或  method="freeman"  或  method="fdd"  或  method="f3d"
调用方法：result = polsar_decompose(data, "FDD")
算法简介：经典 Freeman-Durden 三成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
参考文献：
A. Freeman and S. L. Durden, “A three-component scattering model for
polarimetric SAR,” IEEE Trans. Geosci. Remote Sens., vol. 36, no. 3,
pp. 963–973, May 1998
===================== 算法详细说明 =====================
【7】算法名称：tcd / t3d
调用标识：method="tcd"  或  method="t3d"
调用方法：result = polsar_decompose(data, "T3D")
算法简介：去定向三成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：定向角*2，弧度单位
参考文献：
 Wentao An, Yi Cui, Jian Yang. “Three-Component Model-Based Decomposition for Polarimetric SAR Data,” IEEE Transactions on Geoscience and Remote Sensing, vol.48, no.6, pp.2732-2739, June 2010
===================== 算法详细说明 =====================
【8】算法名称：freeman_modified / modified_freeman / mfdd / mf3d / f3r
调用标识：method="freeman_modified"  或  method="modified_freeman"  或  method="mfdd"  或  method="mf3d"  或  method="f3r"
调用方法：result = polsar_decompose(data, “F3R”)
算法简介：改进型 Freeman-Durden 三成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   phi：二倍的定向角
   a： a = T11 > 2 * T33
参考文献：
   Wentao An, Yi Cui, Jian Yang. “Three-Component Model-Based Decomposition for Polarimetric SAR Data,” IEEE Transactions on Geoscience and Remote Sensing, vol.48, no.6, pp.2732-2739, June 2010. 
注：上述文献提出的分解算法将体散射模型由极化熵为1的体散射模型换为经典体散射模型后的算法
==================================================
【9】算法名称：nned
调用标识：method="nned"
调用方法：result = polsar_decompose(data, "NNED")
算法简介：经典非负特征值（Non-Negative Eigenvalue Decomposition）分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   remain：分解残差分量
参考文献：
 J. J. van Zyl, M. Arii, and Y. Kim, “Model-based decomposition of polarimetric SAR covariance matrices constrained for nonnegative eigenvalues,” IEEE Trans. Geosci. Remote Sens., vol. 49, no. 9, pp. 1104–1113, Sep. 2011.
注：Ps+Pd+Pv+remain = Span
===================== 算法详细说明 =====================
【10】算法名称：dnned / mnned
调用标识：method="dnned"  或  method="mnned"
调用方法：result = polsar_decompose(data, "DNNED")
算法简介：去定向非负特征值（NNED）分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量（含残差分量叠加）
   Pv：体散射功率分量
   remain：分解残差分量
   （其余算法内置输出参数）
参考文献：
   （待发表）
本算法先采用去定向处理T矩阵，再使用经典NNED算法分解，并将remain的功率全部纳入Pd
注：本算法Ps+Pd+Pv = Span
==================================================
【11】算法名称：cui
调用标识：method="cui"
调用方法：result = polsar_decompose(data, "CUI")
算法简介：CUI提出的基于模型三成分全极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：第一次定向角旋转角度*2，弧度单位
   phi：第二次定向角旋转角度*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
参考文献：
   Y. Cui, Y. Yamaguchi, J. Yang, H. Kobayashi, S.-E. Park, and
G. Singh, “On complete model-based decomposition of polarimetric
SAR coherency matrix data,” IEEE Trans. Geosci. Remote Sens., vol. 52,
no. 4, pp. 1991–2001, Apr. 2014.
注： 本函数实现的是上述文章中提出的Algorithm 2算法
==================================================
【12】算法名称：mcui / modified_cui / c3m
调用标识：method="mcui"  或  method="modified_cui"  或  method="c3m"
调用方法：result = polsar_decompose(data, "C3M")
算法简介：改进型CUI三成分全极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：第一次定向角旋转角度*2，弧度单位
   phi：第二次定向角旋转角度*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
参考文献：
   Wentao An, Chunhua Xie. “An Improvement on the Complete Model-Based Decomposition of Polarimetric SAR Data,” IEEE Geoscience and Remote Sensing Letters, vol.11, no.11, pp.1926-1930, Nov. 2014.
==================================================
【13】算法名称：cui+hac
调用标识：method="cui+hac"
调用方法：result = polsar_decompose(data, "CUI+HAC")
算法简介：融合螺旋角补偿的改进CUI 全极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：第一次定向角旋转角度*2，弧度单位
   phi：第二次定向角旋转角度*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
参考文献：
（待发表）
本算法3成分结果同C3M分解算法，但在第三成分识别为面散射还是体散射机制时，采用的是T11<(T22+T33)判别为二次散射，其余为面散射，等价于对第三成分使用了螺旋角补偿变换；因此其分解结果中Pd所占比例要高于C3M。
==================================================
【14】算法名称：rsd / mrsd
调用标识：method="rsd"  或  method="mrsd"
调用方法：result = polsar_decompose(data, "RSD")
算法简介：反射对称三成分全极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
参考文献：
   Wentao An, Mingsen Lin, and Haijun Yang, “Modified Reflection Symmetry Decomposition and a New Polarimetric Product of GF-3,” IEEE Geoscience and Remote Sensing Letters, Vo1. 19, pp. 1-5, Jan. 2022.
注：本算法为上述论文中MRSD分解算法的程序实现
==================================================
【15】算法名称：t22_based
调用标识：method="t22_based"
调用方法：result = polsar_decompose(data, "T22_based", deorientation=True/False)
算法简介：基于T22通道的全极化分解算法（支持去定向）的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
补充参数：
   deorientation：可选布尔参数，开启/关闭去定向处理，默认False（推荐）
参考文献：
   （待发表）
注：本算先提取经典体散射成分，然后基于T22通道提取第2和第3成分
	deorientation确定是先对输入T矩阵做去定向，还是仅对第3成分做去定向
	先对输入T矩阵做去定向可非常小幅度提升分解性能，但会增加后续分析复杂度
==================================================
【16】算法名称：t33_based
调用标识：method="t33_based"
调用方法：result = polsar_decompose(data, "T33_based", deorientation=True/False)
算法简介：基于T33通道的全极化分解算法（支持去定向）的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
补充参数：
   deorientation：可选布尔参数，开启/关闭去定向处理，默认False（推荐）
参考文献：
   （待发表）
注：本算先提取经典体散射成分，然后基于T33通道提取第2和第3成分
	deorientation确定是先对输入T矩阵做去定向，还是仅对第3成分做去定向
	先对输入T矩阵做去定向可非常小幅度提升分解性能，但会增加后续分析复杂度
==================================================
【17】算法名称：t11_based
调用标识：method="t11_based"
调用方法：result = polsar_decompose(data, "T11_based", deorientation=True/False)
算法简介：基于T11通道的全极化分解算法（支持去定向）的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta2：第二成分定向角*2，弧度单位
   phi2：第二成分螺旋角*2，弧度单位
   theta3：第三成分定向角*2，弧度单位
   phi3：第三成分螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
补充参数：
   deorientation：可选布尔参数，开启/关闭去定向处理，默认False（推荐）
参考文献：
   （待发表）
注：本算先提取经典体散射成分，然后基于T11通道提取第2和第3成分
	deorientation确定是先对输入T矩阵做去定向，还是仅对第2、3成分做去定向
	推荐deorientation=False
==================================================
【18】算法名称：rsa
调用标识：method="rsa"
调用方法：result = polsar_decompose(data, "RSA")
算法简介：反射对称近似加FDD分解的三成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
参考文献：
   Wentao An, and Mingsen Lin. “A Reflection Symmetry Approximation of Multilook Polarimetric SAR Data and its Application to Freeman-Durden Decomposition,” IEEE Transactions on Geoscience and Remote Sensing, vol.57, no.6, pp. 3649-3660, Jun. 2019. 
==================================================
【19】算法名称：t22_based_rsa
调用标识：method="t22_based_rsa"
调用方法：result = polsar_decompose(data, "T22_based_rsa", deorientation=True/False)
算法简介：基于T22通道分解获得反射对称近似再加FDD的三成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
补充参数：
   deorientation：可选布尔参数，开启/关闭去定向处理，默认False（推荐）
参考文献：
   （待发表）
注：本算先提取经典体散射成分，然后基于T22通道提取第2和第3成分
	deorientation确定是先对输入T矩阵做去定向，还是仅对第3成分做去定向
	先对输入T矩阵做去定向可非常小幅度提升分解性能，但会增加后续分析复杂度
	然后基于3个成分相加获得反射对称近似，然后在使用经典Freeman-Durden分解算法进行分解
==================================================
【20】算法名称：t33_based_rsa
调用标识：method="t33_based_rsa"
调用方法：result = polsar_decompose(data, "T33_based_rsa", deorientation=True/False)
算法简介：基于T33通道分解获得反射对称近似再加FDD的三成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta：定向角*2，弧度单位
   phi：螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
补充参数：
   deorientation：可选布尔参数，开启/关闭去定向处理，默认False（推荐）
参考文献：
   （待发表）
注：本算先提取经典体散射成分，然后基于T22通道提取第2和第3成分
	deorientation确定是先对输入T矩阵做去定向，还是仅对第3成分做去定向
	先对输入T矩阵做去定向可非常小幅度提升分解性能，但会增加后续分析复杂度
	然后基于3个成分相加获得反射对称近似，然后在使用经典Freeman-Durden分解算法进行分解
==================================================
【21】算法名称：t11_based_rsa
调用标识：method="t11_based_rsa"
调用方法：result = polsar_decompose(data, "T11_based_rsa", deorientation=True/False)
算法简介：基于T33通道分解获得反射对称近似再加FDD的三成分极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta2：第二成分定向角*2，弧度单位
   phi2：第二成分螺旋角*2，弧度单位
   theta3：第三成分定向角*2，弧度单位
   phi3：第三成分螺旋角*2，弧度单位
   dataV：体散射成分极化相干矩阵T数据
   dataPsPd：第二成分极化相干矩阵T数据
   dataR：第三成分极化相干矩阵T数据
补充参数：
   deorientation：可选布尔参数，开启/关闭去定向处理，默认False
参考文献：
   （待发表）
注：本算先提取经典体散射成分，然后基于T11通道提取第2和第3成分
	deorientation确定是先对输入T矩阵做去定向，还是仅对第2、3成分做去定向
	推荐deorientation=False
	然后基于3个成分相加获得反射对称近似，然后在使用经典Freeman-Durden分解算法进行分解
==================================================
【22】算法名称：rirsa / ici
调用标识：method="rirsa"  或  method="ici"
调用方法：result = polsar_decompose(data, "ICI")
算法简介：旋转不变（成分间相互独立）反射对称近似极化分解算法的程序实现
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   theta2：第二成分定向角*2，单位度
   phi2：第二成分螺旋角*2，单位度
   theta3：第三成分定向角*2，单位度
   phi3：第三成分螺旋角*2，单位度
     x:  第二成分的max(T11,T22)/(T11+T22)
    omega:第二成分的angle（T12）
   theta1：第一成分定向角*2，单位度
   phi1：第一成分螺旋角*2，单位度
参考文献：
   （待发表）
注：基于输出可以完整重建输入极化相干矩阵T
	重建过程中（x、omega）和（theta1，phi1）仅需使用其中一组
========================================================================
### compact_decompose - 非相干紧缩极化分解入口函数
功能：紧缩极化SAR数据非相干极化分解总入口，支持多种主流紧缩极化分解算法，自动根据算法名称调用对应内核

输入参数：
1. g0：numpy二维数组，紧缩极化Stokes矢量第一分量
2. g1：numpy二维数组，紧缩极化Stokes矢量第二分量
3. g2：numpy二维数组，紧缩极化Stokes矢量第三分量
4. g3：numpy二维数组，紧缩极化Stokes矢量第四分量
5. indexRL：int类型，紧缩极化模式，仅支持 2 或 3
   2 - RH RV 右旋圆极化发射，线极化接收
   3 - LH LV 左旋圆极化发射，线极化接收
6. method：str类型，分解算法名称（支持大小写输入）
	支持分解算法名称输入列表：
	- m_delta、m_chi、ak、dey、wang、hou
	- m_alpha、malpha
	- mmalpha、mma
	- C3D
	- MC3D
7. **kwargs：可选扩展参数（根据不同算法需求动态传入）


输出结果：
返回字典格式的分解结果，固定包含字段：
- method：当前使用的分解算法名称
根据算法类型自动包含散射功率分量：
- Ps：表面散射功率
- Pd：二面角散射功率
- Pv：体散射功率
- 各算法专属输出参数

导入方式：
from polsardp import compact_decompose

调用示例：
import numpy as np
from polsardp import compact_decompose

# 加载紧缩极化Stokes矢量数据
g0 = np.load("g0.npy")
g1 = np.load("g1.npy")
g2 = np.load("g2.npy")
g3 = np.load("g3.npy")

# 配置核心参数
indexRL = 2
method = "mma"  # 可替换为上述支持的任意算法

# 执行紧缩极化分解
result = compact_decompose(g0, g1, g2, g3, indexRL, method)

# 查看分解结果
print("分解算法:", result["method"])
if "Ps" in result:
    print("表面散射功率形状:", result["Ps"].shape)
==================================================
支持分解算法列表：
- m_alpha、malpha
- mmalpha、mma
- C3D
- MC3D
- m_delta、m_chi、ak、dey、wang、hou

📌 算法应用推荐使用优先级排序：C3D、mma、m_alpha
📌 上述三种算法基于输出可以完整重建输入，分解性能依次降低
📌 其它紧缩极化分解算法并不推荐开展应用
===================== 算法详细说明 =====================
【1】算法名称：m_alpha / malpha
调用标识：method="m_alpha"  或  method="malpha"
调用方法：result = compact_decompose(g0, g1, g2, g3, indexRL, "m_alpha")
算法简介：经典m-alpha紧缩极化分解算法
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   alpha：极化alpha角
   m：极化度
   phi：atan2(g2,g1) if indexRL==2; atan2(-g2,g1) if index == 3; 角度单位（即非弧度）
		保留phi是为了基于分解结果可以重建输入的stokes矢量
参考文献：
   Wentao An, Yarong Zou and Qian Feng, “A Modified Incoherent Compact Polarimetric Decomposition Algorithm,” IEEE Transactions on Geoscience and Remote Sensing, vol. 63, pp. 1-13, 2025, Art no. 5205713, doi: 10.1109/TGRS.2025.3545022
==================================================
【2】算法名称：mmalpha / mma
调用标识：method="mmalpha"  或  method="mma"
调用方法：result = compact_decompose(g0, g1, g2, g3, indexRL, "mmalpha")
算法简介：改进型m-alpha紧缩极化分解算法
输出参数（字典固定返回）：
   Ps：表面散射功率分量
   Pd：二次散射功率分量
   Pv：体散射功率分量
   alpha：极化alpha角
   m：极化度
   phi：atan2(g2,g1) if indexRL==2; atan2(-g2,g1) if indexRL == 3;角度单位（即非弧度）
		保留phi是为了基于分解结果可以重建输入的stokes矢量
参考文献：
   Wentao An, Yarong Zou and Qian Feng, “A Modified Incoherent Compact Polarimetric Decomposition Algorithm,” IEEE Transactions on Geoscience and Remote Sensing, vol. 63, pp. 1-13, 2025, Art no. 5205713, doi: 10.1109/TGRS.2025.3545022
==================================================
【3】算法名称：C3D
调用标识：method="C3D"
调用方法：result = compact_decompose(g0, g1, g2, g3, indexRL, "C3D")
算法简介：C3D紧缩极化分解算法（未发表，推荐优先使用）
输出参数（字典固定返回）：
   result['Ps']：表面散射功率分量
   result['Pd']：二次散射功率分量
   result['Pv']：体散射功率分量
	result['phi']:atan2(g2,g1) if indexRL==2; atan2(-g2,g1) if indexRL == 3;
					角度单位（即非弧度）
参考文献：
   	待发表。
注：基于输出的Ps、Pd、Pv和phi可以完整重建原输入Stokes矢量，重建函数后续版本会补充
==================================================
【4】算法名称：MC3D
调用标识：method="MC3D"
调用方法：result = compact_decompose(g0, g1, g2, g3, indexRL, "MC3D")
算法简介：改进C3D紧缩极化分解算法（未发表）
输出参数（字典固定返回）：
   result['Ps']：表面散射功率分量
   result['Pd']：二次散射功率分量
   result['Pv']：体散射功率分量
参考文献：
   	待发表。
注：提升C3D对面散射为主区域的分解结果

==================================================
【5】算法名称：m_delta / m_chi / ak / dey / wang / hou
调用标识：method="m_delta" / "m_chi" / "ak" / "dey" / "wang" / "hou"
调用方法：result = compact_decompose(g0, g1, g2, g3, indexRL, "Dey")
算法简介：经典紧缩极化分解算法集合，一次调用同步计算全部6种算法结果，输出独立散射功率分量
输出参数（字典固定返回）：
   Ps_delta：m_delta分解-表面散射功率分量
   Pd_delta：m_delta分解-二次散射功率分量
   Pv_delta：m_delta分解-体散射功率分量
   Ps_chi：m_chi分解-表面散射功率分量
   Pd_chi：m_chi分解-二次散射功率分量
   Pv_chi：m_chi分解-体散射功率分量
   Ps_AK：A.K.分解-表面散射功率分量
   Pd_AK：A.K.分解-二次散射功率分量
   Pv_AK：A.K.分解-体散射功率分量
   Ps_Dey：Dey分解-表面散射功率分量
   Pd_Dey：Dey分解-二次散射功率分量
   Pv_Dey：Dey分解-体散射功率分量
   Ps_Wang：Wang分解-表面散射功率分量
   Pd_Wang：Wang分解-二次散射功率分量
   Pv_Wang：Wang分解-体散射功率分量
   Ps_Hou：Hou分解-表面散射功率分量
   Pd_Hou：Hou分解-二次散射功率分量
   Pv_Hou：Hou分解-体散射功率分量
注意事项：
   1. 一次调用自动计算全部6种算法，输出独立字段
   2. Wang分解、Hou分解 **仅支持 indexRL = 2**，indexRL=3时无输出
参考文献：
   Wentao An, Yarong Zou and Qian Feng, “A Modified Incoherent Compact Polarimetric Decomposition Algorithm,” IEEE Transactions on Geoscience and Remote Sensing, vol. 63, pp. 1-13, 2025, Art no. 5205713, doi: 10.1109/TGRS.2025.3545022
==================================================
========================================================================
### f_RIRSA_Inv0 - RIRSA 逆分解重建函数
功能：基于RIRSA（即ICI）极化分解结果进行逆分解运算，重建分解输入的全极化SAR相干矩阵T数据
	支持双参数输入模式，自动完成角度旋转校正与散射分量叠加，输出重建后的标准相干矩阵及各子散射分量
输入参数：
1. varargin：可变输入参数
   必选第1参数：outParameters，字典类型，RIRSA（即ICI）分解输出的全套特征参数
   可选第2参数：扩展参数，用于角度模式重建（无则默认x/omega模式）
   输出矩阵均为全新数组，不修改原始输入数据

输出结果：
1. dataInv：基于分解结果重建后的全极化相干矩阵（三维数组 H*W*9，标准通道格式）
2. dataV：体散射分量相干矩阵数据（三维数组 H*W*9）
3. data2：第二成分相干矩阵数据（三维数组 H*W*9）
4. dataR：第三成分相干矩阵数据（三维数组 H*W*9）
   所有输出矩阵通道顺序遵循本包统一规范：
   data[...,0] = T11
   data[...,1] = T22
   data[...,2] = T33
   data[...,3] = Re(T12)
   data[...,4] = Re(T13)
   data[...,5] = Re(T23)
   data[...,6] = Im(T12)
   data[...,7] = Im(T13)
   data[...,8] = Im(T23)

导入方式：
from polsardp import f_RIRSA_Inv0

调用示例：
import numpy as np
from polsardp import f_RIRSA_Inv0

# 加载ICI分解输出的参数字典
outParameters = polsar_decompose(Your_T_matrix_data, "ICI")

# 执行RIRSA逆分解（默认模式）
dataInv, dataV, data2, dataR = f_RIRSA_Inv0(outParameters)

# 查看输出结果
print(np.max(np.abs(dataInv-Your_T_matrix_data)))
========================================================================
### fSpanImShow0 - 极化分解结果RGB可视化函数
功能：对全极化SAR分解结果进行RGB可视化渲染，
功能：极化功率/幅度图像显示，依据设定的功率阈值显示以保证多景间显示阈值一致
	支持1~5个可变参数输入，自动完成数据预处理、亮度归一化、通道映射，输出标准RGB图像并自动绘图显示
输入参数：
1. varargin：可变输入参数，支持 1~5 个参数，灵活适配不同输入场景
   参数说明：
   1个参数：data ，即极化相干矩阵数据，注意仅显示data[:,:,0:3],下同，结果为功率图像
   2个参数：data, tempMean，即极化相干矩阵T数据 + 亮度阈值调节参数，结果为功率图像
   3个参数：data,tempMean,[],即通道散射数据, 亮度阈值调节参数，第3个空参指示显示幅度图像
   4个参数：Ps, Pd, Pv, tempMean，即三分量散射功率+亮度阈值调节参数，结果为功率图像
   5个参数：Ps, Pd, Pv, tempMean，[]即三分量散射功率，亮度阈值调节参数，第5个空参指示显示幅度图像
  
注：tempMean：亮度调节参数，默认值为 -6.0

输出结果：
1. z：归一化后的RGB可视化图像，三维numpy数组，形状为(Height, Width, 3)
   数值范围自动裁剪至 [0, 1]，通道顺序为标准RGB格式
   函数自动生成图像窗口并显示，不修改原始输入数据

📌fSpanImShow0的tempMean为亮度调节阈值，其本质是一个平均功率值
	当不同图像基于同一功率阈值显示，那么亮度高低就直接反映功率相对大小
	同一显示阈值使得不同图像显示结果之间具有视觉可比性
📌图像在函数中已绘制，但显示需要导入matpoltlib包并运行plt.show()语句
	import matplotlib.pyplot as plt
	plt.show()
	
导入方式：
from polsardp import fSpanImShow0

调用示例：
import numpy as np
import matplotlib.pyplot as plt
from polsardp import fSpanImShow0

# 示例1：基础调用（输入3通道散射数据）
data = np.load("polarimetric_decompose_result.npy")
rgb_image = fSpanImShow0(data)

# 示例2：带亮度参数调用
rgb_image = fSpanImShow0(data, -5.0, [])

# 示例3：Ps/Pd/Pv三分量可视化调用（最常用）
Ps = np.load("Ps.npy")
Pd = np.load("Pd.npy")
Pv = np.load("Pv.npy")
rgb_image = fSpanImShow0(Ps, Pd, Pv, 6.0,[])

plt.show()
# 查看输出结果
print("可视化RGB图像形状:", rgb_image.shape)
========================================================================
### fSpanImShow2 - 极化分解结果自适应RGB可视化函数
功能：对全极化SAR分解结果进行自适应RGB可视化渲染，
功能：极化功率/幅度图像显示，根据输入景数据全自动设定显示阈值，单景最优，但多景间显示阈值不一致
	支持1~5个可变参数输入，自动完成数据预处理、自适应亮度归一化、通道映射，输出标准RGB图像并自动绘图显示
输入参数：
1. varargin：可变输入参数，支持 1~5 个参数，灵活适配不同输入场景
   参数说明：
   1个参数：data ，即3通道极化相干矩阵数据，注意仅显示data[:,:,0:3],下同，结果为功率图像
   2个参数：data, n，即3通道散射数据 + 亮度调整参数,结果为功率图像
   3个参数：data, n,[], 即3通道散射数据+亮度调整参数，第3个空参指示结果为幅度图像
   4个参数：Ps, Pd, Pv, n，即三分量散射功率+亮度调整参数，结果为功率图像
   5个参数：Ps, Pd, Pv, n,[], 即三分量散射功率+亮度调整参数，第5个空参指示结果为幅度图像
   n：归一化模式参数
       n=1： 图像会比较亮
    n=0： 图像亮度适中
       n=-1：图像会比较暗

输出结果：
1. z：归一化后的RGB可视化图像，三维numpy数组，形状为(3, Height, Width)
   z1：适配matplotlib显示的图像数组，形状为(Height, Width, 3)
   数值范围自动裁剪至 [0, 1]，通道顺序与MATLAB保持一致
  
📌图像在函数中已绘制，但显示需要导入matplotlib包并运行plt.show()语句
	import matplotlib.pyplot as plt
	plt.show()
	
导入方式：
from polsardp import fSpanImShow2

调用示例：
import numpy as np
import matplotlib.pyplot as plt
from polsardp import fSpanImShow2

# 示例1：基础调用（输入3通道散射数据）
data = np.load("polarimetric_decompose_result.npy")
rgb_image = fSpanImShow2(data)

# 示例2：带归一化模式调用
rgb_image = fSpanImShow2(data, 1,[])

# 示例3：Ps/Pd/Pv三分量可视化调用（最常用）
Ps = np.load("Ps.npy")
Pd = np.load("Pd.npy")
Pv = np.load("Pv.npy")
rgb_image = fSpanImShow2(Ps, Pd, Pv, -1,[])

plt.show()
# 查看输出结果
print("可视化RGB图像形状:", rgb_image.shape)
========================================================================
以上为 V0.0.1版本加入函数
以下为V0.0.2版本加入函数
注：这些小版本仅为开发过程阶段记录，并未发布
========================================================================
======================================================================
### fk2T - 极化Pauli矢量k转换为极化相干矩阵T
功能：将极化Pauli矢量k（3个复数通道t1、t2、t3）转换为全极化SAR的极化相干矩阵T，
      复数共轭、模平方、实部虚部分解完全遵循SAR极化标准定义，与MATLAB原函数完全一致
	k = [t1,t2,t3]的转置

输入参数：3个输入参数如下
1. t1：复数型二维numpy数组，形状为[Height, Width]，Pauli矢量第一通道
2. t2：复数型二维numpy数组，形状为[Height, Width]，Pauli矢量第二通道
3. t3：复数型二维numpy数组，形状为[Height, Width]，Pauli矢量第三通道

输出结果：
T：三维numpy数组，形状为[Height, Width, 9]，标准极化相干矩阵
   通道顺序：
   T[...,0] = T11 = |t1|²
   T[...,1] = T22 = |t2|²
   T[...,2] = T33 = |t3|²
   T[...,3] = Re(t1·t2*)
   T[...,4] = Re(t1·t3*)
   T[...,5] = Re(t2·t3*)
   T[...,6] = Im(t1·t2*)
   T[...,7] = Im(t1·t3*)
   T[...,8] = Im(t2·t3*)

导入方式：
from polsardp import fk2T

调用示例：
import numpy as np
from polsardp import fk2T

# 生成测试用复数Pauli矢量（2x2）
t1 = np.array([[1+2j, 3+4j], [5+6j, 7+8j]])
t2 = np.array([[9+10j,11+12j],[13+14j,15+16j]])
t3 = np.array([[17+18j,19+20j],[21+22j,23+24j]])

# 转换为相干矩阵T
T = fk2T(t1, t2, t3)

# 查看输出
print("T矩阵形状:", T.shape)
======================================================================
### fS2T - 极化散射矩阵S转换为极化相干矩阵T
功能：将全极化SAR的极化散射矩阵S（HH/HV/VH/VV）转换为Pauli矢量k，再进一步生成标准极化相干矩阵T，
      计算流程与定义完全遵循SAR极化官方标准
      k = [t1,t2,t3]的转置，由散射矩阵S按极化基变换得到

输入参数：1个输入参数如下
1. data：自定义数据对象，包含4个复数型二维numpy数组
   data.HH：复数数组，形状[Height, Width]，水平发射水平接收通道
   data.HV：复数数组，形状[Height, Width]，水平发射垂直接收通道
   data.VH：复数数组，形状[Height, Width]，垂直发射水平接收通道
   data.VV：复数数组，形状[Height, Width]，垂直发射垂直接收通道

输出结果：
T：三维numpy数组，形状为[Height, Width, 9]，标准极化相干矩阵
   通道顺序：
   T[...,0] = T11 = |t1|²
   T[...,1] = T22 = |t2|²
   T[...,2] = T33 = |t3|²
   T[...,3] = Re(t1·t2*)
   T[...,4] = Re(t1·t3*)
   T[...,5] = Re(t2·t3*)
   T[...,6] = Im(t1·t2*)
   T[...,7] = Im(t1·t3*)
   T[...,8] = Im(t2·t3*)
   其中：
   t1 = (HH + VV) / √2
   t2 = (HH - VV) / √2
   t3 = (HV + VH) / √2

导入方式：
from polsardp import fS2T

调用示例：
import numpy as np
from polsardp import fS2T

# 定义数据存储类
class GPS:
    pass

# 构造测试数据
data = GPS()
data.HH = np.random.rand(2, 3) + 1j * np.random.rand(2, 3)
data.HV = np.random.rand(2, 3) + 1j * np.random.rand(2, 3)
data.VH = np.random.rand(2, 3) + 1j * np.random.rand(2, 3)
data.VV = np.random.rand(2, 3) + 1j * np.random.rand(2, 3)

# 转换为相干矩阵T
T = fS2T(data)

# 查看输出
print("T矩阵形状:", T.shape)
=====================================================================
### fT2C - 极化相干矩阵 T 转换为极化相关矩阵 C
功能：将全极化 SAR 的极化相干矩阵 T 转换为标准极化相关矩阵 C，
通道变换、系数计算、实部虚部分配完全遵循 SAR 极化官方定义，与 MATLAB 原函数完全一致
输入参数：1 个输入参数如下
	T：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化相干矩阵
输出结果：
	C：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化相关矩阵
通道顺序：
	T [...,0] = T11
	T [...,1] = T22
	T [...,2] = T33
	T [...,3] = Re (T12)
	T [...,4] = Re (T13)
	T [...,5] = Re (T23)
	T [...,6] = Im (T12)
	T [...,7] = Im (T13)
	T [...,8] = Im (T23)

	C[...,0] = C11
	C [...,1] = C22
	C [...,2] = C33
	C [...,3] = Re (C12)
	C [...,4] = Re (C13)
	C [...,5] = Re (C23)
	C [...,6] = Im (C12)
	C [...,7] = Im (C13)
	C [...,8] = Im (C23)
导入方式：
from polsardp import fT2C
调用示例：
import numpy as np
from polsardp import fT2C
生成测试用相干矩阵 T（5x5x9）
T = np.random.rand(5, 5, 9).astype(np.float64)
转换为相关矩阵 C
C = fT2C(T)
查看输出
print ("C 矩阵形状:", C.shape)
======================================================================
###fC2T - 极化相关矩阵 C 转换为极化相干矩阵 T
功能：将全极化 SAR 的极化相关矩阵 C 转换为标准极化相干矩阵 T，
通道变换、系数计算、实部虚部分配完全遵循 SAR 极化官方定义
输入参数：1 个输入参数如下
	C：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化相关矩阵
输出结果：
	T：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化相干矩阵
通道顺序：
	T [...,0] = T11
	T [...,1] = T22
	T [...,2] = T33
	T [...,3] = Re (T12)
	T [...,4] = Re (T13)
	T [...,5] = Re (T23)
	T [...,6] = Im (T12)
	T [...,7] = Im (T13)
	T [...,8] = Im (T23)

	C[...,0] = C11
	C [...,1] = C22
	C [...,2] = C33
	C [...,3] = Re (C12)
	C [...,4] = Re (C13)
	C [...,5] = Re (C23)
	C [...,6] = Im (C12)
	C [...,7] = Im (C13)
	C [...,8] = Im (C23)
导入方式：
from polsardp import fC2T

调用示例：
import numpy as np
from polsardp import fC2T

生成测试用相关矩阵 C（2x3x9）
C = np.random.rand(2, 3, 9).astype(np.float64)

转换为相干矩阵 T
T = fC2T(C)

查看输出
print ("T 矩阵形状:", T.shape)
======================================================================
###T2K - 极化相干矩阵 T 转换为极化 Kennaugh 矩阵 K
功能：将全极化 SAR 的极化相干矩阵 T 转换为标准极化 Kennaugh 矩阵 K，
输入参数：1 个输入参数如下
	T：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化相干矩阵
通道顺序：
	T [...,0] = T11; T [...,1] = T22; T [...,2] = T33;
	T [...,3] = real (T12); T [...,4] = real (T13); T [...,5] = real (T23);
	T [...,6] = imag (T12); T [...,7] = imag (T13); T [...,8] = imag (T23);
输出结果：
	K：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化 Kennaugh 矩阵
通道顺序：
	K [...,0] = K11; K [...,1] = K12; K [...,2] = K13; K [...,3] = K14;
	K [...,4] = K22; K [...,5] = K23; K [...,6] = K24; K [...,7] = K33;
	K [...,8] = K34;
导入方式：
from polsardp import T2K

调用示例：
import numpy as np
from polsardp import T2K

生成测试用相干矩阵 T（5x5x9）
T = np.random.rand(5, 5, 9).astype(np.float64)

转换为 Kennaugh 矩阵 K
K = T2K(T)

查看输出
print ("K 矩阵形状:", K.shape)
======================================================================
###K2T - 极化 Kennaugh 矩阵 K 转换为极化相干矩阵 T
功能：将全极化 SAR 的极化 Kennaugh 矩阵 K 转换为标准极化相干矩阵 T，
与极化 Mueller 矩阵对应关系：M = np.diag ([1,1,1,-1]) @ K
输入参数：1 个输入参数如下
	K：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化 Kennaugh 矩阵
通道顺序：
	K [...,0] = K11; K [...,1] = K12; K [...,2] = K13; K [...,3] = K14;
	K [...,4] = K22; K [...,5] = K23; K [...,6] = K24; K [...,7] = K33;
	K [...,8] = K34;
输出结果：
	T：三维 numpy 数组，形状为 [Height, Width, 9]，标准极化相干矩阵
通道顺序：
	T [...,0] = T11; T [...,1] = T22; T [...,2] = T33;
	T [...,3] = real (T12); T [...,4] = real (T13); T [...,5] = real (T23);
	T [...,6] = imag (T12); T [...,7] = imag (T13); T [...,8] = imag (T23);
导入方式：
from polsardp import K2T

调用示例：
import numpy as np
from polsardp import K2T

生成测试用 Kennaugh 矩阵 K（5x5x9）
K = np.random.rand(5, 5, 9).astype(np.float64)

转换为相干矩阵 T
T = K2T(K)

查看输出
print ("T 矩阵形状:", T.shape)
======================================================================
### fT2G - 极化相干矩阵T转换为紧缩极化Stokes矢量g
功能：将全极化SAR的极化相干矩阵T的数据，转换为紧缩极化（6种模式可选）下的Stokes矢量g

输入参数：2个输入参数如下
1. T：三维numpy数组，形状为[Height, Width, 9]
   通道顺序：
   T[...,0] = T11
   T[...,1] = T22
   T[...,2] = T33
   T[...,3] = Re(T12)
   T[...,4] = Re(T13)
   T[...,5] = Re(T23)
   T[...,6] = Im(T12)
   T[...,7] = Im(T13)
   T[...,8] = Im(T23)
2. mode：紧缩极化模式编码（0~5）
   0 - RL RR 右旋圆极化发射，圆极化接收
   1 - RL LL 左旋圆极化发射，圆极化接收
   2 - RH RV 右旋圆极化发射，线极化接收
   3 - LH LV 左旋圆极化发射，线极化接收
   4 - [1;1] H V 45度线极化发射，线极化接收
   5 - [1;-1] H V 负45度线极化发射，线极化接收

输出结果：
g0, g1, g2, g3：紧缩极化Stokes矢量g的四个独立元素

导入方式：
from polsardp import fT2G

调用示例：
import numpy as np
from polsardp import fT2G

# 加载全极化T矩阵数据
T_matrix = np.random.rand(5, 5, 9).astype(np.float64)

# 设置紧缩极化模式
mode = 2

# 调用函数进行转换
g0, g1, g2, g3 = fT2G(T_matrix, mode)

# 查看输出结果
print(g0.shape, g1.shape, g2.shape, g3.shape)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
### fCalHalpha - 极化H-alpha极化分解
功能：将全极化SAR的极化相干矩阵T进行H-alpha极化分解，计算**极化熵H**和**极化alpha角**两个核心极化特征参数
注：本函数基于逐像素特征值分解计算H和alpha,耗时较长

输入参数：1个输入参数如下
1. preT：三维numpy数组，形状为[Height, Width, 9]
   通道顺序：
   preT[...,0] = T11
   preT[...,1] = T22
   preT[...,2] = T33
   preT[...,3] = Re(T12)
   preT[...,4] = Re(T13)
   preT[...,5] = Re(T23)
   preT[...,6] = Im(T12)
   preT[...,7] = Im(T13)
   preT[...,8] = Im(T23)

输出结果：
H：极化熵参数，二维numpy数组，形状为[Height, Width]，数值范围 [0, 1]
alpha：平均alpha角参数，二维numpy数组，形状为[Height, Width]，数值范围 [0°, 90°]

导入方式：
from polsardp import fCalHalpha

调用示例：
import numpy as np
from polsardp import fCalHalpha

# 加载全极化T矩阵数据
T_matrix = np.random.rand(5, 5, 9).astype(np.float64)

# 调用函数进行H-alpha极化分解
H, alpha = fCalHalpha(T_matrix)

# 查看输出结果
print(H.shape, alpha.shape)

参考文献：
S. R. Cloude and E. Pottier, “An entropy based classification scheme for
land applications of polarimetric SAR,” IEEE Trans. Geosci. Remote Sens.,
vol. 35, no. 1, pp. 68–78, Jan. 1997.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
###fCalHq - 极化 H-q 参数计算
功能：基于全极化 SAR 的极化相干矩阵 T数据计算极化熵 H和q 参数两个核心极化特征参数
注：本函数极化熵H基于三次多项式分解的快速算法技术，计算快速

输入参数：1 个输入参数如下
data：三维 numpy 数组，形状为 [Height, Width, 9]
通道顺序：
data [...,0] = T11
data [...,1] = T22
data [...,2] = T33
data [...,3] = Re (T12)
data [...,4] = Re (T13)
data [...,5] = Re (T23)
data [...,6] = Im (T12)
data [...,7] = Im (T13)
data [...,8] = Im (T23)
输出结果：
H：极化熵参数，二维 numpy 数组，形状为 [Height, Width]，数值范围 [0, 1]
q：极化 q 参数，二维 numpy 数组，形状为 [Height, Width]，数值范围 [0, 1]
导入方式：
from polsardp import fCalHq
调用示例：
import numpy as np
from polsardp import fCalHq
加载全极化 T 矩阵数据
T_matrix = np.random.rand(5, 5, 9).astype(np.float64)
调用函数进行 H-q 参数计算
H, q = fCalHq(T_matrix)
查看输出结果
print(H.shape, q.shape)
参考文献：
Wentao AN, Yi Cui, Jian Yang, Hongji Zhang. “Fast Alternatives to H/α for Polarimetric SAR,” IEEE Geoscience and Remote Sensing Letters, vol.7, no.2, pp.343-347, April 2010. 
📌注：本算法实现的极化q参数的定义为q=1-T11/Span,与上面文献的q=T11/Span稍有不同
	本算法主要实现上述文献中基于三次方程解析解快速实现极化熵H的计算
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
###fCal_hq - 极化 h和q 参数计算
功能：基于全极化 SAR 的极化相干矩阵 T 计算极化 h 参数和极化q 参数两个极化特征参数
输入参数：1 个输入参数如下
data：三维 numpy 数组，形状为 [Height, Width, 9]
通道顺序：
data [...,0] = T11
data [...,1] = T22
data [...,2] = T33
data [...,3] = Re (T12)
data [...,4] = Re (T13)
data [...,5] = Re (T23)
data [...,6] = Im (T12)
data [...,7] = Im (T13)
data [...,8] = Im (T23)
输出结果：
h：极化 h参数，二维 numpy 数组，形状为 [Height, Width]
q：极化 q 参数，二维 numpy 数组，形状为 [Height, Width]，数值范围 [0, 1]
导入方式：
from polsardp import fCal_hq
调用示例：
import numpy as np
from polsardp import fCal_hq
加载全极化 T 矩阵数据
T_matrix = np.random.rand(5, 5, 9).astype(np.float64)
调用函数进行 H-q 参数计算
h, q = fCal_hq(T_matrix)
查看输出结果
print(h.shape, q.shape)
参考文献：
Wentao AN, Yi Cui, Jian Yang, Hongji Zhang. “Fast Alternatives to H/α for Polarimetric SAR,” IEEE Geoscience and Remote Sensing Letters, vol.7, no.2, pp.343-347, April 2010. 
📌注：本算法实现的极化q参数的定义为q=1-T11/Span,与上面文献的q=T11/Span稍有不同
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++