def launch_sagittal_viewer(img: Image, labels: Sequence[int], msg: str, previous_points: Sequence[Coordinate] = None, output_img: Image = None) -> Image: from spinalcordtoolbox.gui import base from spinalcordtoolbox.gui.sagittal import launch_sagittal_dialog params = base.AnatomicalParams() params.vertebraes = labels params.input_file_name = img.absolutepath if output_img is not None: params.output_file_name = output_img.absolutepath else: params.output_file_name = img.absolutepath params.subtitle = msg if previous_points is not None: params.message_warn = 'Please select the label you want to add \nor correct in the list below before clicking \non the image' out = zeros_like(img, dtype='uint8') out.absolutepath = params.output_file_name launch_sagittal_dialog(img, out, params, previous_points) return out
def launch_sagittal_viewer(self, labels): from spinalcordtoolbox.gui import base from spinalcordtoolbox.gui.sagittal import launch_sagittal_dialog params = base.AnatomicalParams() params.vertebraes = labels params.input_file_name = self.image_input.absolutepath params.output_file_name = self.fname_output params.subtitle = self.msg output = msct_image.zeros_like(self.image_input) output.absolutepath = self.fname_output launch_sagittal_dialog(self.image_input, output, params) return output
def launch_sagittal_viewer(self, labels): from spinalcordtoolbox.gui import base from spinalcordtoolbox.gui.sagittal import launch_sagittal_dialog params = base.AnatomicalParams() params.vertebraes = labels params.input_file_name = self.image_input.file_name params.output_file_name = self.fname_output output = self.image_input.copy() output.data *= 0 output.setFileName(self.fname_output) launch_sagittal_dialog(self.image_input, output, params) return output
def launch_sagittal_viewer(self, labels, previous_points=None): from spinalcordtoolbox.gui import base from spinalcordtoolbox.gui.sagittal import launch_sagittal_dialog params = base.AnatomicalParams() params.vertebraes = labels params.input_file_name = self.image_input.absolutepath params.output_file_name = self.fname_output params.subtitle = self.msg if previous_points is not None: params.message_warn = 'Please select the label you want to add \nor correct in the list below before clicking \non the image' output = msct_image.zeros_like(self.image_input) output.absolutepath = self.fname_output launch_sagittal_dialog(self.image_input, output, params, previous_points) return output
def get_bbox_from_gui(self): """ Launch a GUI. The medial sagittal plane of the image is shown. User selects two points: top-left and bottom- right of the cropping window. Note: There is no cropping along the right-left direction. :return: """ from spinalcordtoolbox.gui import base from spinalcordtoolbox.gui.sagittal import launch_sagittal_dialog # Change orientation to SAL (for displaying sagittal view in the GUI) native_orientation = self.img_in.orientation self.img_in.change_orientation('SAL') # Launch GUI params = base.AnatomicalParams() params.vertebraes = [ 1, 2 ] # TODO: Have user draw a sliding rectangle instead (more intuitive) params.subtitle = "Click on the top-left (Label 1) and bottom-right (Label 2) of the image to select your " \ "cropping window." img_labels = zeros_like(self.img_in) launch_sagittal_dialog(self.img_in, img_labels, params) # Extract coordinates img_labels.change_orientation(native_orientation) cropping_coord = img_labels.getNonZeroCoordinates(sorting='value') # Since there is no cropping along the R-L direction, xmin/xmax are based on image dimension self.bbox.xmin, self.bbox.ymin, self.bbox.zmin = ( 0, min(cropping_coord[0].y, cropping_coord[1].y), min(cropping_coord[0].z, cropping_coord[1].z), ) self.bbox.xmax, self.bbox.ymax, self.bbox.zmax = ( img_labels.dim[0], max(cropping_coord[0].y, cropping_coord[1].y), max(cropping_coord[0].z, cropping_coord[1].z), ) # Put back input image in native orientation self.img_in.change_orientation(native_orientation)
def segment_image_cli(): parser = get_parser() args = sys.argv[1:] try: arguments = parser.parse(args) except SyntaxError as err: printv(str(err), type='error') launch_modes = { 'centerline': launch_centerline_dialog, 'sagittal': launch_sagittal_dialog } mode = arguments['-mode'] input_file_name = arguments['-i'] output_file_name = arguments['-o'] params = base.AnatomicalParams() params.input_file_name = input_file_name params.num_points = arguments.get('-n', params.num_points) params.vertebraes = arguments.get('-labels', params.vertebraes) input_file = Image(input_file_name) if os.path.exists: printv('The output file exists, the contents will be overwritten', type='warning') output_file = input_file.copy() output_file.data *= 0 output_file.absolutepath = output_file_name controller = launch_modes[mode](input_file, output_file, params) if controller.saved: controller.as_niftii() printv('Output file %s' % output_file_name, type='info') else: printv('Aborted Manual labeling', type='warning')
def setUp(self): self.image = msct_image.Image(sct_test_path('t2', 't2.nii.gz')) self.overlay = msct_image.Image(self.image) self.params = base.AnatomicalParams()
def setUp(self): self.image = msct_image.Image( os.path.expanduser('~/sct_example_data/t2/t2.nii.gz')) self.overlay = msct_image.Image(self.image) self.params = base.AnatomicalParams()