Source code for phenotypic.util._grid_apply

from __future__ import annotations
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from phenotypic import GridImage, ImagePipeline

from phenotypic.abc_ import ImageOperation


[docs] class GridApply: """Accepts a PhenoTypic operation as a parameter and applies it to the individual grid sectionss of an image. Parameters: image_op (ImageOperation): A PhenoTypic operation to be applied to each grid section. reset_enh_matrix (bool): Whether to reset the enh_gray attribute of the image before applying the operation. """ def __init__( self, image_op: ImageOperation | ImagePipeline, reset_enh_matrix: bool = True ): self.operation = image_op self.reset_enh_matrix = reset_enh_matrix
[docs] def apply(self, image: GridImage): row_edges = image.grid.get_row_edges() col_edges = image.grid.get_col_edges() for row_i in range(len(row_edges) - 1): for col_i in range(len(col_edges) - 1): subimage = image[ row_edges[row_i] : row_edges[row_i + 1], col_edges[col_i] : col_edges[col_i + 1], ] try: self.operation.apply(subimage, inplace=True) except Exception as e: raise RuntimeError( f"Error applying operation to section {row_i, col_i}: {e}" ) image[ row_edges[row_i] : row_edges[row_i + 1], col_edges[col_i] : col_edges[col_i + 1], ] = subimage return image