File: denoise_flow.rst

package info (click to toggle)
dipy 1.11.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 17,144 kB
  • sloc: python: 92,240; makefile: 272; pascal: 183; sh: 162; ansic: 106
file content (222 lines) | stat: -rw-r--r-- 10,103 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
.. _denoise_flow:

=========
Denoising
=========

This tutorial walks through the steps to denoise diffusion-weighted MR images using DIPY.
Multiple denoising methods are available in DIPY.

You can try these methods using your own data; we will be using the data in DIPY.
You can check how to :ref:`fetch the DIPY data<data_fetch>`.

--------------------------------------
Denoising using Overcomplete Local PCA
--------------------------------------

Denoising algorithms based on principal components analysis (PCA) are effective
denoising methods because they explore the redundancy of the multi-dimensional
information of diffusion-weighted datasets. The basic idea behind the PCA-based
denoising algorithms is to perform a low-rank approximation by thresholding the
eigenspectrum of the noisy signal matrix.

The algorithm to perform an Overcomplete Local PCA-based (LPCA) denoising
involves the following steps:

* Estimating the local noise variance at each voxel.
* Applying a PCA in local patches around each voxel over the gradient
  directions.
* Thresholding the eigenvalues based on the local estimate of the noise
  variance, and then doing a PCA reconstruction.

The Overcomplete Local PCA algorithm turns out to work well on diffusion MRI
owing to the 4D structure of DWI acquisitions where the q-space is typically
oversampled giving highly correlated 3D volumes of the same subject.

For illustrative purposes of the Overcomplete Local PCA denoising method, we
will be using the ``stanford_hardi`` dataset, but you can also use your own
data.

The workflow for the LPCA denoising requires the paths to the diffusion input
file, as well as the b-values and b-vectors files.

You may want to create an output directory to save the denoised data, e.g.::

    mkdir denoise_lpca_output

To run the Overcomplete Local PCA denoising on the data it suffices to execute
the ``dipy_denoise_lpca`` command, e.g.::

    dipy_denoise_lpca data/stanford_hardi/HARDI150.nii.gz data/stanford_hardi/HARDI150.bval data/stanford_hardi/HARDI150.bvec --out_dir "denoise_lpca_output"

This command will denoise the diffusion image and save it to the
``denoise_lpca_output`` directory, defaulting the resulting image file name to
``dwi_lpca.nii.gz``. In case the output directory (``out_dir``) parameter is not
specified, the denoised diffusion image will be saved to the current directory
by default.

Note: Depending on the parameters' values, the effect of the denoising can
be subtle or even hardly noticeable, apparent or visible, depending on the
choice. Users are encouraged to carefully choose the parameters.

.. |image1| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_original.png?raw=true
   :align: middle

.. |image2| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_denoise_LPCA.png?raw=true
   :align: middle

+--------------------+--------------------+
|  Before Denoising  |  After Denoising   |
+====================+====================+
|      |image1|      |      |image2|      |
+--------------------+--------------------+

-----------------------------------
Denoising using Marcenko-Pastur PCA
-----------------------------------

The principal components classification can be performed based on prior noise
variance estimates or automatically based on the Marcenko-Pastur distribution.
In addition to noise suppression, the Marcenko-Pastur PCA (MPPCA) algorithm can
be used to get the standard deviation of the noise.

We will use the ``sherbrooke_3shell`` dataset in DIPY to showcase this denoising
method. As with any other workflow in DIPY, you can also use your own data!

We will create a directory where to save the denoised image (e.g.:
``denoise_mppca_output``)::

    mkdir denoise_mppca_output

In order to run the MPPCA denoising method, we need to specify the location of
the diffusion data file, followed by the optional arguments. In this case, we
will be specifying the patch radius value and the output directory.

The MPPCA denoising method is run using the ``dipy_denoise_mppca`` command,
e.g.::

    dipy_denoise_mppca data/sherbrooke_3shell/HARDI193.nii.gz --patch_radius 10 --out_dir "denoise_mppca_output"

This command will denoise the diffusion image and save it to the specified
output directory.

.. |image3| image:: https://github.com/dipy/dipy_data/blob/master/sherbrooke_3shell_original.png?raw=true
   :align: middle
.. |image4| image:: https://github.com/dipy/dipy_data/blob/master/sherbrooke_3shell_denoise_MPPCA.png?raw=true
   :align: middle

+--------------------+--------------------+
|  Before Denoising  |  After Denoising   |
+====================+====================+
|      |image3|      |      |image4|      |
+--------------------+--------------------+

-----------------------
Denoising using NLMEANS
-----------------------

