Skip to content

Block Wise Radiometry

Main Implementation

Block-Wise Radiometric Analysis: NESZ, Average Radiometric Profiles, Scalloping

Attributes

Classes

Functions:

nesz_profiles

Python
nesz_profiles(product: QualityInputProduct, output_quantity: SARRadiometricQuantity = gdt.SARRadiometricQuantity.SIGMA_NOUGHT, config: RadiometricProfilesConfig | None = None) -> list[rdt.RadiometricProfilesOutput]

Noise Equivalent Sigma-Zero (NESZ) radiometric profiles computation. Profiles along RANGE direction.

Parameters:

Name Type Description Default
product QualityInputProduct

object containing product information and data satisfying the QualityInputProduct protocol

required
output_quantity SARRadiometricQuantity

desired radiometric output quantity, by default gdt.SARRadiometricQuantity.SIGMA_NOUGHT

SIGMA_NOUGHT
config RadiometricProfilesConfig | None

RadiometricProfiles configuration, by default None

None

Returns:

Type Description
list[RadiometricProfilesOutput]

a RadiometricProfilesOutput dataclass for each channel

average_elevation_profiles

Python
average_elevation_profiles(product: QualityInputProduct, output_quantity: SARRadiometricQuantity, config: RadiometricProfilesConfig | None = None) -> list[rdt.RadiometricProfilesOutput]

Average elevation radiometric profiles computation. Profiles along RANGE direction.

Parameters:

Name Type Description Default
product QualityInputProduct

object containing product information and data satisfying the QualityInputProduct protocol

required
output_quantity SARRadiometricQuantity

desired radiometric output quantity

required
config RadiometricProfilesConfig | None

RadiometricProfiles configuration, by default None

None

Returns:

Type Description
list[RadiometricProfilesOutput]

a RadiometricProfilesOutput dataclass for each channel

scalloping_profiles

Python
scalloping_profiles(product: QualityInputProduct, output_quantity: SARRadiometricQuantity = gdt.SARRadiometricQuantity.GAMMA_NOUGHT, config: RadiometricProfilesConfig | None = None) -> list[rdt.RadiometricProfilesOutput]

Scalloping radiometric profiles computation. Profiles along AZIMUTH direction.

Parameters:

Name Type Description Default
product QualityInputProduct

object containing product information and data satisfying the QualityInputProduct protocol

required
output_quantity SARRadiometricQuantity

desired radiometric output quantity, by default gdt.SARRadiometricQuantity.GAMMA_NOUGHT

GAMMA_NOUGHT
config RadiometricProfilesConfig | None

RadiometricProfiles configuration, by default None

None

Returns:

Type Description
list[RadiometricProfilesOutput]

a RadiometricProfilesOutput dataclass for each channel

Block-Wise Radiometric Analysis support functionalities

Classes

Functions:

radiometric_profiles_to_netcdf

Python
radiometric_profiles_to_netcdf(data: list[RadiometricProfilesOutput], out_path: str | Path, tag: str | None = None, mode: str = 'mean') -> Path

Saving Radiometric Profiles output data to NetCDF4 file.

Hierarchy::

Text Only
root/
├── product_attributes...
└── swath
    └── polarization
        ├── channel_attributes...
        ├── incidence_angles
        ├── look_angles  [optional]
        ├── azimuth_times  [optional]
        └── radiometric_profiles

Parameters:

Name Type Description Default
data list[RadiometricProfilesOutput]

list of RadiometricProfilesOutput dataclass, corresponding to the full output of the radiometric analysis

required
out_path str | Path

path where to save the NetCDF file

required
tag str | None

tag string to be added to the output filename, by default None

None
mode str

mode string to save the summary profile for each channel, it can be "min" or "mean", by default "mean

'mean'

Returns:

Type Description
Path

path to the output netCDF file

compute_2d_histogram

Python
compute_2d_histogram(x_data: NDArray[floating], y_data: NDArray[floating], x_axis: NDArray[floating], config: Radiometric2DHistogramParameters) -> tuple[npt.NDArray[np.floating], npt.NDArray[np.floating], npt.NDArray[np.floating]]

Compute 2D histogram from input data.

Parameters:

Name Type Description Default
x_data NDArray[floating]

data along the selected x axis

required
y_data NDArray[floating]

data along the selected y axis

required
x_axis NDArray[floating]

histogram x axis

required
config Radiometric2DHistogramParameters

configuration parameters for the 2D histogram

required

Returns:

Type Description
NDArray[floating]

2D histogram

NDArray[floating]

