Source code for mdt.cli_scripts.mdt_apply_mask
#!/usr/bin/env python
# PYTHON_ARGCOMPLETE_OK
"""Mask the background using the given mask.
This function multiplies a given volume (or list of volumes) with a binary mask.
"""
import argparse
import glob
import os
import mdt
from argcomplete.completers import FilesCompleter
from mdt.lib.nifti import nifti_filepath_resolution
from mdt.lib.shell_utils import BasicShellApplication
import textwrap
from mdt.utils import split_image_path
__author__ = 'Robbert Harms'
__date__ = "2015-08-18"
__maintainer__ = "Robbert Harms"
__email__ = "robbert@xkls.nl"
[docs]class ApplyMask(BasicShellApplication):
def _get_arg_parser(self, doc_parser=False):
description = textwrap.dedent(__doc__)
examples = textwrap.dedent('''
mdt-apply-mask data.nii.gz -m roi_mask_0_50.nii.gz
mdt-apply-mask *.nii.gz -m my_mask.nii.gz
''')
epilog = self._format_examples(doc_parser, examples)
parser = argparse.ArgumentParser(description=description, epilog=epilog,
formatter_class=argparse.RawTextHelpFormatter)
parser.add_argument('mask', help='the (brain) mask to use').completer = \
FilesCompleter(['nii', 'gz', 'hdr', 'img'], directories=False)
parser.add_argument('input_files', metavar='input_files', nargs="+", type=str,
help="The input images to use")
parser.add_argument('--overwrite', dest='overwrite', action='store_true',
help="Overwrite the original images, if not set we create an output file.")
parser.set_defaults(overwrite=False)
return parser
[docs] def run(self, args, extra_args):
mask = mdt.load_brain_mask(nifti_filepath_resolution(os.path.realpath(args.mask)))
file_names = []
for file in args.input_files:
file_names.extend(glob.glob(file))
for file in file_names:
if args.overwrite:
mdt.apply_mask_to_file(file, mask)
else:
folder, basename, ext = split_image_path(nifti_filepath_resolution(os.path.realpath(file)))
mdt.apply_mask_to_file(file, mask, output_fname=os.path.join(folder, basename + '_masked' + ext))
[docs]def get_doc_arg_parser():
return ApplyMask().get_documentation_arg_parser()
if __name__ == '__main__':
ApplyMask().start()