diff --git a/niftymic/application/multiply.py b/niftymic/application/multiply.py new file mode 100644 index 00000000..4914013f --- /dev/null +++ b/niftymic/application/multiply.py @@ -0,0 +1,47 @@ +## +# \file multiply.py +# \brief Script multiply images with each other. +# +# \author Michael Ebner (michael.ebner.14@ucl.ac.uk) +# \date October 2017 +# + +import os +import SimpleITK as sitk + +import pysitk.python_helper as ph + +import niftymic.base.data_writer as dw +from niftymic.utilities.input_arparser import InputArgparser + + +def main(): + + input_parser = InputArgparser( + description="Multiply images. " + "Pixel type is determined by first given image.", + ) + + input_parser.add_filenames(required=True) + input_parser.add_output(required=True) + input_parser.add_verbose(default=0) + + args = input_parser.parse_args() + input_parser.print_arguments(args) + + if len(args.filenames) < 2: + raise IOError("At least two images must be provided") + + out_sitk = sitk.ReadImage(args.filenames[0]) + for f in args.filenames[1:]: + im_sitk = sitk.Cast(sitk.ReadImage(f), out_sitk.GetPixelIDValue()) + out_sitk = out_sitk * im_sitk + + dw.DataWriter.write_image(out_sitk, args.output) + + if args.verbose: + args.filenames.insert(0, args.output) + ph.show_niftis(args.filenames) + +if __name__ == '__main__': + main() diff --git a/niftymic/application/multiply_stack_with_mask.py b/niftymic/application/multiply_stack_with_mask.py deleted file mode 100644 index 88b80c25..00000000 --- a/niftymic/application/multiply_stack_with_mask.py +++ /dev/null @@ -1,56 +0,0 @@ -## -# \file mulitply_stack_with_mask.py -# \brief Script to stack/reconstruction with multiply template mask. -# -# \author Michael Ebner (michael.ebner.14@ucl.ac.uk) -# \date October 2017 -# - -import os - -import pysitk.python_helper as ph -import pysitk.simple_itk_helper as sitkh - -import niftymic.base.stack as st -from niftymic.utilities.input_arparser import InputArgparser -from niftymic.definitions import DIR_TEMPLATES - - -def main(): - - input_parser = InputArgparser( - description="Multiply stack/reconstruction with template mask.", - ) - - input_parser.add_filename(required=True) - input_parser.add_gestational_age(required=True) - input_parser.add_dir_input_templates(default=DIR_TEMPLATES) - input_parser.add_verbose(default=1) - input_parser.add_dir_output() - input_parser.add_prefix_output(default="Masked_") - args = input_parser.parse_args() - input_parser.print_arguments(args) - - template = os.path.join( - args.dir_input_templates, - "STA%d.nii.gz" % args.gestational_age) - template_mask = os.path.join( - args.dir_input_templates, - "STA%d_mask_dil.nii.gz" % args.gestational_age) - - stack = st.Stack.from_filename(args.filename, template_mask, - extract_slices=False) - stack_masked = stack.get_stack_multiplied_with_mask() - stack_masked.set_filename(args.prefix_output + stack.get_filename()) - - if args.dir_output is None: - dir_output = os.path.dirname(args.filename) - else: - dir_output = args.dir_output - stack_masked.write(dir_output) - - if args.verbose: - sitkh.show_stacks([stack, stack_masked], segmentation=stack) - -if __name__ == '__main__': - main() diff --git a/niftymic/application/run_reconstruction_pipeline.py b/niftymic/application/run_reconstruction_pipeline.py index 4d61909c..18e5bf17 100644 --- a/niftymic/application/run_reconstruction_pipeline.py +++ b/niftymic/application/run_reconstruction_pipeline.py @@ -193,7 +193,7 @@ def main(): dir_motion_correction = os.path.join( dir_output_recon_subject_space, "motion_correction") cmd_args = ["niftymic_reconstruct_volume_from_slices"] - cmd_args.append("--filenames %s" % (" ").join(args.filenames_masks)) + cmd_args.append("--filenames %s" % " ".join(args.filenames_masks)) cmd_args.append("--dir-input-mc %s" % dir_motion_correction) cmd_args.append("--output %s" % srr_subject_mask) cmd_args.append("--reconstruction-space %s" % srr_subject) @@ -280,7 +280,7 @@ def main(): dir_motion_correction = os.path.join( dir_output_recon_template_space, "motion_correction") cmd_args = ["niftymic_reconstruct_volume_from_slices"] - cmd_args.append("--filenames %s" % (" ").join(args.filenames_masks)) + cmd_args.append("--filenames %s" % " ".join(args.filenames_masks)) cmd_args.append("--dir-input-mc %s" % dir_motion_correction) cmd_args.append("--output %s" % srr_template_mask) cmd_args.append("--reconstruction-space %s" % srr_template) @@ -305,13 +305,16 @@ def main(): raise RuntimeError("Copy of SRR to output directory failed") # Multiply template mask with reconstruction - cmd_args = [] - cmd_args.append("--filename %s" % path_to_output) - cmd_args.append("--gestational-age %d" % gestational_age) - cmd_args.append("--verbose %s" % args.verbose) - cmd_args.append("--dir-input-templates %s " % args.dir_input_templates) - cmd = "niftymic_multiply_stack_with_mask %s" % ( - " ").join(cmd_args) + cmd_args = ["niftymic_multiply"] + fnames = [ + srr_template, + srr_template_mask, + ] + output_masked = "Masked_%s" % output + path_to_output_masked = os.path.join(args.dir_output, output_masked) + cmd_args.append("--filenames %s" % " ".join(fnames)) + cmd_args.append("--output %s" % path_to_output_masked) + cmd = (" ").join(cmd_args) exit_code = ph.execute_command(cmd) if exit_code != 0: raise RuntimeError("SRR brain masking failed") diff --git a/niftymic_multiply_stack_with_mask.py b/niftymic_multiply.py similarity index 57% rename from niftymic_multiply_stack_with_mask.py rename to niftymic_multiply.py index e9d2774d..e4b471d2 100644 --- a/niftymic_multiply_stack_with_mask.py +++ b/niftymic_multiply.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- import sys -from niftymic.application.multiply_stack_with_mask import main +from niftymic.application.multiply import main if __name__ == "__main__": sys.exit(main()) diff --git a/setup.py b/setup.py index f4111389..3c65db7c 100644 --- a/setup.py +++ b/setup.py @@ -100,7 +100,7 @@ def install_requires(fname="requirements.txt"): 'niftymic_reconstruct_volume = niftymic.application.reconstruct_volume:main', 'niftymic_reconstruct_volume_from_slices = niftymic.application.reconstruct_volume_from_slices:main', 'niftymic_register_image = niftymic.application.register_image:main', - 'niftymic_multiply_stack_with_mask = niftymic.application.multiply_stack_with_mask:main', + 'niftymic_multiply = niftymic.application.multiply:main', 'niftymic_run_reconstruction_parameter_study = niftymic.application.run_reconstruction_parameter_study:main', 'niftymic_run_reconstruction_pipeline = niftymic.application.run_reconstruction_pipeline:main', 'niftymic_nifti2dicom = niftymic.application.nifti2dicom:main',