x bins axis

NDArray[floating]

y bins axis

masking_outliers_by_percentiles

Python
masking_outliers_by_percentiles(data: NDArray[floating], kernel: tuple[int, int], percentile_boundaries: tuple[int, int]) -> npt.NDArray[np.floating]

Masking outliers outside of provided percentile boundaries setting them to NaN.

Parameters:

Name Type Description Default
data NDArray[floating]

input 2D array

required
kernel tuple[int, int]

kernel size, height and width in pixels

required
percentile_boundaries tuple[int, int]

data below percentile_boundaries[0] and above percentile_boundaries[1] are set to NaN

required

Returns:

Type Description
NDArray[floating]

input array with NaN where outliers lie

radiometric_statistical_analysis_to_df

Python
radiometric_statistical_analysis_to_df(data: list[RadiometricProfilesOutput]) -> pd.DataFrame

Converting statistical radiometric output to pandas DataFrame.

Parameters:

Name Type Description Default
data list[RadiometricProfilesOutput]

radiometric statistics

required

Returns:

Type Description
DataFrame

dataframe with radiometric statistics

Functions to generate plots for Block-Wise Radiometric Analysis

Attributes

Classes

PlotModes

Bases: Enum

Overall profile computation mode

Attributes

MEAN class-attribute instance-attribute
Python
MEAN = 'mean'
MIN class-attribute instance-attribute
Python
MIN = 'min'

Functions:

radiometric_2D_hist_plot

Python
radiometric_2D_hist_plot(data: RadiometricProfilesOutput, out_dir: str | Path | None, title: str | None = None, plot_mode: str | PlotModes = PlotModes.MEAN, interactive: bool = False) -> None

Radiometric profiles 2D histogram plot.

Parameters:

Name Type Description Default
data RadiometricProfilesOutput

radiometric profiles output data

required
out_dir str | Path | None

output folder path, while interactive mode is on it is ignored so it can be passed as None

required
title str | None

plot title

None
plot_mode str | PlotModes

overall profile extraction mode, by default PlotModes.MEAN

MEAN
interactive bool

if set to True, this flag will show the generated plots and will not dump to disk the graphs, by default False

False

Raises:

Type Description
ValueError

if output directory is None and interactive flag is False

Core Algorithms

Block-Wise Radiometric Analysis profiles computation

Attributes

Classes

Functions:

radiometric_profiles

Python
radiometric_profiles(product: QualityInputProduct, profile_extractor_func: RadiometricProfileExtractorType, kpi_estimator_func: RadiometricBlockKPIEstimatorType, direction: RadiometricAnalysisDirection = RadiometricAnalysisDirection.RANGE, output_quantity: SARRadiometricQuantity = SARRadiometricQuantity.GAMMA_NOUGHT, config: RadiometricProfilesConfig | None = None, add_noise_vectors: bool = False) -> list[RadiometricProfilesOutput]

Block-wise Radiometric profiles computation.

Parameters:

Name Type Description Default
product QualityInputProduct

object containing product information and data satisfying the QualityInputProduct protocol

required
profile_extractor_func RadiometricProfileExtractorType

function to perform radiometric profile extraction

required
kpi_estimator_func RadiometricBlockKPIEstimatorType

function to estimate KPI from a given block and its extracted profile

required
direction RadiometricAnalysisDirection

direction along which profiles are extracted, by default RadiometricAnalysisDirection.RANGE

RANGE
output_quantity SARRadiometricQuantity

desired radiometric output quantity, by default SARRadiometricQuantity.GAMMA_NOUGHT

GAMMA_NOUGHT
config RadiometricProfilesConfig | None

RadiometricProfiles configuration dataclass, by default None

None
add_noise_vectors bool

if True, noise vectors are added to the output, by default False

False

Returns:

Type Description
list[RadiometricProfilesOutput]

a RadiometricProfilesOutput dataclass for each channel

Block-Wise Radiometric Analysis core profile extractors

Attributes

RadiometricProfileExtractorType module-attribute

Python
RadiometricProfileExtractorType = Callable[[npt.NDArray[np.floating], ProfileExtractionParameters], npt.NDArray[np.floating]]

PROFILE_EXTRACTORS_REGISTRY module-attribute

Python
PROFILE_EXTRACTORS_REGISTRY: dict[str, RadiometricProfileExtractorType] = {}

Classes

Functions:

register_profile_extractor

Python
register_profile_extractor(name: str) -> Callable[[RadiometricProfileExtractorType], RadiometricProfileExtractorType]

nesz_profiles_extractor

