Skip to content

Commit 4fca4ae

Browse files
committed
enh:added noise mask for more precise std computations
1 parent e474426 commit 4fca4ae

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

nipype/interfaces/dipy/preprocess.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
# @Author: oesteban
44
# @Date: 2014-09-01 10:33:35
55
# @Last Modified by: oesteban
6-
# @Last Modified time: 2014-09-02 01:12:14
6+
# @Last Modified time: 2014-09-02 16:00:36
77
from nipype.interfaces.base import (traits, TraitedSpec, BaseInterface,
88
File, isdefined)
99
from nipype.utils.filemanip import split_filename
@@ -93,6 +93,8 @@ class DenoiseInputSpec(TraitedSpec):
9393
noise_model = traits.Enum('rician', 'gaussian', mandatory=True,
9494
usedefault=True,
9595
desc=('noise distribution model'))
96+
noise_mask = File(desc=('mask in which the standard deviation of noise '
97+
'will be computed'), exists=True)
9698

9799

98100
class DenoiseOutputSpec(TraitedSpec):
@@ -129,7 +131,12 @@ def _run_interface(self, runtime):
129131
if isdefined(self.inputs.in_mask):
130132
mask = nb.load(self.inputs.in_mask).get_data()
131133

134+
noise_mask = None
135+
if isdefined(self.inputs.in_mask):
136+
noise_mask = nb.load(self.inputs.noise_mask).get_data()
137+
132138
nlmeans_proxy(self.inputs.in_file, in_mask=mask,
139+
noise_mask=noise_mask,
133140
rician=(self.inputs.noise_model == 'rician'),
134141
out_file=out_file)
135142
iflogger.info('Denoised image saved as {i}'.format(i=out_file))
@@ -184,7 +191,8 @@ def resample_proxy(in_file, order=3, new_zooms=None, out_file=None):
184191
return out_file, new_zooms
185192

186193

187-
def nlmeans_proxy(in_file, in_mask=None, rician=True, out_file=None):
194+
def nlmeans_proxy(in_file, in_mask=None, rician=True,
195+
noise_mask=None, out_file=None):
188196
"""
189197
Uses non-local means to denoise 4D datasets
190198
"""
@@ -206,7 +214,11 @@ def nlmeans_proxy(in_file, in_mask=None, rician=True, out_file=None):
206214
else:
207215
mask = in_mask > 0
208216

209-
sigma = np.std(data[~mask])
217+
nmask = mask
218+
if noise_mask is not None:
219+
nmask = noise_mask > 0
220+
221+
sigma = np.std(data[~nmask])
210222
den = nlmeans(data, sigma=sigma, mask=mask)
211223

212224
nb.Nifti1Image(den.astype(hdr.get_data_dtype()), aff,

nipype/interfaces/dipy/tests/test_auto_Denoise.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ def test_Denoise_inputs():
66
input_map = dict(in_file=dict(mandatory=True,
77
),
88
in_mask=dict(),
9+
noise_mask=dict(),
910
noise_model=dict(mandatory=True,
1011
usedefault=True,
1112
),

0 commit comments

Comments
 (0)