Source code for patch_denoise.bindings.modopt

"""Binding for ModOpt Package."""

import numpy as np
from modopt.opt.proximity import ProximityParent

from .utils import DENOISER_MAP


[docs] class LLRDenoiserOperator(ProximityParent): """Proximal Operator drop-in replacement using local low rank denoising. Parameters ---------- denoiser: str name of the denoising method. patch_shape: tuple The patch shape patch_overlap: tuple the overlap of each pixel mask: numpy.ndarray A boolean array, defining a ROI in the volume. Only patch with voxels in the ROI will be processed. mask_threshold: int percentage of the path that should be in the mask in order to be processed. If mask_threshold = -1, all the patch are processed, if mask_threshold=100, all the voxels of the patch needs to be in the mask """ def __init__( self, denoiser, patch_shape, patch_overlap, recombination="weighted", mask=None, mask_threshold=-1, progbar=None, time_dimension=-1, **kwargs, ): self._denoiser = DENOISER_MAP[denoiser] self._params = dict( patch_shape=patch_shape, patch_overlap=patch_overlap, mask=mask, mask_threshold=mask_threshold, recombination=recombination, progbar=progbar, **kwargs, ) self.op = self._op_method self.cost = lambda *args, **kw: np.nan self.time_dimension = time_dimension def _op_method(self, data, **kwargs): run_kwargs = self._params.copy() run_kwargs.update(kwargs) return np.moveaxis( self._denoiser( np.moveaxis(data, self.time_dimension, -1), **run_kwargs, )[0], -1, self.time_dimension, )