예제 #1
0
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
예제 #4
0
    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
예제 #5
0
    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)
예제 #6
0
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')
예제 #7
0
 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()
예제 #8
0
 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()