Python
nesz_profiles_extractor(data: NDArray[floating], params: ProfileExtractionParameters) -> npt.NDArray[np.floating]

Profiles extraction function for NESZ analysis.

Parameters:

Name Type Description Default
data NDArray[floating]

2D target block to be processed

required
params ProfileExtractionParameters

radiometric profiles configuration

required

Returns:

Type Description
NDArray[floating]

nesz profile

average_elevation_profiles_extractor

Python
average_elevation_profiles_extractor(data: NDArray[floating], params: ProfileExtractionParameters) -> npt.NDArray[np.floating]

Profiles extraction function for generic average elevation radiometric profiles analysis.

Parameters:

Name Type Description Default
data NDArray[floating]

2D target block to be processed

required
params ProfileExtractionParameters

radiometric profiles configuration

required

Returns:

Type Description
NDArray[floating]

average elevation profile

scalloping_profiles_extractor

Python
scalloping_profiles_extractor(data: NDArray[floating], params: ProfileExtractionParameters) -> npt.NDArray[np.floating]

Profiles extraction function for Scalloping analysis.

Parameters:

Name Type Description Default
data NDArray[floating]

2D target block to be processed

required
params ProfileExtractionParameters

radiometric profiles configuration

required

Returns:

Type Description
NDArray[floating]

scalloping profile

Block-Wise Radiometric Analysis core profile extractors

Attributes

RadiometricBlockKPIEstimatorType module-attribute

Python
RadiometricBlockKPIEstimatorType = Callable[[npt.NDArray[np.floating], RadiometricProfileAxes, npt.NDArray[np.floating]], AverageElevationRadiometricKPI | NESZRadiometricKPI | ScallopingRadiometricKPI]

KPI_ESTIMATORS_REGISTRY module-attribute

Python
KPI_ESTIMATORS_REGISTRY: dict[str, RadiometricBlockKPIEstimatorType] = {}

Classes

Functions:

register_kpi_estimator

Python
register_kpi_estimator(name: str) -> Callable[[RadiometricBlockKPIEstimatorType], RadiometricBlockKPIEstimatorType]

average_elevation_profile_kpi_estimator

Python
average_elevation_profile_kpi_estimator(profile: NDArray[floating], axes: RadiometricProfileAxes, data_block: NDArray[floating]) -> AverageElevationRadiometricKPI

Estimating KPI for Average Elevation Profile analysis.

Parameters:

Name Type Description Default
profile NDArray[floating]

average elevation profile for the current block, numpy masked invalid array

required
axes RadiometricProfileAxes

axes of the current average elevation profile

required
data_block NDArray[floating]

data block, numpy masked invalid array

required

Returns:

Type Description
AverageElevationRadiometricKPI

KPI for the Average Elevation Profile analysis

nesz_kpi_estimator

Python
nesz_kpi_estimator(profile: NDArray[floating], axes: RadiometricProfileAxes, data_block: NDArray[floating]) -> NESZRadiometricKPI

Estimating KPI for NESZ analysis.

Parameters:

Name Type Description Default
profile NDArray[floating]

nesz profile for the current block, numpy masked invalid array

required
axes RadiometricProfileAxes

axes of the current nesz profile

required
data_block NDArray[floating]

data block, numpy masked invalid array

required

Returns:

Type Description
NESZRadiometricKPI

KPI for NESZ analysis

scalloping_kpi_estimator

Python
scalloping_kpi_estimator(profile: NDArray[floating], axes: RadiometricProfileAxes, data_block: NDArray[floating]) -> ScallopingRadiometricKPI

Estimating KPI for Scalloping analysis.

Parameters:

Name Type Description Default
profile NDArray[floating]

scalloping profile for the current block, numpy masked invalid array

required
axes RadiometricProfileAxes

axes of the current scalloping profile

required
data_block NDArray[floating]

data block, numpy masked invalid array

required

Returns:

Type Description
ScallopingRadiometricKPI

KPI for Scalloping analysis

Utilities

Definition of Block-Wise Radiometric Analysis configuration

Classes

Radiometric2DHistogramParameters dataclass

Radiometric 2D Histogram configuration parameters

Attributes

x_bins_step class-attribute instance-attribute
Python
x_bins_step: int | None = None
y_bins_num class-attribute instance-attribute
Python
y_bins_num: int | None = None
y_bins_center_margin class-attribute instance-attribute
Python
y_bins_center_margin: float | None = None

Methods:

