Source code for pylinac.core.mask

"""Module for processing "masked" arrays, i.e. binary images."""
from typing import Tuple

import numpy as np


[docs]def bounding_box(array: np.array) -> Tuple[float, ...]: """Get the bounding box values of an ROI in a 2D array.""" binary_arr = np.argwhere(array) (ymin, xmin), (ymax, xmax) = binary_arr.min(0), binary_arr.max(0) + 1 return ymin, ymax, xmin, xmax
[docs]def filled_area_ratio(array: np.array) -> float: """Return the ratio of filled pixels to empty pixels in the ROI bounding box. For example a solid square would be 1.0, while a sold circle would be ~0.785. """ ymin, ymax, xmin, xmax = bounding_box(array) box_area = (ymax - ymin) * (xmax - xmin) filled_area = np.sum(array) return float(filled_area / box_area)
[docs]def square_ratio(array: np.array) -> float: """Determine the width/height ratio of the ROI""" ymin, ymax, xmin, xmax = bounding_box(array) y = abs(ymax - ymin) x = abs(xmax - xmin) return y/x