Particularly, I noticed that sigma estimates had a dependency on the b-values (smaller b-values were related to higher sigma). Example of computed sigma for given b-values are shown bellow:
- b-value = 0 => sigma around 810
- b-value = 200 => sigma around 510
- b-value = 400 => sigma around 390
- b-value = 1000 => sigma around 268
- b-value = 2000 => sigma around 175
Piesno
Given the issue mentioned above, I tried to replace the noise estimation procedure with a technique specifically developed for diffusion-weighted images - a technique called piesno.
This technique can be imported and used from dipy using the follow commands:
from dipy.denoise.noise_estimate import piesno
sigma, background_mask = piesno(data, N=4, return_mask=True)
The noise standard given by piesno for all axial images was around 156. As expected this values is smaller than the previous sigma estimates suggesting that these were indeed overestimated.
Despite this value seems to be the most accurate estimate for the denoising procedure, I noticed that only a small amount of background voxels, used to compute sigma, was automatically detected by piesno.
Figure 3 - Background voxels detected by piesno. These voxels were the ones used to estimate the noise standard deviation. |
Below are the final versions of the kurtosis standard measures obtain after adjusting the sigma of the denoising procedure:
Figure 6 - Real brain parameter maps of the mean kurtosis (MK), axial kurtosis (AK), and radial kurtosis (RK) obtain from a HCP-like dataset using the DKI module. These are the maps specific to DKI. The dataset for these reconstructions was kindly supplied by Valabregue Romain, CENIR, ICM, Paris. |
Noise artefacts are present when piesno is used, therefore for the DKI reconstruction I decided to keep the previous denoising approach as default.
hey rafael loved ur work ..I am also working on the same IEEE PIESNO paper ..but i am unable to import the code which u have mentioned here (from dipy.denoise.noise_estimate import piesno
ReplyDeletesigma, background_mask = piesno(data, N=4, return_mask=True). When compiled in dipy it is showing "data not defined"..can u please help me!!!!!!!!
Hi Eranna,
DeleteDid you install dipy from a release?
What data are you using?
A suggestion - send your issue (with more details) to python's neuroimaging mailing list neuroimaging@python.org, with subject "[Dipy] ... (Your issue) ". We will give you faster support from there.
Best,
R. Neto Henriques