__init__
Python
__init__(x_bins_step: int | None = None, y_bins_num: int | None = None, y_bins_center_margin: float | None = None) -> None
from_dict classmethod
Python
from_dict(arg: dict) -> Radiometric2DHistogramParameters

Creating a Radiometric2DHistogramParameters object by conversion from a dictionary.

Parameters:

Name Type Description Default
arg dict

dictionary with keys equal to the ProfileExtractionParameters ones

required

Returns:

Type Description
Radiometric2DHistogramParameters

Radiometric2DHistogramParameters object

Raises:

Type Description
ValueError

invalid dictionary structure

RiverMaskingMode

Bases: Enum

Describe how river masking is applied DISABLED: no river masking is applied FULL: full river masking algorithm is applied, it may take a while FAST: faster but less accurate river masking is applied

Attributes

DISABLED class-attribute instance-attribute
Python
DISABLED = auto()
FULL class-attribute instance-attribute
Python
FULL = auto()
FAST class-attribute instance-attribute
Python
FAST = auto()

RiverMaskingConfig dataclass

Tunable parameters for river masking algorithm

Attributes

river_masking_mode class-attribute instance-attribute
Python
river_masking_mode: RiverMaskingMode = RiverMaskingMode.DISABLED
local_stats_window class-attribute instance-attribute
Python
local_stats_window: int = 10
backscatter_threshold_percentile class-attribute instance-attribute
Python
backscatter_threshold_percentile: float = 25
cv_lower_threshold_percentile class-attribute instance-attribute
Python
cv_lower_threshold_percentile: float = 20
cv_upper_threshold_percentile class-attribute instance-attribute
Python
cv_upper_threshold_percentile: float = 90
morph_opening_radius class-attribute instance-attribute
Python
morph_opening_radius: int = 3
min_river_area_px_percentile class-attribute instance-attribute
Python
min_river_area_px_percentile: float = 99
region_grow_iterations class-attribute instance-attribute
Python
region_grow_iterations: int = 13
relaxed_backscatter_threshold_percentile class-attribute instance-attribute
Python
relaxed_backscatter_threshold_percentile: float = 35

Methods:

__init__
Python
__init__(river_masking_mode: RiverMaskingMode = RiverMaskingMode.DISABLED, local_stats_window: int = 10, backscatter_threshold_percentile: float = 25, cv_lower_threshold_percentile: float = 20, cv_upper_threshold_percentile: float = 90, morph_opening_radius: int = 3, min_river_area_px_percentile: float = 99, region_grow_iterations: int = 13, relaxed_backscatter_threshold_percentile: float = 35) -> None
from_dict classmethod
Python
from_dict(arg: dict) -> RiverMaskingConfig

Creating a RiverMaskingConfig object by conversion from a dictionary.

Parameters:

Name Type Description Default
arg dict

dictionary with keys equal to the RiverMaskingConfig ones

required

Returns:

Type Description
RiverMaskingConfig

RiverMaskingConfig object

Raises:

Type Description
ValueError

invalid dictionary structure

ProfileExtractionParameters dataclass

Dataclass to store configuration parameters for Radiometric Analysis functions

Attributes

outlier_removal class-attribute instance-attribute
Python
outlier_removal: bool = False
smoothening_filter class-attribute instance-attribute
Python
smoothening_filter: bool = False
river_masking class-attribute instance-attribute
Python
river_masking: RiverMaskingConfig = field(default_factory=RiverMaskingConfig)
filtering_kernel_size class-attribute instance-attribute
Python
filtering_kernel_size: tuple[int, int] | None = None
outliers_percentile_boundaries class-attribute instance-attribute
Python
outliers_percentile_boundaries: tuple[int, int] = (20, 90)
outliers_kernel_size class-attribute instance-attribute
Python
outliers_kernel_size: tuple[int, int] = (5, 5)

Methods:

__init__
Python
__init__(outlier_removal: bool = False, smoothening_filter: bool = False, river_masking: RiverMaskingConfig = RiverMaskingConfig(), filtering_kernel_size: tuple[int, int] | None = None, outliers_percentile_boundaries: tuple[int, int] = (20, 90), outliers_kernel_size: tuple[int, int] = (5, 5)) -> None
from_dict classmethod
Python
from_dict(arg: dict) -> ProfileExtractionParameters

Creating a ProfileExtractionParameters object by conversion from a dictionary.

Parameters:

Name Type Description Default
arg dict

dictionary with keys equal to the ProfileExtractionParameters ones

required

Returns:

Type Description
ProfileExtractionParameters

ProfileExtractionParameters object

Raises:

Type Description
ValueError

invalid dictionary structure

