3D or 4D images and boost the SNR of your datasets. You can also decide between modeling the noise as Gaussian or Rician (default). """ import numpy as np import nibabel as nib import matplotlib.pyplot as plt from time import time from dipy.denoise.non_local_means import non_local_means from dipy.denoise.nlmeans import nlmeans from dipy.denoise.noise_estimate import estimate_sigma from dipy.data import fetch_sherbrooke_3shell, read_sherbrooke_3shell fetch_sherbrooke_3shell() img, gtab = read_sherbrooke_3shell() data = img.get_data() affine = img.get_affine() mask = data[..., 0] > 80 # We select only one volume for the example to run quickly. data = data[..., 1] print("vol size", data.shape) # lets create a noisy data with gaussian data """ In order to call ``non_local_means`` first you need to estimate the standard deviation of the noise. We use N=4 since the Sherbrooke dataset was acquired
For the full details, please refer to the original paper. In this example, we will demonstrate the use of PIESNO with a 3-shell data-set. We start by importing necessary modules and functions and loading the data: """ import nibabel as nib import numpy as np from dipy.denoise.noise_estimate import piesno from dipy.data import fetch_sherbrooke_3shell, read_sherbrooke_3shell fetch_sherbrooke_3shell() img, gtab = read_sherbrooke_3shell() data = img.get_data() """ Now that we have fetched a dataset, we must call PIESNO with the right number of coils used to acquire this dataset. It is also important to know what was the parallel reconstruction algorithm used. Here, the data comes from a GRAPPA reconstruction, was acquired with a 12-elements head coil available on the Tim Trio Siemens, for which the 12 coil elements are combined into 4 groups of 3 coil elements each. The signal is therefore received through 4 distinct groups of receiver channels, yielding N = 4. Had we used a GE acquisition, we would have used N=1 even if multiple channel coils are used because GE uses a SENSE reconstruction, which has a Rician noise nature and thus N is always 1. """ sigma, mask = piesno(data, N=4, return_mask=True)