pandora2d.criteria ================== .. py:module:: pandora2d.criteria .. autoapi-nested-parse:: This module contains functions associated to the validity mask and criteria dataarray created in the cost volume step. Attributes ---------- .. autoapisummary:: pandora2d.criteria.DISPARITY_INDEPENDENT_CRITERIA pandora2d.criteria.DISPARITY_DEPENDENT_CRITERIA Classes ------- .. autoapisummary:: pandora2d.criteria.FlagArray Functions --------- .. autoapisummary:: pandora2d.criteria.get_disparity_grids pandora2d.criteria.binary_dilation_dataarray pandora2d.criteria.allocate_criteria_dataarray pandora2d.criteria.get_criteria_dataarray pandora2d.criteria.mask_border pandora2d.criteria.mask_disparity_outside_right_image pandora2d.criteria.mask_left_no_data pandora2d.criteria.mask_right_no_data pandora2d.criteria.mask_left_invalid pandora2d.criteria.mask_right_invalid pandora2d.criteria.get_invalid_mask pandora2d.criteria.apply_invalid_right_criteria_mask pandora2d.criteria.apply_nodata_right_criteria_mask pandora2d.criteria.mask_invalid_init_disparity pandora2d.criteria.apply_peak_on_edge pandora2d.criteria.allocate_validity_dataset pandora2d.criteria.get_validity_dataset pandora2d.criteria.get_validity_mask_band pandora2d.criteria.get_partial_validity_mask_band Module Contents --------------- .. py:data:: DISPARITY_INDEPENDENT_CRITERIA .. py:data:: DISPARITY_DEPENDENT_CRITERIA .. py:class:: FlagArray(shape, dtype=float, buffer=None, offset=0, strides=None, order=None) Bases: :py:obj:`numpy.ndarray` NDArray subclass that expects to be filled with Flags and with dedicated repr. .. py:method:: __array_finalize__(obj) .. py:method:: __repr__() -> str .. py:function:: get_disparity_grids(left_image: xarray.Dataset, cv_coords: tuple[numpy.typing.NDArray, numpy.typing.NDArray]) -> tuple[numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray, numpy.typing.NDArray] Return disparity grid from left image according to cost_volumes row and col coordinates. We need to use the cost volume coordinates to process the right points when the step is different from 1. :param left_image: left image :param cv_coords: cost volumes row and column coordinates :return: 4 disparity grids .. py:function:: binary_dilation_dataarray(img: xarray.Dataset, window_size: int) -> xarray.DataArray Apply scipy binary_dilation on our image dataset while keeping the coordinates. Get the no_data pixels. :param img: Dataset image containing : - im: 2D (row, col) or 3D (band_im, row, col) xarray.DataArray float32 - disparity (optional): 3D (disp, row, col) xarray.DataArray float32 - msk (optional): 2D (row, col) xarray.DataArray int16 - classif (optional): 3D (band_classif, row, col) xarray.DataArray int16 - segm (optional): 2D (row, col) xarray.DataArray int16 :param window_size: window size of the cost volume :return: np.ndarray with location of pixels that are marked as no_data according to the image mask .. py:function:: allocate_criteria_dataarray(cv: xarray.Dataset, value: int | float | pandora2d.constants.Criteria = Criteria.VALID, data_type: numpy.typing.DTypeLike | None = None) -> xarray.DataArray This method creates the criteria_dataarray with the same dimensions as cost_volumes (cv). Initially, all points are considered valid and have the value XX. :param cv: cost_volumes :param value: value representing the valid criteria, by default Criteria.VALID = 0 :param data_type: the desired data-type for the criteria_dataarray. :return: criteria_dataarray: 4D DataArray containing the criteria .. py:function:: get_criteria_dataarray(left_image: xarray.Dataset, right_image: xarray.Dataset, cv: xarray.Dataset) -> xarray.DataArray This method fill the criteria dataarray with the different criteria obtained thanks to the methods implemented in this file :param left_image: left image :param right_image: right image :param cv: cost_volumes :return: criteria_dataarray: 4D DataArray containing the criteria .. py:function:: mask_border(left_image: xarray.Dataset, offset: int, criteria_dataarray: xarray.DataArray) -> None This method raises P2D_LEFT_BORDER criteria on the edges of the left image for each of the disparities. P2D_LEFT_BORDER criteria is non-cumulative, so this method will be called last. :param left_image: left image :param offset: offset :param criteria_dataarray: 4D xarray.DataArray with all criteria .. py:function:: mask_disparity_outside_right_image(img_right: xarray.Dataset, offset: int, criteria_dataarray: xarray.DataArray) -> None This method raises P2D_RIGHT_DISPARITY_OUTSIDE criteria for points with disparity dimension outside the right image :param img_right: right image. :param offset: offset :param criteria_dataarray: 4D xarray.DataArray with all criteria .. py:function:: mask_left_no_data(left_image: xarray.Dataset, window_size: int, criteria_dataarray: xarray.DataArray) -> None Set Criteria.P2D_LEFT_NODATA on pixels where a no_data is present in the window around its position in the mask. :param left_image: left image with `msk` data var. :param window_size: window size :param criteria_dataaray: criteria dataarray to update .. py:function:: mask_right_no_data(img_right: xarray.Dataset, window_size: int, criteria_dataarray: xarray.DataArray, spline_order_filter: int) -> None Set Criteria.P2D_RIGHT_NODATA on pixels where a no_data is present in the window around its position in the mask shift by its disparity. :param img_right: right image with `msk` data var. :param window_size: window size :param criteria_dataaray: criteria dataarray to update :param spline_order_filter: order of the scipy filter .. py:function:: mask_left_invalid(left_image: xarray.Dataset, criteria_dataarray: xarray.DataArray) -> None This method raises P2D_INVALID_MASK_LEFT criteria for points having an invalid point in the left image mask. A point is considered invalid if its value in the msk of the left image is different from the values of the valid_pixels and no_data_mask attributes. :param left_image: left image with `msk` data var. :param criteria_dataaray: criteria dataarray to update .. py:function:: mask_right_invalid(img_right: xarray.Dataset, criteria_dataarray: xarray.DataArray) -> None This method raises P2D_INVALID_MASK_RIGHT criteria for points having an invalid point in the right image mask shift by its disparity. A point is considered invalid if when we shift it by its disparity, the obtained value is different from the values of the valid_pixels and no_data_mask attributes. :param img_right: right image with `msk` data var. :param criteria_dataaray: criteria dataarray to update .. py:function:: get_invalid_mask(image: xarray.Dataset) -> xarray.DataArray Get mask for points of the image that are neither valid or no data. :param image: image with `msk` data var. :return: invalid_mask: mask containing invalid points .. py:function:: apply_invalid_right_criteria_mask(criteria_dataarray: xarray.DataArray, mask_criteria_right: xarray.DataArray) -> None This method apply mask_criteria_right array on criteria_dataarray according to row and column disparities. Ignore invalid pixels from the input mask used in interpolation to raise the P2D_INVALID_MASK_RIGHT criterion :param criteria_dataaray: criteria dataarray to update :param mask_criteria_right: mask to apply to criteria dataarray .. py:function:: apply_nodata_right_criteria_mask(criteria_dataarray: xarray.DataArray, mask_criteria_right: xarray.DataArray, spline_order_filter: int) -> None This method apply mask_criteria_right array on criteria_dataarray according to row and column disparities. The P2D_RIGHT_NODATA criterion is raised for sub-pixel disparities if a no-data value from the input mask was used to interpolate the corresponding point. :param criteria_dataaray: criteria dataarray to update :param mask_criteria_right: mask to apply to criteria dataarray :param spline_order_filter: order of the scipy filter .. py:function:: mask_invalid_init_disparity(criteria_dataarray: xarray.DataArray, left_image_disparity: xarray.DataArray) -> None This method raises P2D_INVALID_INIT_DISPARITY criteria for points (row, col) for which the initial disparity is invalid. This criteria is applied on point (row, col), for each disparity value. :param criteria_dataarray: criteria dataarray to update :param left_image_disparity: left image disparity dataarray .. py:function:: apply_peak_on_edge(validity_map: xarray.DataArray, left_image: xarray.Dataset, cv_coords: tuple[numpy.typing.NDArray, numpy.typing.NDArray], row_map: numpy.typing.NDArray, col_map: numpy.typing.NDArray) -> None This method raises P2D_PEAK_ON_EDGE criteria for points (row, col) for which the best matching cost is found for the edge of the disparity range. This criteria is applied on point (row, col), for each disparity value. :param validity_map: 3D validity map :param left_image: left image :param cv_coords: cost volumes row and column coordinates :param row_map: row disparity map :param col_map: col disparity map .. py:function:: allocate_validity_dataset(criteria_dataarray: xarray.DataArray) -> xarray.Dataset Allocate the validity dataset which contains an additional 'criteria' dimension. :param criteria_dataarray: criteria_dataarray used to create validity mask .. py:function:: get_validity_dataset(criteria_dataarray: xarray.DataArray, row_disparity: list, col_disparity: list) -> xarray.Dataset Fill the validity dataset which contains two additional 'criteria' dimensions. :param criteria_dataarray: criteria_dataarray used to create validity mask :param row_disparity: user row disparity :param col_disparity: user col disparity :return: validity Dataset .. py:function:: get_validity_mask_band(criteria_dataarray: xarray.DataArray) -> numpy.typing.NDArray This method fills the validity mask band according to the criteria dataarray given as a parameter. This validity mask shows which points of the image are valid and which are not: A point marked 0 is valid, all the disparity range requested by the user have been computed. All other points are marked 1. :param criteria_dataarray: 4D DataArray containing the criteria :return: validity mask band .. py:function:: get_partial_validity_mask_band(criteria_dataarray: xarray.DataArray) -> numpy.typing.NDArray This method fills the partial validity mask band according to the criteria dataarray given as a parameter. This partial validity mask shows which points of the image are partial or completely invalid: A point marked 1 is invalid, all disparity range requested by the user can not be computed :param criteria_dataarray: 4D DataArray containing the criteria :return: partial validity mask band