In the Non-Local Means algorithm (NLMEANS) :footcite:p:`Coupe2008`,
:footcite:p:`Coupe2012`, the value of a pixel is replaced by an average of a
set of other pixel values: the specific patches centered on the other pixels
are contrasted to the patch centered on the pixel of interest, and the
average only applies to pixels with patches close to the current patch. This
algorithm can also restore good textures, which are distorted by other
denoising algorithms.

The Non-Local Means method can be used to denoise $N$-D image data (i.e. 2D, 3D,
4D, etc.), and thus enhance their SNR.

We will use the ``cfin_multib`` dataset in DIPY to showcase this denoising
method. As with any other workflow in DIPY, you can also use your own data!

In order to run the NLMEANS denoising method, we need to specify the location of the
diffusion data file, followed by the optional arguments. In this case, we will be
specifying the noise standard deviation estimate (``sigma``) and patch radius
values, and the output directory.

We will create a directory where to save the denoised image (e.g.:
``denoise_nlmeans_output``)::

    mkdir denoise_nlmeans_output

The NLMEANS denoising is performed using the ``dipy_denoise_nlmeans`` command,
e.g.::

   dipy_denoise_nlmeans data/cfin_multib/__DTI_AX_ep2d_2_5_iso_33d_20141015095334_4.nii --sigma 2 --patch_radius 2 --out_dir "denoise_nlmeans_output"

The command will denoise the input diffusion volume and write the result to the
specified output directory.

.. |image5| image:: https://github.com/dipy/dipy_data/blob/master/cfin_multib_original.png?raw=true
   :align: middle
.. |image6| image:: https://github.com/dipy/dipy_data/blob/master/cfin_multib_denoise_NLMEANS.png?raw=true
   :align: middle

+--------------------+--------------------+
|  Before Denoising  |  After Denoising   |
+====================+====================+
|      |image5|      |      |image6|      |
+--------------------+--------------------+

-----------------------------
Overview of Denoising Methods
-----------------------------

Note: Users are recommended to zoom (click on each image) to see the denoising effect.

.. |image7| image:: https://github.com/dipy/dipy_data/blob/master/sherbrooke_3shell_original.png?raw=true
   :align: middle
.. |image8| image:: https://github.com/dipy/dipy_data/blob/master/sherbrooke_denoise_LPCA.png?raw=true
   :align: middle
.. |image9| image:: https://github.com/dipy/dipy_data/blob/master/sherbrooke_3shell_denoise_MPPCA.png?raw=true
   :align: middle
.. |image10| image:: https://github.com/dipy/dipy_data/blob/master/sherbrooke_denoise_NLMEANS.png?raw=true
   :align: middle
.. |image11| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_original.png?raw=true
   :align: middle
.. |image12| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_denoise_LPCA.png?raw=true
   :align: middle
.. |image13| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_denoise_MPPCA.png?raw=true
   :align: middle
.. |image14| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_denoise_NLMEANS.png?raw=true
   :align: middle
.. |image15| image:: https://github.com/dipy/dipy_data/blob/master/cfin_multib_original.png?raw=true
   :align: middle
.. |image16| image:: https://github.com/dipy/dipy_data/blob/master/cfin_multib_LPCA.png?raw=true
   :align: middle
.. |image17| image:: https://github.com/dipy/dipy_data/blob/master/cfin_multib_denoise_MPPCA.png?raw=true
   :align: middle
.. |image18| image:: https://github.com/dipy/dipy_data/blob/master/cfin_multib_denoise_NLMEANS.png?raw=true
   :align: middle
.. |image19| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_t1_original.png?raw=true
   :align: middle
.. |image20| image:: https://github.com/dipy/dipy_data/blob/master/stanford_hardi_t1_NLMEANS.png?raw=true
   :align: middle

Diffusion
---------

+--------------------+--------------------+--------------------+--------------------+--------------------+
|      Dataset       |   Original Image   |    Denoise LCPA    |   Denoise MPPCA    |   Denoise NLMEANS  |
+====================+====================+====================+====================+====================+
|  sherbrooke_3shell |      |image7|      |      |image8|      |      |image9|      |      |image10|     |
+--------------------+--------------------+--------------------+--------------------+--------------------+
|  stanford_hardi    |      |image11|     |      |image12|     |      |image13|     |      |image14|     |
+--------------------+--------------------+--------------------+--------------------+--------------------+
|  cfin_multib       |      |image15|     |      |image16|     |      |image17|     |      |image18|     |
+--------------------+--------------------+--------------------+--------------------+--------------------+

Structural
----------

+--------------------+--------------------+--------------------+
|      Dataset       |   Original Image   |  Denoise NLMEANS   |
+====================+====================+====================+
|  stanford_hardi T1 |      |image19|     |      |image20|     |
+--------------------+--------------------+--------------------+

----------
References
----------

.. footbibliography::