Source code for MEDiml.processing.resegmentation

#!/usr/bin/env python3
# -*- coding: utf-8 -*-


from copy import deepcopy
import numpy as np
from numpy import ndarray


[docs] def range_re_seg(vol: np.ndarray, roi: np.ndarray, im_range=None) -> ndarray: """Removes voxels from the intensity mask that fall outside the given range (intensities outside the range are set to 0). Args: vol (ndarray): Imaging data. roi (ndarray): ROI mask with values of 0's and 1's. im_range (ndarray): 1-D array with shape (1,2) of the re-segmentation intensity range. Returns: ndarray: Intensity mask with intensities within the re-segmentation range. """ if im_range is not None and len(im_range) == 2: roi = deepcopy(roi) roi[vol < im_range[0]] = 0 roi[vol > im_range[1]] = 0 return roi
[docs] def outlier_re_seg(vol: np.ndarray, roi: np.ndarray, outliers="") -> np.ndarray: """Removes voxels with outlier intensities from the given mask using the Collewet method. Args: vol (ndarray): Imaging data. roi (ndarray): ROI mask with values of 0 and 1. outliers (str, optional): Algo used to define outliers. (For now this methods only implements "Collewet" method). Returns: ndarray: An array with values of 0 and 1. Raises: ValueError: If `outliers` is not "Collewet" or None. Todo: * Delete outliers argument or implements others outlining methods. """ if outliers != '': roi = deepcopy(roi) if outliers == "Collewet": u = np.mean(vol[roi == 1]) sigma = np.std(vol[roi == 1]) roi[vol > (u + 3*sigma)] = 0 roi[vol < (u - 3*sigma)] = 0 else: raise ValueError("Outlier segmentation not defined.") return roi