pandora2d.multiscale.model_estimation

This module contains methods associated to the estimation model for the MVP

Attributes

COMPRESSION_FACTOR

Functions

get_invalid_disp_mask(→ numpy.typing.NDArray)

Compute mask for points equal to invalid_disp in row_map or col_map.

add_mesh_validity_band(→ xarray.Dataset)

Add a 'MESH_validity' band to an existing validity dataset.

make_position_vectors(→ Tuple[numpy.typing.NDArray, ...)

Construct initial et final positions vectors using dataset_disp_maps coordinates

make_polynomial_design_matrix(→ numpy.typing.NDArray)

Construct a 2D polynomial design matrix up to a given degree.

check_nb_observations(design_matrix)

Check if we have more parameters than observations, in which case a ValueError is raised.

estimate_model(→ Tuple[numpy.typing.NDArray, ...)

Estimate deformation model from initial positions to final positions

estimate_model_cholesky(→ Tuple[numpy.typing.NDArray, ...)

Estimate deformation model from initial positions to final positions

estimate_init_disparity_grids(...)

Estimate initial disparity grids (rows and columns) according to scale factor

get_next_shape_mesh_list(→ List[int])

Return list of shape for mesh for next resolution.

concatenate_estimated_grids(→ numpy.typing.NDArray)

Concatenate the estimated disparity grids computed by mesh

get_init_disparity_grids(→ Tuple[numpy.typing.NDArray, ...)

Return initial disparity grid after computing least square coefficients

get_init_disparity_grids_with_mesh(...)

Return initial disparity grid after computing least square coefficients

Module Contents

pandora2d.multiscale.model_estimation.COMPRESSION_FACTOR = 0.5[source]
pandora2d.multiscale.model_estimation.get_invalid_disp_mask(row_map: numpy.typing.NDArray, col_map: numpy.typing.NDArray, invalid_disp: int | float) numpy.typing.NDArray[source]

Compute mask for points equal to invalid_disp in row_map or col_map. This mask is then used to remove invalid points from position vectors.

Parameters:
  • row_map – row disparity map

  • col_map – col disparity map

  • invalid_disp – invalid disparity value

Returns:

invalid mask for position matrix

pandora2d.multiscale.model_estimation.add_mesh_validity_band(dataset_disp_maps: xarray.Dataset) xarray.Dataset[source]

Add a ‘MESH_validity’ band to an existing validity dataset.

Parameters:

dataset_disp_maps – xarray Dataset containing the validity data and the disparity maps

pandora2d.multiscale.model_estimation.make_position_vectors(dataset_disp_maps: xarray.Dataset) Tuple[numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray][source]

Construct initial et final positions vectors using dataset_disp_maps coordinates and disparity maps. To reduce numerical instability, a compression factor is used to create the final and initial position grids.

For the least squares problem y=Xb:
  • X is constructed using init_row_coords and init_col_coords

  • y is either final_row_coords or final_col_coords.

Parameters:

dataset_disp_maps – disparity maps dataset

Returns:

initial position vectors and final position vectors

pandora2d.multiscale.model_estimation.make_polynomial_design_matrix(row_init_coords: numpy.typing.NDArray, col_init_coords: numpy.typing.NDArray, degree: int) numpy.typing.NDArray[source]

Construct a 2D polynomial design matrix up to a given degree.

It generates all polynomial combination of the input variables col_init_coords and row_init_coords.

For the least squares problem y=Xb, X is the design matrix.

Parameters:
  • col_init_coords – initial column positions

  • row_init_coords – initial row positions

  • degree – polynomial degree

Returns:

polynomial design matrix

pandora2d.multiscale.model_estimation.check_nb_observations(design_matrix: numpy.typing.NDArray)[source]

Check if we have more parameters than observations, in which case a ValueError is raised.

Parameters:

design_matrix – Design matrix

pandora2d.multiscale.model_estimation.estimate_model(dataset_disp_maps: xarray.Dataset, degree: int) Tuple[numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray][source]

Estimate deformation model from initial positions to final positions by resolving y=Xb.

Parameters:
  • degree – polynomial degree

  • dataset_disp_maps – disparity maps dataset

Returns:

least square solution and sum of residuals for rows and columns

pandora2d.multiscale.model_estimation.estimate_model_cholesky(dataset_disp_maps: xarray.Dataset, degree: int, lambda_ridge: int | float | None = None) Tuple[numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray][source]

Estimate deformation model from initial positions to final positions by resolving y=Xb using Cholesky decomposition.

We have X.T*X*b = X.T*y and X.T*X = L*L.T with L a lower triangular matrix. Then, using Cholesky decomposition we can resolve L*z=X.T*y and L.T*b = z.

If a value is specified for lamba_ridge, Ridge regularization is used.

Parameters:
  • dataset_disp_maps – disparity maps dataset

  • degree – polynomial degree

  • lambda_ridge – Ridge regularization factor

Returns:

least square solution and sum of residuals for rows and columns

pandora2d.multiscale.model_estimation.estimate_init_disparity_grids(dataset_disp_maps: xarray.Dataset, coefficients_row: numpy.typing.NDArray, coefficients_col: numpy.typing.NDArray, degree: int, next_resolution_shape: Tuple) Tuple[numpy.typing.NDArray, numpy.typing.NDArray][source]

Estimate initial disparity grids (rows and columns) according to scale factor and coefficients of least squares resolution.

Parameters:
  • dataset_disp_maps – disparity maps dataset

  • coefficients_row – row coefficients computed by least squares resolution

  • coefficients_col – col coefficients computed by least squares resolution

  • degree – polynomial degree

  • next_resolution_shape – shape of image for next resolution

Returns:

initial disparity grids for rows and columns

pandora2d.multiscale.model_estimation.get_next_shape_mesh_list(next_resolution_shape: int, nb_mesh: int) List[int][source]

Return list of shape for mesh for next resolution. This list is then used to estimate initial disparity grid at next resolution with the right shape for each mesh.

Parameters:
  • next_resolution_shape – next resolution shape (row or column)

  • nb_mesh – number of mesh (row or column)

Returns:

List of shape by mesh (row or column)

pandora2d.multiscale.model_estimation.concatenate_estimated_grids(estimated_init_grid_list: List[numpy.typing.NDArray], nb_row_mesh: int, nb_col_mesh: int) numpy.typing.NDArray[source]

Concatenate the estimated disparity grids computed by mesh and return the full initial disparity grid for next resolution.

Parameters:
  • estimated_init_grid_list

  • nb_row_mesh – number of mesh for rows

  • nb_col_mesh – number of mesh for columns

Returns:

full estimated initial disparity grid for next resolution

pandora2d.multiscale.model_estimation.get_init_disparity_grids(dataset_disp_maps: xarray.Dataset, multiscale_cfg: Dict, next_resolution_shape: Tuple) Tuple[numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray][source]

Return initial disparity grid after computing least square coefficients

Parameters:
  • dataset_disp_maps – disparity maps dataset

  • multiscale_cfg – multiscale pipeline configuration

  • next_resolution_shape – shape of image for next resolution

Returns:

initial disparity grids for rows and columns and sum of squared residuals

pandora2d.multiscale.model_estimation.get_init_disparity_grids_with_mesh(dataset_disp_maps: xarray.Dataset, multiscale_cfg: Dict, next_resolution_shape: Tuple) Tuple[numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray, xarray.Dataset][source]

Return initial disparity grid after computing least square coefficients for each mesh

Parameters:
  • dataset_disp_maps – disparity maps dataset

  • multiscale_cfg – multiscale pipeline configuration

  • next_resolution_shape – shape of image for next resolution

Returns:

initial disparity grids for rows and columns and RMSE for row and columns