Source code for wormpose.dataset.image_processing.frame_preprocessor
"""
Applies safely the frame preprocessing function to a frame,
set the background pixels to a uniform value, deduces the region of interest
"""
from typing import Tuple
import numpy as np
from wormpose.dataset.base_dataset import BaseFramePreprocessing
[docs]def run(frame_preprocessing: BaseFramePreprocessing, frame: np.ndarray) -> Tuple[np.ndarray, int, Tuple[slice, slice]]:
"""
Safely preprocesses an image, set the background pixels to a uniform color, calculates worm region of interest
:param frame_preprocessing: Frame preprocessing logic
:param frame: Image to preprocess
:return: Processed image, value of the background color, region of interest coordinates
"""
# copy to avoid modifying the source image
frame_copy = np.copy(frame)
# call the frame preprocessing function to get the segmented image
segmentation_mask, background_color = frame_preprocessing.process(frame_copy)
# enforces background color type
background_color = int(background_color)
# erase background, set everything not the foreground to a uniform color
frame_copy[segmentation_mask == 0] = background_color
# get region of interest (full image if no worm is found)
where_worm = np.where(segmentation_mask != 0)
if len(where_worm[0]) == 0 or len(where_worm[1]) == 0:
worm_roi = np.s_[0 : frame_copy.shape[0], 0 : frame_copy.shape[1]]
else:
worm_roi = np.s_[
np.min(where_worm[0]) : np.max(where_worm[0]),
np.min(where_worm[1]) : np.max(where_worm[1]),
]
return frame_copy, background_color, worm_roi