RadiometricProfilesConfig dataclass

Radiometric Profiles configuration setup dataclass

Attributes

azimuth_block_size class-attribute instance-attribute
Python
azimuth_block_size: int = 2000
range_pixel_margin class-attribute instance-attribute
Python
range_pixel_margin: int = 150
histogram_parameters class-attribute instance-attribute
Python
histogram_parameters: Radiometric2DHistogramParameters = field(default_factory=Radiometric2DHistogramParameters)
profile_extraction_parameters class-attribute instance-attribute
Python
profile_extraction_parameters: ProfileExtractionParameters = field(default_factory=ProfileExtractionParameters)

Methods:

__init__
Python
__init__(azimuth_block_size: int = 2000, range_pixel_margin: int = 150, histogram_parameters: Radiometric2DHistogramParameters = Radiometric2DHistogramParameters(), profile_extraction_parameters: ProfileExtractionParameters = ProfileExtractionParameters()) -> None
from_dict classmethod
Python
from_dict(arg: dict) -> RadiometricProfilesConfig

Creating a RadiometricProfilesConfig object by conversion from a dictionary.

Parameters:

Name Type Description Default
arg dict

dictionary with keys equal to the RadiometricProfilesConfig ones

required

Returns:

Type Description
RadiometricProfilesConfig

RadiometricProfilesConfig object

Raises:

Type Description
ValueError

invalid dictionary structure

Definition of Radiometric Analysis specific dataclasses

Classes

RadiometricAnalysisDirection

Bases: Enum

Enum class for radiometric analysis direction

Attributes

RANGE class-attribute instance-attribute
Python
RANGE = auto()
AZIMUTH class-attribute instance-attribute
Python
AZIMUTH = auto()
ALL class-attribute instance-attribute
Python
ALL = auto()

RadiometricAnalysisValue

Bases: Enum

Enum class for radiometric analysis value to be represented

Attributes

AMPLITUDE class-attribute instance-attribute
Python
AMPLITUDE = auto()
PHASE class-attribute instance-attribute
Python
PHASE = auto()

RadiometricAnalysisAxes

Bases: Enum

Enum class for radiometric analysis output axes to represent data versus

Attributes

NATURAL class-attribute instance-attribute
Python
NATURAL = auto()
INCIDENCE_ANGLE class-attribute instance-attribute
Python
INCIDENCE_ANGLE = auto()
LOOK_ANGLE class-attribute instance-attribute
Python
LOOK_ANGLE = auto()

RadiometricProfilesOutput dataclass

Dataclass to collect Radiometric Profiles output

Attributes

general_info class-attribute instance-attribute
Python
general_info: RadiometricOutputProductGeneralInfo | None = None
direction class-attribute instance-attribute
Python
direction: RadiometricAnalysisDirection | None = None
kpi class-attribute instance-attribute
Python
kpi: list[AverageElevationRadiometricKPI] | list[NESZRadiometricKPI] | list[ScallopingRadiometricKPI] | None = None
azimuth_block_centers class-attribute instance-attribute
Python
azimuth_block_centers: NDArray[floating] | None = None
range_block_centers class-attribute instance-attribute
Python
range_block_centers: NDArray[floating] | None = None
blocks_num class-attribute instance-attribute
Python
blocks_num: int | None = None
azimuth_start_time class-attribute instance-attribute
Python
azimuth_start_time: PreciseDateTime | None = None
profiles class-attribute instance-attribute
Python
profiles: NDArray[floating] | None = None
noise_vectors class-attribute instance-attribute
Python
noise_vectors: NDArray[floating] | None = None
look_angles class-attribute instance-attribute
Python
look_angles: NDArray[floating] | None = None
incidence_angles class-attribute instance-attribute
Python
incidence_angles: NDArray[floating] | None = None
block_azimuth_times class-attribute instance-attribute
Python
block_azimuth_times: ndarray | None = None
hist_2d class-attribute instance-attribute
Python
hist_2d: NDArray[floating] | None = None
hist_x_bins_axis class-attribute instance-attribute
Python
hist_x_bins_axis: NDArray[floating] | None = None
hist_y_bins_axis class-attribute instance-attribute
Python
hist_y_bins_axis: NDArray[floating] | None = None

Methods:

