Source code for MEDiml.biomarkers.local_intensity
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from typing import Dict
from numpy import ndarray
from ..biomarkers.utils import get_glob_peak, get_loc_peak
[docs]
def extract_all(img_obj: ndarray,
roi_obj: ndarray,
res: ndarray,
intensity_type: str,
compute_global: bool = False) -> Dict:
"""Compute Local Intensity Features.
This features refer to Local Intensity family in
the `IBSI1 reference manual <https://arxiv.org/pdf/1612.07003.pdf>`__.
Args:
img_obj (ndarray): Continuous image intensity distribution, with no NaNs
outside the ROI.
roi_obj (ndarray): Array of the mask defining the ROI.
res (List[float]): [a,b,c] vector specifying the resolution of the volume in mm.
XYZ resolution (world), or JIK resolution (intrinsic matlab).
intensity_type (str): Type of intensity to compute. Can be "arbitrary", "definite" or "filtered".
Will compute features only for "definite" intensity type.
compute_global (bool, optional): If True, will compute global intensity peak, we
recommend you don't set it to True if not necessary in your study or analysis as it
takes too much time for calculation. Default: False.
Returns:
Dict: Dict of the Local Intensity Features.
Raises:
ValueError: If `intensity_type` is not "arbitrary", "definite" or "filtered".
"""
assert intensity_type in ["arbitrary", "definite", "filtered"], \
"intensity_type must be 'arbitrary', 'definite' or 'filtered'"
loc_int = {'Floc_peak_local': [], 'Floc_peak_global': []}
if intensity_type == "definite":
loc_int['Floc_peak_local'] = (get_loc_peak(img_obj, roi_obj, res))
# NEEDS TO BE VECTORIZED FOR FASTER CALCULATION! OR
# SIMPLY JUST CONVOLUTE A 3D AVERAGING FILTER!
if compute_global:
loc_int['Floc_peak_global'] = (get_glob_peak(img_obj,roi_obj, res))
return loc_int
[docs]
def peak_local(img_obj: ndarray,
roi_obj: ndarray,
res: ndarray) -> float:
"""Computes local intensity peak.
This feature refers to "Floc_peak_local" (ID = VJGA) in
the `IBSI1 reference manual <https://arxiv.org/pdf/1612.07003.pdf>`__.
Args:
img_obj (ndarray): Continuous image intensity distribution, with no NaNs
outside the ROI.
roi_obj (ndarray): Array of the mask defining the ROI.
res (List[float]): [a,b,c] vector specifying the resolution of the volume in mm.
XYZ resolution (world), or JIK resolution (intrinsic matlab).
Returns:
float: Local intensity peak.
"""
return get_loc_peak(img_obj, roi_obj, res)
[docs]
def peak_global(img_obj: ndarray,
roi_obj: ndarray,
res: ndarray) -> float:
"""Computes global intensity peak.
This feature refers to "Floc_peak_global" (ID = 0F91) in
the `IBSI1 reference manual <https://arxiv.org/pdf/1612.07003.pdf>`__.
Args:
img_obj (ndarray): Continuous image intensity distribution, with no NaNs
outside the ROI.
roi_obj (ndarray): Array of the mask defining the ROI.
res (List[float]): [a,b,c] vector specifying the resolution of the volume in mm.
XYZ resolution (world), or JIK resolution (intrinsic matlab).
Returns:
float: Global intensity peak.
"""
return get_glob_peak(img_obj, roi_obj, res)