The following examples illustrate some basic SNR calculations on diffusion-weighted images (DWIs). The basic procedure is:
- Correct for motion and for eddy current distortion, if necessary (i.e., if using single spin echo DWI; we use FSL's 'eddy')
- For all the b=0 images, compute the standard deviation of each voxel. This will generate a noise map, but the map will be both biased and unreliable, due to the fact that there are only a few values used to estimate the stdev.
- Correct the unreliability and bias by combining the stdev estimates across voxels. To define which voxels should be combined, use a patch based non-local means approach[1]. The non-local mean algorithms finds surrounding voxels with the same intensity.
- For SNR of the non-DWIs (b=0 images), take the mean of all b0 images and divide by the noise estimate
- For DWI SNR it's a little less clear what's best. A simple option is to use max across all the DWIs. That works OK for data with relatively high SNR, but could really over-estimate SNR for data where the true SNR is low. This is something I think we should discuss and try to come up with a better metric.
- The thermal noise map is estimated with a PCA decomposition[2]. The part of the decomposition containing the least varying signal is used for the thermal noise.
[1] [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]
[2] [Diffusion Weighted Image Denoising Using Overcomplete Local PCA, Manjon JV, Coupe P, Concha L, Buades A, Collins DL]