__init__
Python
__init__(general_info: RadiometricOutputProductGeneralInfo | None = None, direction: RadiometricAnalysisDirection | None = None, kpi: list[AverageElevationRadiometricKPI] | list[NESZRadiometricKPI] | list[ScallopingRadiometricKPI] | None = None, azimuth_block_centers: NDArray[floating] | None = None, range_block_centers: NDArray[floating] | None = None, blocks_num: int | None = None, azimuth_start_time: PreciseDateTime | None = None, profiles: NDArray[floating] | None = None, noise_vectors: NDArray[floating] | None = None, look_angles: NDArray[floating] | None = None, incidence_angles: NDArray[floating] | None = None, block_azimuth_times: ndarray | None = None, hist_2d: NDArray[floating] | None = None, hist_x_bins_axis: NDArray[floating] | None = None, hist_y_bins_axis: NDArray[floating] | None = None) -> None

PointWiseRadiometricAnalysisOutput dataclass

Dataclass to collect generic output from Radiometric Analysis

Attributes

swath class-attribute instance-attribute
Python
swath: str | None = None
burst class-attribute instance-attribute
Python
burst: int | None = None
channel class-attribute instance-attribute
Python
channel: str | int | None = None
polarization class-attribute instance-attribute
Python
polarization: SARPolarization | None = None
projection class-attribute instance-attribute
Python
projection: SARProjection | None = None
original_profile_db class-attribute instance-attribute
Python
original_profile_db: NDArray[floating] | None = None
smoothed_profile_db class-attribute instance-attribute
Python
smoothed_profile_db: NDArray[floating] | None = None
axis class-attribute instance-attribute
Python
axis: NDArray[floating] | None = None
time class-attribute instance-attribute
Python
time: float | str | ndarray | None = None
direction class-attribute instance-attribute
Python
direction: RadiometricAnalysisDirection | None = None
value_type class-attribute instance-attribute
Python
value_type: RadiometricAnalysisValue | None = None
axis_type class-attribute instance-attribute
Python
axis_type: RadiometricAnalysisAxes | None = None
radiometric_quantity class-attribute instance-attribute
Python
radiometric_quantity: SARRadiometricQuantity | None = None

Methods:

__init__
Python
__init__(swath: str | None = None, burst: int | None = None, channel: str | int | None = None, polarization: SARPolarization | None = None, projection: SARProjection | None = None, original_profile_db: NDArray[floating] | None = None, smoothed_profile_db: NDArray[floating] | None = None, axis: NDArray[floating] | None = None, time: float | str | ndarray | None = None, direction: RadiometricAnalysisDirection | None = None, value_type: RadiometricAnalysisValue | None = None, axis_type: RadiometricAnalysisAxes | None = None, radiometric_quantity: SARRadiometricQuantity | None = None) -> None

BaseRadiometricKPI dataclass

Basic Radiometric Block info

Attributes

block_num class-attribute instance-attribute
Python
block_num: int | None = None
first_az_line_block class-attribute instance-attribute
Python
first_az_line_block: int | None = None
lines_block class-attribute instance-attribute
Python
lines_block: int | None = None

Methods:

__init__
Python
__init__(block_num: int | None = None, first_az_line_block: int | None = None, lines_block: int | None = None) -> None

AverageElevationRadiometricKPI dataclass

Bases: BaseRadiometricKPI

Block-wise Radiometry Block info

Attributes

mid_incidence_angle_deg class-attribute instance-attribute
Python
mid_incidence_angle_deg: float | None = None
mid_look_angle_deg class-attribute instance-attribute
Python
mid_look_angle_deg: float | None = None
enl_block class-attribute instance-attribute
Python
enl_block: float | None = None
mean_level_db class-attribute instance-attribute
Python
mean_level_db: float | None = None
std_level_db class-attribute instance-attribute
Python
std_level_db: float | None = None
slope_wrt_look_angle_db_deg class-attribute instance-attribute
Python
slope_wrt_look_angle_db_deg: float | None = None
variability_index_db class-attribute instance-attribute
Python
variability_index_db: float | None = None
block_num class-attribute instance-attribute
Python
block_num: int | None = None
first_az_line_block class-attribute instance-attribute
Python
first_az_line_block: int | None = None
lines_block class-attribute instance-attribute
Python
lines_block: int | None = None

Methods:

__init__
Python
__init__(block_num: int | None = None, first_az_line_block: int | None = None, lines_block: int | None = None, mid_incidence_angle_deg: float | None = None, mid_look_angle_deg: float | None = None, enl_block: float | None = None, mean_level_db: float | None = None, std_level_db: float | None = None, slope_wrt_look_angle_db_deg: float | None = None, variability_index_db: float | None = None) -> None

NESZRadiometricKPI dataclass

Bases: BaseRadiometricKPI

NESZ Radiometric Block info

