Menu

Module providing common Brain MRI Augmentation Methods for PyTorch.

Source code for brainrise.hist

# -*- coding: utf-8 -*-
##########################################################################
# NSAp - Copyright (C) CEA, 2020
# Distributed under the terms of the CeCILL-B license, as published by
# the CEA-CNRS-INRIA. Refer to the LICENSE file or to
# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
# for details.
##########################################################################

"""
Module that defines common tools to process histograms in the context of
MRI.
"""

# Imports
import numpy as np
from scipy.signal import argrelmax
import statsmodels.api as sm


[docs]def get_largest_mode(arr): """ Computes the largest (reliable) peak in the histogram. Parameters ---------- arr: array the input data. Returns ------- largest_peak: int index of the largest peak. """ grid, pdf = smooth_hist(arr) largest_peak = grid[np.argmax(pdf)] return largest_peak
[docs]def get_last_mode(arr, remove_tail=True, remove_fraction=0.05): """ Computes the last (reliable) peak in the histogram. Parameters ---------- arr: array the input data. remove_tail: bool, default True remove rare portions of histogram. remove_fraction: float, default 0.05 discared the specified proportion of hist. Returns ------- last_peak: int index of the last peak. """ if remove_tail: rare_thresh = np.percentile(arr, 1 - remove_fraction) which_rare = (arr >= rare_thresh) values = arr[which_rare != 1] grid, pdf = smooth_hist(values) maxima = argrelmax(pdf)[0] last_peak = grid[maxima[-1]] return last_peak
[docs]def get_first_mode(arr, remove_tail=True, remove_fraction=0.01): """ Computes the first (reliable) peak in the histogram. Parameters ---------- arr: array the input data. remove_tail: bool, default True remove rare portions of histogram. remove_fraction: float, default 0.01 discared the specified proportion of hist. Returns ------- first_peak: int index of the first peak. """ if remove_tail: rare_thresh = np.percentile(arr, 1 - remove_fraction) which_rare = (arr >= rare_thresh) values = arr[which_rare != 1] grid, pdf = smooth_hist(values) maxima = argrelmax(pdf)[0] first_peak = grid[maxima[0]] return first_peak
[docs]def smooth_hist(arr): """ Use KDE to get smooth estimate of the histogram. Parameters ---------- arr: array the input data. Returns ------- grid: array domain of the PDF. pdf: array kernel density estimate of the PDF. """ values = arr.flatten().astype(np.float64) bw = arr.max() / 80 kde = sm.nonparametric.KDEUnivariate(values) kde.fit(kernel="gau", bw=bw, gridsize=80, fft=True) pdf = 100. * kde.density grid = kde.support return grid, pdf

Follow us

© 2023, brainrise developers