ima : the original (not filtered) image
fimau : 3D double array,
filtered image with optimized non-local means using a small block
(suggested:3x3), which corresponds to a “high resolution” filter.
fimao3D double array,
filtered image with optimized non-local means using a small block
(suggested:5x5), which corresponds to a “low resolution” filter.
sigmathe estimated standard deviation of the Gaussian random variables
that explain the rician noise. Note: In P. Coupe et al. the
rician noise was simulated as sqrt((f+x)^2 + (y)^2) where f is
the pixel value and x and y are independent realizations of a
random variable with Normal distribution, with mean=0 and
standard deviation=h
Pierrick Coupe, Jose Manjon, Montserrat Robles, Louis Collins.
“Multiresolution Non-Local Means Filter for 3D MR Image
Denoising” IET Image Processing, Institution of Engineering
and Technology,
2011
Determine the effective number of threads to be used for OpenMP calls
For num_threads=None,
- if the OMP_NUM_THREADS environment variable is set, return that
value
- otherwise, return the maximum number of cores retrieved by
openmp.opm_get_num_procs().
For num_threads>0, return this value.
For num_threads<0, return the maximal number of threads minus
|num_threads+1|. In particular num_threads=-1 will use as
many threads as there are available cores on the machine.
standard deviation of the noise estimated from the data
patch_radiusint
patch size is 2xpatch_radius+1. Default is 1.
block_radiusint
block size is 2xblock_radius+1. Default is 5.
ricianboolean
If True the noise is estimated as Rician, otherwise Gaussian noise
is assumed.
num_threadsint, optional
Number of threads to be used for OpenMP parallelization. If None
(default) the value of OMP_NUM_THREADS environment variable is used
if it is set, otherwise all available threads are used. If < 0 the
maximal number of threads minus |num_threads + 1| is used (enter -1 to
use as many threads as possible). 0 raises an error.
[Meesters2016_ISMRM] S. Meesters, G. Sanguinetti, E. Garyfallidis,
J. Portegies, R. Duits. (2016) Fast implementations
of contextual PDE’s for HARDI data processing in
DIPY. ISMRM 2016 conference.
[DuitsAndFranken_IJCV] R. Duits and E. Franken (2011) Left-invariant diffusions
on the space of positions and orientations and their
application to crossing-preserving smoothing of HARDI
images. International Journal of Computer Vision, 92:231-264.
[Portegies2015] J. Portegies, G. Sanguinetti, S. Meesters, and R. Duits.
(2015) New Approximation of a Scale Space Kernel on SE(3)
and Applications in Neuroimaging. Fifth International
Conference on Scale Space and Variational Methods in
Computer Vision
[Portegies2015b] J. Portegies, R. Fick, G. Sanguinetti, S. Meesters,
G. Girard, and R. Duits. (2015) Improving Fiber
Alignment in HARDI by Combining Contextual PDE flow with
Constrained Spherical Deconvolution. PLoS One.
A HemiSphere is similar to a Sphere but it takes antipodal symmetry into
account. Antipodal symmetry means that point v on a HemiSphere is the same
as the point -v. Duplicate points are discarded when constructing a
HemiSphere (including antipodal duplicates). edges and faces are
remapped to the remaining points as closely as possible.
The HemiSphere can be constructed using one of three conventions:
Places charges on a sphere and simulates the repulsive forces felt by each
one. Allows the charges to move for some number of iterations and returns
their final location as well as the total potential of the system at each
step.
This function is meant to be used with diffusion imaging so antipodal
symmetry is assumed. Therefore, each charge must not only be unique, but if
there is a charge at +x, there cannot be a charge at -x. These are treated
as the same location and because the distance between the two charges will
be zero, the result will be unstable.
volndarray ([X, Y]), ([X, Y, Z]) or ([X, Y, Z, g])
Matrix containing one volume (3D) or multiple (4D) volumes of images.
slice_axisint (0, 1, or 2)
Data axis corresponding to the number of acquired slices.
Default is set to the third axis.
n_pointsint, optional
Number of neighbour points to access local TV (see note).
Default is set to 3.
inplacebool, optional
If True, the input data is replaced with results. Otherwise, returns
a new array.
Default is set to True.
num_processesint or None, optional
Split the calculation to a pool of children processes. This only
applies to 3D or 4D data arrays. Default is 1. If < 0 the maximal
number of cores minus num_processes+1 is used (enter -1 to use
as many cores as possible). 0 raises an error.
Array of data to be denoised. The dimensions are (X, Y, Z, N), where N
are the diffusion gradient directions. The first 3 dimension must have
size >= 2 * patch_radius + 1 or size = 1.
sigmafloat or 3D array (optional)
Standard deviation of the noise estimated from the data. If no sigma
is given, this will be estimated based on random matrix theory
[1]_,[2]_
mask3D boolean array (optional)
A mask with voxels that are true inside the brain and false outside of
it. The function denoises within the true part and returns zeros
outside of those voxels.
patch_radiusint or 1D array (optional)
The radius of the local patch to be taken around each voxel (in
voxels). E.g. patch_radius=2 gives 5x5x5 patches.
pca_method‘eig’ or ‘svd’ (optional)
Use either eigenvalue decomposition (eig) or singular value
decomposition (svd) for principal component analysis. The default
method is ‘eig’ which is faster. However, occasionally ‘svd’ might be
more accurate.
tau_factorfloat (optional)
Thresholding of PCA eigenvalues is done by nulling out eigenvalues that
are smaller than:
\[\tau = (\tau_{factor} \sigma)^2\]
tau_{factor} can be set to a predefined values (e.g. tau_{factor} =
2.3 [3]_), or automatically calculated using random matrix theory
(in case that tau_{factor} is set to None).
return_sigmabool (optional)
If true, the Standard deviation of the noise will be returned.
out_dtypestr or dtype (optional)
The dtype for the output array. Default: output has the same dtype as
the input.
suppress_warningbool (optional)
If true, suppress warning caused by patch_size < arr.shape[-1].
Array of data to be denoised. The dimensions are (X, Y, Z, N), where N
are the diffusion gradient directions.
sigmafloat or 3D array (optional)
Standard deviation of the noise estimated from the data. If not given,
calculate using method in [1]_.
mask3D boolean array (optional)
A mask with voxels that are true inside the brain and false outside of
it. The function denoises within the true part and returns zeros
outside of those voxels.
patch_radiusint or 1D array (optional)
The radius of the local patch to be taken around each voxel (in
voxels). E.g. patch_radius=2 gives 5x5x5 patches.
gtab: gradient table object (optional if sigma is provided)
gradient information for the data gives us the bvals and bvecs of
diffusion data, which is needed to calculate noise level if sigma is
not provided.
patch_radius_sigmaint (optional)
The radius of the local patch to be taken around each voxel (in
voxels) for estimating sigma. E.g. patch_radius_sigma=2 gives
5x5x5 patches.
pca_method‘eig’ or ‘svd’ (optional)
Use either eigenvalue decomposition (eig) or singular value
decomposition (svd) for principal component analysis. The default
method is ‘eig’ which is faster. However, occasionally ‘svd’ might be
more accurate.
tau_factorfloat (optional)
Thresholding of PCA eigenvalues is done by nulling out eigenvalues that
are smaller than:
\[\tau = (\tau_{factor} \sigma)^2\]
tau_{factor} can be change to adjust the relationship between the
noise standard deviation and the threshold tau. If tau_{factor} is
set to None, it will be automatically calculated using the
Marcenko-Pastur distribution [2]_. Default: 2.3 according to [1]_.
return_sigmabool (optional)
If true, a noise standard deviation estimate based on the
Marcenko-Pastur distribution is returned [2]_.
correct_biasbool (optional)
Whether to correct for bias due to Rician noise. This is an
implementation of equation 8 in [1]_.
out_dtypestr or dtype (optional)
The dtype for the output array. Default: output has the same dtype as
the input.
suppress_warningbool (optional)
If true, suppress warning caused by patch_size < arr.shape[-1].
Array of data to be denoised. The dimensions are (X, Y, Z, N), where N
are the diffusion gradient directions.
mask3D boolean array (optional)
A mask with voxels that are true inside the brain and false outside of
it. The function denoises within the true part and returns zeros
outside of those voxels.
patch_radiusint or 1D array (optional)
The radius of the local patch to be taken around each voxel (in
voxels). E.g. patch_radius=2 gives 5x5x5 patches.
pca_method‘eig’ or ‘svd’ (optional)
Use either eigenvalue decomposition (eig) or singular value
decomposition (svd) for principal component analysis. The default
method is ‘eig’ which is faster. However, occasionally ‘svd’ might be
more accurate.
return_sigmabool (optional)
If true, a noise standard deviation estimate based on the
Marcenko-Pastur distribution is returned [2]_.
out_dtypestr or dtype (optional)
The dtype for the output array. Default: output has the same dtype as
the input.
suppress_warningbool (optional)
If true, suppress warning caused by patch_size < arr.shape[-1].
standard deviation of the noise estimated from the data
patch_radiusint
patch size is 2xpatch_radius+1. Default is 1.
block_radiusint
block size is 2xblock_radius+1. Default is 5.
ricianboolean
If True the noise is estimated as Rician, otherwise Gaussian noise
is assumed.
num_threadsint, optional
Number of threads to be used for OpenMP parallelization. If None
(default) the value of OMP_NUM_THREADS environment variable is used
if it is set, otherwise all available threads are used. If < 0 the
maximal number of threads minus |num_threads + 1| is used (enter -1 to
use as many threads as possible). 0 raises an error.
Descoteaux, Maxime and Wiest-Daesslé, Nicolas and Prima,
Sylvain and Barillot, Christian and Deriche, Rachid
Impact of Rician Adapted Non-Local Means Filtering on
HARDI, MICCAI 2008
Applies the filter given by the convolution kernel ‘h’ columnwise to
‘image’, then subsamples by 2. This is a special case of the matlab’s
‘upfirdn’ function, ported to python. Returns the filtered image.
similar patches in the non-local means are searched for locally,
inside a cube of side 2*v+1 centered at each voxel of interest.
block_radiusint
the size of the block to be used (2*f+1)x(2*f+1)x(2*f+1) in the
blockwise non-local means implementation (the Coupe’s proposal).
hdouble
the estimated amount of rician noise in the input image: in P.
Coupe et al. the rician noise was simulated as
sqrt((f+x)^2 + (y)^2) where f is the pixel value and x and y are
independent realizations of a random variable with Normal
distribution, with mean=0 and standard deviation=h
ricianboolean
If True the noise is estimated as Rician, otherwise Gaussian noise
is assumed.
Upsamples the columns of the input image by 2, then applies the
convolution kernel ‘h’ (again, columnwise). This is a special case of the
matlab’s ‘upfirdn’ function, ported to python. Returns the filtered image.
The magnitude signals to analyse. The last dimension must contain the
same realisation of the volume, such as dMRI or fMRI data.
Nint
The number of phase array coils of the MRI scanner.
If your scanner does a SENSE reconstruction, ALWAYS use N=1, as the
noise profile is always Rician.
If your scanner does a GRAPPA reconstruction, set N as the number
of phase array coils.
alphafloat
Probabilistic estimation threshold for the gamma function.
lint
number of initial estimates for sigma to try.
itermaxint
Maximum number of iterations to execute if convergence
is not reached.
epsfloat
Tolerance for the convergence criterion. Convergence is
reached if two subsequent estimates are smaller than eps.
return_maskbool
If True, return a mask identifying all the pure noise voxel
that were found.
This function assumes two things : 1. The data has a noisy, non-masked
background and 2. The data is a repetition of the same measurements
along the last axis, i.e. dMRI or fMRI data, not structural data like
T1/T2.
This function processes the data slice by slice, as originally designed in
the paper. Use it to get a slice by slice estimation of the noise, as in
spinal cord imaging for example.
“Probabilistic Identification and Estimation of Noise (PIESNO):
A self-consistent approach and its applications in MRI.”
Journal of Magnetic Resonance 2009; 199: 94-103.
“A signal transformational framework for breaking the noise floor
and its applications in MRI.”
Journal of Magnetic Resonance 2009; 197: 108-119.
If True, uses all voxels for the estimation, otherwise, only non-zeros
voxels are used. Useful if the background is masked by the scanner.
Nint, default 0
Number of coils of the receiver array. Use N = 1 in case of a SENSE
reconstruction (Philips scanners) or the number of coils for a GRAPPA
reconstruction (Siemens and GE). Use 0 to disable the correction factor,
as for example if the noise is Gaussian distributed. See [1] for more
information.
This function is the same as manually taking the standard deviation of the
background and gives one value for the whole 3D array.
It also includes the coil-dependent correction factor of Koay 2006
(see [1]_, equation 18) with theta = 0.
Since this function was introduced in [2]_ for T1 imaging,
it is expected to perform ok on diffusion MRI data, but might oversmooth
some regions and leave others un-denoised for spatially varying noise
profiles. Consider using piesno() to estimate sigma instead if visual
inaccuracies are apparent in the denoised result.
P. Coupe, P. Yger, S. Prima, P. Hellier, C. Kervrann, C.
Barillot, An Optimized Blockwise Non Local Means Denoising
Filter for 3D Magnetic Resonance Images, IEEE Transactions on
Medical Imaging, 27(4):425-441, 2008
[Coupe11]
Pierrick Coupe, Jose Manjon, Montserrat Robles, Louis Collins.
Adaptive Multiresolution Non-Local Means Filter for 3D MR Image
Denoising IET Image Processing, Institution of Engineering and
Technology, 2011
The radius of the local patch to be taken around each voxel (in
voxels). Default: 0 (denoise in blocks of 1x1x1 voxels).
modelstring, or initialized linear model object.
This will determine the algorithm used to solve the set of linear
equations underlying this model. If it is a string it needs to be
one of the following: {‘ols’, ‘ridge’, ‘lasso’}. Otherwise,
it can be an object that inherits from
dipy.optimize.SKLearnLinearSolver or an object with a similar
interface from Scikit-Learn:
sklearn.linear_model.LinearRegression,
sklearn.linear_model.Lasso or sklearn.linear_model.Ridge
and other objects that inherit from sklearn.base.RegressorMixin.
Default: ‘ols’.
b0_thresholdint, optional
Threshold for considering volumes as b0.
out_dtypestr or dtype, optional
The dtype for the output array. Default: output has the same dtype as
the input.
alphafloat, optional
Regularization parameter only for ridge regression model.
verbosebool, optional
Show progress of Patch2Self and time taken.
b0_denoisingbool, optional
Skips denoising b0 volumes if set to False.
clip_negative_valsbool, optional
Sets negative values after denoising to 0 using np.clip.
shift_intensitybool, optional
Shifts the distribution of intensities per volume to give
non-negative values
In [1]_, images are used as samples, so voxels are features, therefore
eigenvectors are image-shaped. However, [1]_ is not clear on how to use
these eigenvectors to determine the noise level, so here eigenvalues
(variance over samples explained by eigenvectors) are used to scale
the eigenvectors. Use images_as_samples=True to use this algorithm.
Alternatively, voxels can be used as samples using
images_as_samples=False. This is not the canonical algorithm of [1]_.
Reduced convolution in one direction only for testing
num_threadsint, optional
Number of threads to be used for OpenMP parallelization. If None
(default) the value of OMP_NUM_THREADS environment variable is used
if it is set, otherwise all available threads are used. If < 0 the
maximal number of threads minus |num_threads + 1| is used (enter -1 to
use as many threads as possible). 0 raises an error.
normalizeboolean
Apply max-normalization to the output such that its value range matches
the input ODF data.
[Meesters2016_ISMRM] S. Meesters, G. Sanguinetti, E. Garyfallidis,
J. Portegies, R. Duits. (2016) Fast implementations of
contextual PDE’s for HARDI data processing in DIPY.
ISMRM 2016 conference.
[DuitsAndFranken_IJCV] R. Duits and E. Franken (2011) Left-invariant diffusions
on the space of positions and orientations and their
application to crossing-preserving smoothing of HARDI
images. International Journal of Computer Vision, 92:231-264.
[Portegies2015] J. Portegies, G. Sanguinetti, S. Meesters, and R. Duits.
(2015) New Approximation of a Scale Space Kernel on SE(3) and
Applications in Neuroimaging. Fifth International
Conference on Scale Space and Variational Methods in
Computer Vision
[Portegies2015b] J. Portegies, R. Fick, G. Sanguinetti, S. Meesters, G.Girard,
and R. Duits. (2015) Improving Fiber Alignment in HARDI by
Combining Contextual PDE flow with Constrained Spherical
Deconvolution. PLoS One.
Reduced convolution in one direction only for testing
num_threadsint, optional
Number of threads to be used for OpenMP parallelization. If None
(default) the value of OMP_NUM_THREADS environment variable is used
if it is set, otherwise all available threads are used. If < 0 the
maximal number of threads minus |num_threads + 1| is used (enter -1 to
use as many threads as possible). 0 raises an error.
normalizeboolean
Apply max-normalization to the output such that its value range matches
the input ODF data.
The decorator assumes that the argument with the old_name was removed
from the function signature and the new_name replaced it at the
same position in the signature. If the old_name argument is
given when calling the decorated function the decorator will catch it and
issue a deprecation warning and pass it on as new_name argument.
new_namestr or list/tuple thereof or None, optional
The new name of the argument. Set this to None to remove the
argument old_name instead of renaming it.
sincestr or number or list/tuple thereof, optional
The release at which the old argument became deprecated.
untilstr or number or list/tuple thereof, optional
Last released version at which this function will still raise a
deprecation warning. Versions higher than this will raise an
error.
version_comparatorcallable
Callable accepting string as argument, and return 1 if string
represents a higher version than encoded in the version_comparator,
0 if the version is equal, and -1 if the version is lower. For example,
the version_comparator may compare the input version string to the
current package version string.
arg_in_kwargsbool or list/tuple thereof, optional
If the argument is not a named argument (for example it
was meant to be consumed by **kwargs) set this to
True. Otherwise the decorator will throw an Exception
if the new_name cannot be found in the signature of
the decorated function.
Default is False.
warn_classwarning, optional
Warning to be issued.
error_classException, optional
Error to be issued
alternativestr, optional
An alternative function or class name that the user may use in
place of the deprecated object if new_name is None. The deprecation
warning will tell the user about this alternative if provided.
If the new argument name cannot be found in the function
signature and arg_in_kwargs was False or if it is used to
deprecate the name of the *args-, **kwargs-like arguments.
At runtime such an Error is raised if both the new_name
and old_name were specified when calling the function and
“relax=False”.
This function is based on the Astropy (major modification).
astropy/astropy. See COPYING file distributed along with
the astropy package for the copyright and license terms.
The deprecation warnings are not shown in the following examples.
To deprecate a positional or keyword argument::
>>> from dipy.utils.deprecator import deprecated_params
>>> @deprecated_params(‘sig’, ‘sigma’, ‘0.3’)
… def test(sigma):
… return sigma
>>> test(2)
2
>>> test(sigma=2)
2
>>> test(sig=2) # doctest: +SKIP
2
It is also possible to replace multiple arguments. The old_name,
new_name and since have to be tuple or list and contain the
same number of entries::
>>> @deprecated_params([‘a’, ‘b’], [‘alpha’, ‘beta’],
… [‘0.2’, 0.4])
… def test(alpha, beta):
… return alpha, beta
>>> test(a=2, b=3) # doctest: +SKIP
(2, 3)
Determine the effective number of threads to be used for OpenMP calls
For num_threads=None,
- if the OMP_NUM_THREADS environment variable is set, return that
value
- otherwise, return the maximum number of cores retrieved by
openmp.opm_get_num_procs().
For num_threads>0, return this value.
For num_threads<0, return the maximal number of threads minus
|num_threads+1|. In particular num_threads=-1 will use as
many threads as there are available cores on the machine.
Maximum SH order (l) in the SH fit. For sh_order_max, there will be
(sh_order_max+1)*(sh_order_max+2)/2 SH coefficients for a
symmetric basis and (sh_order_max+1)*(sh_order_max+1)
coefficients for a full SH basis.
None for the default DIPY basis,
tournier07 for the Tournier 2007 [2]_[3]_ basis,
descoteaux07 for the Descoteaux 2007 [1]_ basis,
(None defaults to descoteaux07).
full_basis: bool, optional
True for using a SH basis containing even and odd order SH functions.
False for using a SH basis consisting only of even order SH functions.
legacy: bool, optional
True to use a legacy basis definition for backward compatibility
with previous tournier07 and descoteaux07 implementations.
SH coefficients representing a spherical function.
sphereSphere
The points on which to sample the spherical function.
sh_order_maxint, optional
Maximum SH order (l) in the SH fit. For sh_order_max, there will be
(sh_order_max+1)*(sh_order_max+2)/2 SH coefficients for a
symmetric basis and (sh_order_max+1)*(sh_order_max+1)
coefficients for a full SH basis.
None for the default DIPY basis,
tournier07 for the Tournier 2007 [2]_[3]_ basis,
descoteaux07 for the Descoteaux 2007 [1]_ basis,
(None defaults to descoteaux07).
full_basis: bool, optional
True to use a SH basis containing even and odd order SH functions.
Else, use a SH basis consisting only of even order SH functions.
legacy: bool, optional
True to use a legacy basis definition for backward compatibility
with previous tournier07 and descoteaux07 implementations.