etdrs
Metrics regarding OCTs.
Not currently used in the project but may be useful in the future.
Module
Functions
compute_subfields
def compute_subfields( img_array: np.ndarray, laterality: Laterality, slo_num_pixels_width: int, slo_num_pixels_height: int, slo_dimension_mm_width: float, slo_dimension_mm_height: float, fovea_coordinates: Optional[Coordinates] = None,) ‑> MaculaSubFields:
Compute GA affected area of macula ETDRS subfields.
Arguments
img_array
: Image as a square 2D numpy array.laterality
: The laterality of the image (left or right).slo_num_pixels_width
: Number of pixels in the width of the image array.slo_num_pixels_height
: Number of pixels in the height of the image array.slo_dimension_mm_width
: Width in mm of the image array.slo_dimension_mm_height
: Height in mm of the image array.fovea_coordinates
: The coordinates corresponding to the fovea. If not provided, the fovea will be assumed to be in the centre of the image.
Returns A nested dictionary of ETDRS subfields contained affected areas in mm^2.
compute_subfields_oct
def compute_subfields_oct( img_array: np.ndarray, laterality: Laterality, oct_width_mm: float, oct_depth_mm: float, oct_num_pixels_width: int, oct_num_pixels_height: int, fovea_coordinates: Optional[Coordinates] = None,) ‑> MaculaSubFields:
Compute GA affected area of macula ETDRS subfields.
Arguments
img_array
: Image as a square 2D numpy array.laterality
: The laterality of the image (left or right).oct_width_mm
: Width in mm of the image array.oct_depth_mm
: Height in mm of the image array.oct_num_pixels_width
: Number of pixels in the width of the image array.oct_num_pixels_height
: Number of pixels in the height of the image array.fovea_coordinates
: The coordinates corresponding to the fovea. If not provided, the fovea will be assumed to be in the centre of the image.
Returns A nested dictionary of ETDRS subfields contained affected areas in mm^2.
get_num_pixels_ga
def get_num_pixels_ga(img_array: np.ndarray) ‑> int:
Returns the number of pixels in the image which demonstrate GA.
get_point_distance_from_fovea
def get_point_distance_from_fovea( point_coordinates: Coordinates, fovea_coordinates: Coordinates, mm_per_pixel_x: float, mm_per_pixel_y: float,) ‑> float:
Calculates and returns a point's distance from the fovea in mm.
get_quadrant
def get_quadrant( point_coordinates: Coordinates, fovea_coordinates: Coordinates, laterality: Laterality,) ‑> Quadrant:
Gets the quadrant that a point is in, in relation to the fovea.
Arguments
point_coordinates
: The coordinates of the point in question.fovea_coordinates
: The coordinates of the fovea.laterality
: Whether the image is of the left eye or the right eye. This has no impact on superior or inferior quadrants but determines whether a coordinate is in the nasal quadrant or the temporal quadrant.
Returns The quadrant the point would be in. This does not take into account the distance from the fovea and therefore the point may fall inside the fovea (which has no quadrants) or it may so far from the fovea that it does not fall into any of the macula subfields.
Raises
ValueError
: If the quadrant cannot be calculated due to an unexpected value in the inputs to the function.
get_zone
def get_zone(distance_from_fovea: float) ‑> Optional[Zone]:
Returns the zone corresponding to how far a point is from the fovea.
Returns None if the point is further than the outer diameter.
is_pixel_ga
def is_pixel_ga(pixel: np.ndarray) ‑> bool:
Returns whether a given pixel from an en-face image is GA based on the colour.
is_point_above_line
def is_point_above_line(a: Coordinates, b: Coordinates, c: Coordinates) ‑> bool:
Returns True if point c is above line formed from points a and b.
Arguments
a
: A point on a line.b
: Another point on the same line as point a.c
: A set of coordinates whcih can be anywhere in relation to the line formed by points a and b.
Returns True if point c would lie above the line formed by a and b, otherwise False. The line can be thought to be extrapolated if point c falls outside the length of the line.