Attributes

min_nesz_profile_db class-attribute instance-attribute
Python
min_nesz_profile_db: float | None = None
min_nesz_incidence_angle_deg class-attribute instance-attribute
Python
min_nesz_incidence_angle_deg: float | None = None
min_nesz_range_position class-attribute instance-attribute
Python
min_nesz_range_position: float | None = None
min_nesz_look_angle_deg class-attribute instance-attribute
Python
min_nesz_look_angle_deg: float | None = None
max_nesz_profile_db class-attribute instance-attribute
Python
max_nesz_profile_db: float | None = None
max_nesz_incidence_angle_deg class-attribute instance-attribute
Python
max_nesz_incidence_angle_deg: float | None = None
max_nesz_range_position class-attribute instance-attribute
Python
max_nesz_range_position: float | None = None
max_nesz_look_angle_deg class-attribute instance-attribute
Python
max_nesz_look_angle_deg: float | None = None
mean_nesz_profile_dB class-attribute instance-attribute
Python
mean_nesz_profile_dB: float | None = None
std_nesz_profile_dB class-attribute instance-attribute
Python
std_nesz_profile_dB: float | None = None
mode_nesz_profile_dB class-attribute instance-attribute
Python
mode_nesz_profile_dB: float | None = None
skewness_profile class-attribute instance-attribute
Python
skewness_profile: float | None = None
kurtosis_profile class-attribute instance-attribute
Python
kurtosis_profile: float | None = None
mean_block_dB class-attribute instance-attribute
Python
mean_block_dB: float | None = None
std_block_dB class-attribute instance-attribute
Python
std_block_dB: float | None = None
mode_block_dB class-attribute instance-attribute
Python
mode_block_dB: float | None = None
skewness_block class-attribute instance-attribute
Python
skewness_block: float | None = None
kurtosis_block class-attribute instance-attribute
Python
kurtosis_block: float | None = None
block_num class-attribute instance-attribute
Python
block_num: int | None = None
first_az_line_block class-attribute instance-attribute
Python
first_az_line_block: int | None = None
lines_block class-attribute instance-attribute
Python
lines_block: int | None = None

Methods:

__init__
Python
__init__(block_num: int | None = None, first_az_line_block: int | None = None, lines_block: int | None = None, min_nesz_profile_db: float | None = None, min_nesz_incidence_angle_deg: float | None = None, min_nesz_range_position: float | None = None, min_nesz_look_angle_deg: float | None = None, max_nesz_profile_db: float | None = None, max_nesz_incidence_angle_deg: float | None = None, max_nesz_range_position: float | None = None, max_nesz_look_angle_deg: float | None = None, mean_nesz_profile_dB: float | None = None, std_nesz_profile_dB: float | None = None, mode_nesz_profile_dB: float | None = None, skewness_profile: float | None = None, kurtosis_profile: float | None = None, mean_block_dB: float | None = None, std_block_dB: float | None = None, mode_block_dB: float | None = None, skewness_block: float | None = None, kurtosis_block: float | None = None) -> None

ScallopingRadiometricKPI dataclass

Bases: BaseRadiometricKPI

Scalloping Radiometric Block info

Attributes

mean_level_db class-attribute instance-attribute
Python
mean_level_db: float | None = None
min_level_db class-attribute instance-attribute
Python
min_level_db: float | None = None
max_level_db class-attribute instance-attribute
Python
max_level_db: float | None = None
std_level_db class-attribute instance-attribute
Python
std_level_db: float | None = None
block_num class-attribute instance-attribute
Python
block_num: int | None = None
first_az_line_block class-attribute instance-attribute
Python
first_az_line_block: int | None = None
lines_block class-attribute instance-attribute
Python
lines_block: int | None = None

Methods:

__init__
Python
__init__(block_num: int | None = None, first_az_line_block: int | None = None, lines_block: int | None = None, mean_level_db: float | None = None, min_level_db: float | None = None, max_level_db: float | None = None, std_level_db: float | None = None) -> None

RadiometricOutputProductGeneralInfo dataclass

Block-wise Radiometric analysis product related generic info

Attributes

product instance-attribute
Python
product: str
channel instance-attribute
Python
channel: str
swath instance-attribute
Python
swath: str
polarization instance-attribute
Python
polarization: str
sensor instance-attribute
Python
sensor: str
product_type instance-attribute
Python
product_type: str
acquisition_mode instance-attribute
Python
acquisition_mode: str
radiometric_quantity instance-attribute
Python
radiometric_quantity: str
orbit_direction instance-attribute
Python
orbit_direction: str
acquisition_start_time instance-attribute
Python
acquisition_start_time: datetime

