Source code for src.original.DK_OGC_AmsterdamUMC.utils.data_processing.processors.AverageSignalsOfEqualXvals
import numpy as np
import torch
import torchio
from torchio.transforms import Transform
[docs]
class AverageSignalsOfEqualXvals(Transform):
def __init__(self, **kwargs):
super().__init__(**kwargs)
[docs]
def apply_transform(self, subject):
"""
normalize signals
Args:
signals: signals array to normalize
xvals: xval array
Returns:
normalized_signals: normalized signals array
"""
images_dict = subject.get_images_dict()
signals = images_dict['signals'].numpy()
xvals = np.squeeze(images_dict['xvals'].numpy())
signals, xvals = self.average_signal_of_equal_xvals(signals, xvals)
subject.add_image(torchio.Image(tensor=torch.Tensor(signals)), 'signals')
subject.add_image(torchio.Image(tensor=torch.Tensor(np.reshape(xvals, (xvals.shape[0], 1, 1, 1)))), 'xvals')
return subject
[docs]
@staticmethod
def average_signal_of_equal_xvals(signals, xvals):
"""
average the signal of equal xvals
Args:
signals: signal matrix [signals X xvals]
xvals: array of xvals
Returns:
averaged_signal_matrix: averaged signal matrix [signals X unique_xvals]
unique_xval_arrays: unique xvals in averaged signal matrix
"""
unique_xvals = np.unique(xvals)
averaged_signals = np.zeros((unique_xvals.shape[0], *signals.shape[1:]))
for xval_idx, unique_xval in enumerate(unique_xvals):
averaged_signals[xval_idx, ...] = np.squeeze(np.mean(signals[np.where(xvals == unique_xval), ...], axis=1))
return averaged_signals, unique_xvals