Source code for wormpose.dataset.image_processing.simple_frame_preprocessing
"""
Simple BaseFramePreprocesing implementation
"""
from typing import Optional, Tuple, Callable
import cv2
import numpy as np
from wormpose.dataset.base_dataset import BaseFramePreprocessing
from wormpose.dataset.image_processing.image_utils import segment_foreground, OtsuThreshold
[docs]class SimpleFramePreprocessing(BaseFramePreprocessing):
    def __init__(
        self,
        is_foreground_lighter_than_background: bool,
        foreground_dilate_struct_element=cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5, 5)),
        foreground_close_struct_element=cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)),
        threshold_fn: Callable = OtsuThreshold(blur_kernel=(5, 5)),
    ):
        self.is_foreground_lighter_than_background = is_foreground_lighter_than_background
        self.foreground_dilate_struct_element = foreground_dilate_struct_element
        self.foreground_close_struct_element = foreground_close_struct_element
        self.threshold_fn = threshold_fn
[docs]    def process(self, frame: np.ndarray, background_threshold: Optional[int] = None) -> Tuple[np.ndarray, int]:
        return segment_foreground(
            frame,
            self.foreground_close_struct_element,
            self.foreground_dilate_struct_element,
            self.threshold_fn,
            self.is_foreground_lighter_than_background,
        )