def save_segmentation(self, frame, image_size, filename, spacing):
        image_size = [image_size[1], image_size[0]]

        # Create compounded segmentation object
        segmentation = self.get_object_segmentation(image_size, frame)

        segmentation_mhd = MetaImage(data=segmentation)
        segmentation_mhd.set_attribute('ImageQuality',
                                       frame.image_annotation.image_quality)
        segmentation_mhd.set_spacing(spacing)
        metadata = ImageMetadata.objects.filter(
            image=frame.image_annotation.image)
        for item in metadata:
            segmentation_mhd.set_attribute(item.name, item.value)
        segmentation_mhd.write(filename)
Exemplo n.º 2
0
    def save_segmentation(self, frame, image_size, filename, spacing,
                          x_scaling):
        print('X scaling is', x_scaling)
        image_size = [image_size[1], image_size[0]]
        # Get control points for all objects
        control_points0 = list(
            ControlPoint.objects.filter(image=frame,
                                        object=0).order_by('index'))
        control_points1 = list(
            ControlPoint.objects.filter(image=frame,
                                        object=1).order_by('index'))
        control_points2 = list(
            ControlPoint.objects.filter(image=frame,
                                        object=2).order_by('index'))
        if x_scaling != 1:
            for point in control_points0:
                point.x *= x_scaling
            for point in control_points1:
                point.x *= x_scaling
            for point in control_points2:
                point.x *= x_scaling

        # Endpoints of object 2 are the same as object 1
        if len(control_points0) > 0 and len(control_points2) > 0:
            control_points2.insert(0, control_points0[-1])
            control_points2.append(control_points0[0])

        # Create new endpoints for object 1
        if len(control_points1) > 0:
            point = self.calculate_new_endpoints(control_points0,
                                                 control_points1[0])
            control_points1.insert(0, point)
            point = self.calculate_new_endpoints(control_points0,
                                                 control_points1[-1])
            control_points1.append(point)

        # Create compounded segmentation object
        #image_size[1] = int(round(image_size[1]/x_scaling))
        #spacing[1] = spacing[0]
        segmentation = np.zeros(image_size, dtype=np.uint8)
        if len(control_points1) > 0:
            object_segmentation = self.get_object_segmentation(
                image_size, control_points1, x_scaling)
            segmentation[object_segmentation == 1] = 2  # Draw epi before endo
        if len(control_points2) > 0:
            object_segmentation = self.get_object_segmentation(
                image_size, control_points2, x_scaling)
            segmentation[object_segmentation == 1] = 3
        if len(control_points0) > 0:
            object_segmentation = self.get_object_segmentation(
                image_size, control_points0, x_scaling)
            segmentation[object_segmentation == 1] = 1

        segmentation_mhd = MetaImage(data=segmentation)
        segmentation_mhd.set_attribute('ImageQuality',
                                       frame.image_annotation.image_quality)
        segmentation_mhd.set_attribute('FrameType', frame.frame_metadata)
        segmentation_mhd.set_spacing(spacing)
        metadata = ImageMetadata.objects.filter(
            image=frame.image_annotation.image)
        for item in metadata:
            segmentation_mhd.set_attribute(item.name, item.value)
        segmentation_mhd.write(filename)
Exemplo n.º 3
0
    def save_segmentation(self, frame, image_size, filename, spacing,
                          x_scaling, image):
        print('X scaling is', x_scaling)
        image_size = [image_size[1], image_size[0]]
        # Get control points for all objects
        control_points0 = list(
            ControlPoint.objects.filter(image=frame,
                                        object=0).order_by('index'))
        control_points1 = list(
            ControlPoint.objects.filter(image=frame,
                                        object=1).order_by('index'))
        control_points2 = list(
            ControlPoint.objects.filter(image=frame,
                                        object=2).order_by('index'))
        control_points3 = list(
            ControlPoint.objects.filter(image=frame,
                                        object=3).order_by('index'))

        if x_scaling != 1:
            for point in control_points0:
                point.x *= x_scaling
            for point in control_points1:
                point.x *= x_scaling
            for point in control_points2:
                point.x *= x_scaling
            for point in control_points3:
                point.x *= x_scaling

        # Endpoints of object 2 (LA) are the same as object 0 (endo/LV)
        if len(control_points0) > 0 and len(control_points2) > 0:
            control_points2.insert(0, control_points0[-1])
            control_points2.append(control_points0[0])
        # Aorta (3) endpoints
        if len(control_points3) > 0 and len(control_points0) > 0:
            control_points3.insert(0, control_points0[-2])
            control_points3.append(control_points0[-1])
        # (myocard/epi) (1) endpoints
        if len(control_points0) > 0 and len(control_points1) > 0:
            control_points1.insert(0, control_points0[0])
            control_points1.append(control_points0[-2])

        # Create compounded segmentation object
        #image_size[1] = int(round(image_size[1]/x_scaling))
        #spacing[1] = spacing[0]
        segmentation = np.zeros(image_size, dtype=np.uint8)
        if len(control_points1) > 0:
            object_segmentation = self.get_object_segmentation(
                image_size,
                control_points1,
                x_scaling,
                straight_lines=[[0, -1], [-2, -1], [0, 1]])
            segmentation[object_segmentation == 1] = 2  # Draw epi before endo
        if len(control_points2) > 0:
            object_segmentation = self.get_object_segmentation(
                image_size,
                control_points2,
                x_scaling,
                straight_lines=[[0, -1]])
            segmentation[object_segmentation == 1] = 3
        if len(control_points0) > 0:
            object_segmentation = self.get_object_segmentation(
                image_size,
                control_points0,
                x_scaling,
                straight_lines=[[0, -1], [-2, -1]])
            segmentation[object_segmentation == 1] = 1
        if len(control_points3) > 0:
            object_segmentation = self.get_object_segmentation(
                image_size,
                control_points3,
                x_scaling,
                straight_lines=[[0, -1]])
            segmentation[object_segmentation == 1] = 4

        segmentation_mhd = MetaImage(data=segmentation)
        segmentation_mhd.set_attribute('ImageQuality',
                                       frame.image_annotation.image_quality)
        segmentation_mhd.set_attribute('FrameType', frame.frame_metadata)
        segmentation_mhd.set_spacing(spacing)
        metadata = ImageMetadata.objects.filter(
            image=frame.image_annotation.image)
        for item in metadata:
            segmentation_mhd.set_attribute(item.name, item.value)
        segmentation_mhd.write(filename)
