Skip to content

Commit 05209eb

Browse files
committed
improved masks generation
1 parent db6fdf9 commit 05209eb

File tree

1 file changed

+29
-9
lines changed

1 file changed

+29
-9
lines changed

nipype/interfaces/dipy/preprocess.py

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,8 @@ def nlmeans_proxy(in_file, settings,
222222
"""
223223
package_check('dipy', version='0.8.0.dev')
224224
from dipy.denoise.nlmeans import nlmeans
225+
from scipy.ndimage.morphology import binary_erosion
226+
from scipy import ndimage
225227

226228
if out_file is None:
227229
fname, fext = op.splitext(op.basename(in_file))
@@ -235,24 +237,42 @@ def nlmeans_proxy(in_file, settings,
235237
data = img.get_data()
236238
aff = img.get_affine()
237239

238-
if data.ndims < 4:
240+
if data.ndim < 4:
239241
data = data[..., np.newaxis]
240242
b0 = data[..., 0]
241243

242244
if smask is None:
243245
smask = np.zeros_like(b0)
244-
smask[b0 > np.percentile(b0, 0.85)] = 1
246+
smask[b0 > np.percentile(b0, 85.)] = 1
247+
248+
smask = binary_erosion(smask.astype(np.uint8), iterations=2).astype(np.uint8)
245249

246250
if nmask is None:
247-
nmask = np.zeros_like(b0)
248-
try:
249-
bmask = settings['mask']
250-
nmask[~bmask] = 1
251-
except AttributeError:
252-
nmask[b0 < np.percentile(b0, 0.15)] = 1
251+
nmask = np.ones_like(b0, dtype=np.uint8)
252+
bmask = settings['mask']
253+
if bmask is None:
254+
bmask = np.zeros_like(b0)
255+
bmask[b0 > np.percentile(b0, 55)] = 1
256+
label_im, nb_labels = ndimage.label(bmask)
257+
sizes = ndimage.sum(bmask, label_im, range(nb_labels + 1))
258+
maxidx = np.argmax(sizes)
259+
bmask = np.zeros_like(b0, dtype=np.uint8)
260+
bmask[label_im == maxidx] = 1
261+
262+
nb.Nifti1Image(bmask, aff,
263+
None).to_filename('bmask.nii.gz')
264+
nmask[bmask > 0] = 0
253265
else:
254266
nmask = np.squeeze(nmask)
255-
nmask[nmask > 0] = 1
267+
nmask[nmask > 0.0] = 1
268+
nmask[nmask < 1] = 0
269+
nmask = nmask.astype(bool)
270+
271+
nmask = binary_erosion(nmask, iterations=1).astype(np.uint8)
272+
273+
nb.Nifti1Image(smask.astype(np.uint8), aff,
274+
None).to_filename('smask.nii.gz')
275+
256276

257277
den = np.zeros_like(data)
258278
snr = []

0 commit comments

Comments
 (0)