Methods:

__init__
Python
__init__(product: str, channel: str, swath: str, polarization: str, sensor: str, product_type: str, acquisition_mode: str, radiometric_quantity: str, orbit_direction: str, acquisition_start_time: datetime) -> None

RadiometricProfileAxes dataclass

Axes corresponding to the computed radiometric profile

Attributes

incidence_angles_deg instance-attribute
Python
incidence_angles_deg: NDArray[floating]
look_angles_deg instance-attribute
Python
look_angles_deg: NDArray[floating]
slant_range instance-attribute
Python
slant_range: NDArray[floating]
azimuth instance-attribute
Python
azimuth: ndarray

Methods:

__init__
Python
__init__(incidence_angles_deg: NDArray[floating], look_angles_deg: NDArray[floating], slant_range: NDArray[floating], azimuth: ndarray) -> None

Definition of custom errors for troubleshooting of Radiometric Analysis

Attributes

known_errors module-attribute

Python
known_errors = [TimesDirectionMismatchError, MultipleSwathError, PixelTimesMismatchError, SwathNotFoundError, PolarizationNotFoundError]

Classes

SwathNotFoundError

Bases: RuntimeError

Swath provided as input was not found

PolarizationNotFoundError

Bases: RuntimeError

Selected polarization not found in product folder channels

MultipleSwathError

Bases: RuntimeError

There is more than one swath but none has been selected

PixelTimesMismatchError

Bases: RuntimeError

Mismatch between the pixel flag and the input azimuth/range type

TimesDirectionMismatchError

Bases: RuntimeError

Mismatch between the requested analysis direction and the input times/pixels

InputMissingError

Bases: RuntimeError

No input times/pixel have been provided

Point Wise Radiometry

Main Implementation

Point-Wise Radiometric Analysis: radiometric profiles

Attributes

Classes

Functions:

point_wise_radiometric_analysis

Python
point_wise_radiometric_analysis(product: QualityInputProduct, azimuth_times: list[PreciseDateTime | int] | None = None, range_times: list[float | int] | None = None, swath_name: str | None = None, selected_polarization: str | SARPolarization | None = None, is_pixel: bool = False, analysis_config: PointWiseRadiometricAnalysisConfig | None = None) -> list[PointWiseRadiometricAnalysisOutput]

Radiometric Analysis wrapper designed for aresys product folder format.

Parameters:

Name Type Description Default
product QualityInputProduct

object containing product information and data satisfying the QualityInputProduct protocol

required
azimuth_times list[PreciseDateTime | int] | None

azimuth times where to perform the radiometric analysis [performed along range direction], can be expressed as a list of times (PreciseDateTime) or pixel indexes (int), by default None

None
range_times list[float | int] | None

range times where to perform the radiometric analysis [performed along azimuth direction], can be expresses as a list of times (float) or pixel indexes (int), by default None

None
swath_name str | None

if product has multiple swaths, the one to be analyzed should be specified, by default None

None
selected_polarization str | SARPolarization | None

if input product has more than one polarization, the one to be analyzed should be specified, by default None

None
is_pixel bool

boolean flag to inform that the input azimuth times and range times values are expressed as pixels and not as real times in the swath, by default False

False
analysis_config PointWiseRadiometricAnalysisConfig | None

configuration dataclass to manage all the different parameters and enabling flags, by default None

None

Returns:

Type Description
list[PointWiseRadiometricAnalysisOutput]

list of PointWiseRadiometricAnalysisOutput dataclasses for graph plotting

Functions to generate plots for Point-Wise Radiometric Analysis

Attributes

COLOR_SET module-attribute

Python
COLOR_SET = ['#7E5920', '#FFA737', '#5F5449', '#5999D9']

Classes

Functions:

radiometric_analysis_graphs

Python
radiometric_analysis_graphs(data: list[PointWiseRadiometricAnalysisOutput], out_dir: Path | str | None, interactive: bool = False) -> None

Generation of the Radiometric Analysis graphical output.

Parameters:

Name Type Description Default
data list[PointWiseRadiometricAnalysisOutput]

list of PointWiseRadiometricAnalysisOutput results dataclass

required
out_dir str | Path | None

output folder path, while interactive mode is on it is ignored so it can be passed as None

required
interactive bool

if set to True, this flag will show the generated plots and will not dump to disk the graphs, by default False

False

Raises:

Type Description
ValueError

if output directory is None and interactive flag is False