Exemplo n.º 4
0
    def save_segmentation(self, frame, image_size, filename, spacing, x_scaling, image):
        print('X scaling is', x_scaling)
        image_size = [image_size[1], image_size[0]]
        # Get control points for all objects
        control_points0 = list(ControlPoint.objects.filter(image=frame, object=0).order_by('index'))
        control_points1 = list(ControlPoint.objects.filter(image=frame, object=1).order_by('index'))
        control_points2 = list(ControlPoint.objects.filter(image=frame, object=2).order_by('index'))
        control_points3 = list(ControlPoint.objects.filter(image=frame, object=3).order_by('index'))
        control_points4 = list(ControlPoint.objects.filter(image=frame, object=4).order_by('index'))
        control_points5 = list(ControlPoint.objects.filter(image=frame, object=5).order_by('index'))

        if x_scaling != 1:
            for point in control_points0:
                point.x *= x_scaling
            for point in control_points1:
                point.x *= x_scaling
            for point in control_points2:
                point.x *= x_scaling
            for point in control_points3:
                point.x *= x_scaling
            for point in control_points4:
                point.x *= x_scaling
            for point in control_points5:
                point.x *= x_scaling

        # Endpoints of object 2 (LA) are the same as object 0 (endo/LV)
        if len(control_points0) > 0 and len(control_points2) > 0:
            control_points2.insert(0, control_points0[-1])
            control_points2.append(control_points0[0])
        # Aorta (3) endpoints
        if len(control_points3) > 0 and len(control_points0) > 0:
            control_points3.insert(0, control_points0[-2])
            control_points3.append(control_points0[-1])
        # (LVOT) (5) endpoints
        if len(control_points0) > 0 and len(control_points5) > 0:
            control_points5.insert(0, control_points0[-1])
            control_points5.append(control_points0[-2])
        # (myocard/epi) (1) endpoints
        if len(control_points0) > 0 and len(control_points1) > 0:
            control_points1.insert(0, control_points0[0])
            control_points1.append(control_points0[-2])

        # Create compounded segmentation object
        #image_size[1] = int(round(image_size[1]/x_scaling))
        #spacing[1] = spacing[0]
        segmentation = np.zeros(image_size, dtype=np.uint8)
        if len(control_points1) > 0:
            object_segmentation = self.get_object_segmentation(image_size, control_points1, x_scaling, straight_lines=[[0, -1], [-2, -1], [0, 1]])
            segmentation[object_segmentation == 1] = 2  # Draw epi before endo
        if len(control_points2) > 0:
            object_segmentation = self.get_object_segmentation(image_size, control_points2, x_scaling, straight_lines=[[0, -1]])
            segmentation[object_segmentation == 1] = 3
        if len(control_points0) > 0:
            object_segmentation = self.get_object_segmentation(image_size, control_points0, x_scaling, straight_lines=[[0, -1], [-2, -1]])
            segmentation[object_segmentation == 1] = 1
        if len(control_points3) > 0:
            object_segmentation = self.get_object_segmentation(image_size, control_points3, x_scaling, straight_lines=[[0, -1]])
            segmentation[object_segmentation == 1] = 4
        if len(control_points4) > 0:
            object_segmentation = self.get_object_segmentation(image_size, control_points4, x_scaling)
            segmentation[object_segmentation == 1] = 5
        if len(control_points5) > 0:
            object_segmentation = self.get_object_segmentation(image_size, control_points5, x_scaling, straight_lines=[[0, -1], [-2, -1], [-3, -2], [-4, -3]])
            segmentation[np.logical_and(object_segmentation == 1, segmentation != 2)] = 6 # Draw LVOT after endo, but epi should be subtracted

        # Remove data outside ultrasound sector
        segmentation[image == 0] = 0 # TODO improve this maybe?

        segmentation_mhd = MetaImage(data=segmentation)
        segmentation_mhd.set_attribute('ImageQuality', frame.image_annotation.image_quality)
        segmentation_mhd.set_attribute('FrameType', frame.frame_metadata)
        segmentation_mhd.set_spacing(spacing)
        metadata = ImageMetadata.objects.filter(image=frame.image_annotation.image)
        for item in metadata:
            segmentation_mhd.set_attribute(item.name, item.value)
        segmentation_mhd.write(filename)