Exemplo n.º 1
0
def test_deface_image():
    if which('fsl'):
        test_img = (Path(__file__).parent.parent.joinpath(
            'tests', 'data',
            'ds000031_sub-01_ses-006_run-001_T1w.nii.gz').as_posix())
        # From https://stackoverflow.com/a/7244263
        data_url = 'https://openneuro.org/crn/datasets/ds000031/files/sub-01:ses-006:anat:sub-01_ses-006_run-001_T1w.nii.gz'
        urllib.request.urlretrieve(data_url, test_img)
        pdu.deface_image(test_img, forcecleanup=True, force=True)
        pdu.cleanup_files(test_img)

    else:
        pytest.skip("no fsl to run defacing.")
Exemplo n.º 2
0
def test_cleanup_files():
    files = []
    for p in range(3):
        files.append(tempfile.mkstemp()[1])
    pdu.cleanup_files(files[0])
    pdu.cleanup_files(*files[1:])
    # should not fail if files do not exist
    pdu.cleanup_files(*files)
Exemplo n.º 3
0
def main():
    """Command line call argument parsing."""
    parser = argparse.ArgumentParser()
    parser.add_argument('infile', metavar='path', help="Path to input nifti.")

    parser.add_argument("--outfile",
                        metavar='path',
                        required=False,
                        help="If not provided adds '_defaced' suffix.")

    parser.add_argument("--force",
                        action='store_true',
                        help="Force to rewrite the output even if it exists.")

    parser.add_argument(
        '--applyto',
        nargs='+',
        required=False,
        metavar='',
        help="Apply the created face mask to other images. Can take multiple "
        "arguments.")

    parser.add_argument(
        "--cost",
        metavar='mutualinfo',
        required=False,
        default='mutualinfo',
        help="FSL-FLIRT cost function. Default is 'mutualinfo'.")

    parser.add_argument(
        "--template",
        metavar='path',
        required=False,
        help=("Optional template image that will be used as the registration "
              "target instead of the default."))

    parser.add_argument(
        "--facemask",
        metavar='path',
        required=False,
        help="Optional face mask image that will be used instead of the "
        "default.")

    parser.add_argument("--nocleanup",
                        action='store_true',
                        help="Do not cleanup temporary files. Off by default.")

    parser.add_argument("--verbose",
                        action='store_true',
                        help="Show additional status prints. Off by default.")

    parser.add_argument('--debug',
                        action='store_true',
                        dest='debug',
                        help='Do not catch exceptions and show exception '
                        'traceback (Drop into pdb debugger).')

    welcome_str = 'pydeface ' + require("pydeface")[0].version
    welcome_decor = '-' * len(welcome_str)
    print(welcome_decor + '\n' + welcome_str + '\n' + welcome_decor)

    args = parser.parse_args()
    if args.debug:
        setup_exceptionhook()

    warped_mask_img, warped_mask, template_reg, template_reg_mat =\
        pdu.deface_image(**vars(args))

    # apply mask to other given images
    if args.applyto is not None:
        print("Defacing mask also applied to:")
        for applyfile in args.applyto:
            applyfile_img = load(applyfile)
            outdata = applyfile_img.get_data() * warped_mask_img.get_data()
            applyfile_img = Nifti1Image(outdata, applyfile_img.get_affine(),
                                        applyfile_img.get_header())
            outfile = pdu.output_checks(applyfile)
            applyfile_img.to_filename(outfile)
            print('  %s' % applyfile)

    if not args.nocleanup:
        pdu.cleanup_files(warped_mask, template_reg, template_reg_mat)

    print('Finished.')