Diff of /ants/ops/denoise_image.py [000000] .. [5d12a0]

Switch to side-by-side view

--- a
+++ b/ants/ops/denoise_image.py
@@ -0,0 +1,82 @@
+__all__ = ["denoise_image"]
+
+
+from ants.decorators import image_method
+from ants.internal import get_lib_fn, process_arguments
+
+@image_method
+def denoise_image(image, mask=None, shrink_factor=1, p=1, r=2, noise_model="Rician", v=0):
+    """
+    Denoise an image using a spatially adaptive filter originally described in
+    J. V. Manjon, P. Coupe, Luis Marti-Bonmati, D. L. Collins, and M. Robles.
+    Adaptive Non-Local Means Denoising of MR Images With Spatially Varying
+    Noise Levels, Journal of Magnetic Resonance Imaging, 31:192-203, June 2010.
+
+    ANTsR function: `denoiseImage`
+
+    Arguments
+    ---------
+    image : ANTsImage
+        scalar image to denoise.
+
+    mask : ANTsImage
+        to limit the denoise region.
+
+    shrink_factor : scalar
+        downsampling level performed within the algorithm.
+
+    p : integer or character of format '2x2' where the x separates vector entries
+        patch radius for local sample.
+
+    r : integer or character of format '2x2' where the x separates vector entries
+        search radius from which to choose extra local samples.
+
+    noise_model : string
+        'Rician' or 'Gaussian'
+
+    Returns
+    -------
+    ANTsImage
+
+    Example
+    -------
+    >>> import ants
+    >>> import numpy as np
+    >>> image = ants.image_read(ants.get_ants_data('r16'))
+    >>> # add fairly large salt and pepper noise
+    >>> imagenoise = image + np.random.randn(*image.shape).astype('float32')*5
+    >>> imagedenoise = ants.denoise_image(imagenoise, ants.get_mask(image))
+    """
+    inpixeltype = image.pixeltype
+    outimage = image.clone("float")
+
+    mydim = image.dimension
+
+    if mask is None:
+        myargs = {
+            "d": mydim,
+            "i": image,
+            "n": noise_model,
+            "s": int(shrink_factor),
+            "p": p,
+            "r": r,
+            "o": outimage,
+            "v": v,
+        }
+    else:
+        myargs = {
+            "d": mydim,
+            "i": image,
+            "n": noise_model,
+            "x": mask.clone("unsigned char"),
+            "s": int(shrink_factor),
+            "p": p,
+            "r": r,
+            "o": outimage,
+            "v": v,
+        }
+
+    processed_args = process_arguments(myargs)
+    libfn = get_lib_fn("DenoiseImage")
+    libfn(processed_args)
+    return outimage.clone(inpixeltype)