Beispiel #1
0
    def __init__(self, sop_class_uid: str, sop_instance_uid: str,
                 frame_number: int, segment_number: int,
                 source_image: SourceImageForSegmentation) -> None:
        """
        Parameters
        ----------
        sop_class_uid: str
            SOP Class UID of the referenced image object
        sop_instance_uid: str
            SOP Instance UID of the referenced image object
        segment_number: int
            number of the segment to which the refernce applies
        frame_number: int
            number of the frame to which the reference applies
        source_image: highdicom.sr.content.SourceImageForSegmentation
            source image for segmentation

        """
        super().__init__()
        segmentation_item = ImageContentItem(
            name=CodedConcept(value='121214',
                              meaning='Referenced Segmentation Frame',
                              scheme_designator='DCM'),
            referenced_sop_class_uid=sop_class_uid,
            referenced_sop_instance_uid=sop_instance_uid,
            referenced_frame_numbers=frame_number,
            referenced_segment_numbers=segment_number,
            relationship_type=RelationshipTypeValues.CONTAINS)
        self.append(segmentation_item)
        if not isinstance(source_image, SourceImageForSegmentation):
            raise TypeError('Argument "source_image" must have type '
                            'SourceImageForSegmentation.')
        self.append(source_image)
Beispiel #2
0
    def __init__(
            self,
            sop_class_uid: str,
            sop_instance_uid: str,
            segment_number: int,
            frame_numbers: Optional[Sequence[int]] = None,
            source_images: Optional[
                Sequence[SourceImageForSegmentation]] = None,
            source_series: Optional[SourceSeriesForSegmentation] = None
    ) -> None:
        """
        Parameters
        ----------
        sop_class_uid: str
            SOP Class UID of the referenced segmentation object
        sop_instance_uid: str
            SOP Instance UID of the referenced segmentation object
        frame_numbers: Sequence[int], optional
            numbers of the frames to which the reference applies
            (in case a segmentation instance is referenced)
        segment_number: int
            number of the segment to which the refernce applies
        source_images: Sequence[highdicom.sr.content.SourceImageForSegmentation], optional
            source images for segmentation
        source_series: highdicom.sr.content.SourceSeriesForSegmentation, optional
            source series for segmentation

        Note
        ----
        Either `source_images` or `source_series` must be provided.

        """  # noqa
        super().__init__()
        segment_item = ImageContentItem(
            name=CodedConcept(value='121191',
                              meaning='Referenced Segment',
                              scheme_designator='DCM'),
            referenced_sop_class_uid=sop_class_uid,
            referenced_sop_instance_uid=sop_instance_uid,
            referenced_frame_numbers=frame_numbers,
            referenced_segment_numbers=segment_number,
            relationship_type=RelationshipTypeValues.CONTAINS)
        self.append(segment_item)
        if source_images is not None:
            for image in source_images:
                if not isinstance(image, SourceImageForSegmentation):
                    raise TypeError(
                        'Items of argument "source_images" must have type '
                        'SourceImageForSegmentation.')
                self.append(image)
        elif source_series is not None:
            if not isinstance(source_series, SourceSeriesForSegmentation):
                raise TypeError('Argument "source_series" must have type '
                                'SourceSeriesForSegmentation.')
            self.append(source_series)
        else:
            raise ValueError(
                'One of the following two arguments must be provided: '
                '"source_images" or "source_series".')
Beispiel #3
0
 def test_image_item_construction_with_multiple_frame_numbers(self):
     name = codes.DCM.SourceImageForSegmentation
     sop_class_uid = '1.2.840.10008.5.1.4.1.1.2.2'
     sop_instance_uid = '1.2.3.4'
     frame_numbers = [1, 2, 3]
     i = ImageContentItem(name=name,
                          referenced_sop_class_uid=sop_class_uid,
                          referenced_sop_instance_uid=sop_instance_uid,
                          referenced_frame_numbers=frame_numbers)
     ref_sop_item = i.ReferencedSOPSequence[0]
     assert ref_sop_item.ReferencedSOPClassUID == sop_class_uid
     assert ref_sop_item.ReferencedSOPInstanceUID == sop_instance_uid
     assert ref_sop_item.ReferencedFrameNumber == frame_numbers
     with pytest.raises(AttributeError):
         ref_sop_item.ReferencedSegmentNumber
Beispiel #4
0
 def test_image_item_construction_single_segment_number(self):
     name = codes.DCM.SourceImageForSegmentation
     sop_class_uid = '1.2.840.10008.5.1.4.1.1.66.4'
     sop_instance_uid = '1.2.3.4'
     segment_number = 1
     i = ImageContentItem(name=name,
                          referenced_sop_class_uid=sop_class_uid,
                          referenced_sop_instance_uid=sop_instance_uid,
                          referenced_segment_numbers=segment_number)
     ref_sop_item = i.ReferencedSOPSequence[0]
     assert ref_sop_item.ReferencedSOPClassUID == sop_class_uid
     assert ref_sop_item.ReferencedSOPInstanceUID == sop_instance_uid
     assert ref_sop_item.ReferencedSegmentNumber == segment_number
     with pytest.raises(AttributeError):
         ref_sop_item.ReferencedFrameNumber
Beispiel #5
0
 def test_image_item_construction(self):
     name = codes.DCM.SourceImageForSegmentation
     sop_class_uid = '1.2.840.10008.5.1.4.1.1.2'
     sop_instance_uid = '1.2.3.4'
     i = ImageContentItem(
         name=name,
         referenced_sop_class_uid=sop_class_uid,
         referenced_sop_instance_uid=sop_instance_uid,
     )
     assert i.ValueType == 'IMAGE'
     assert i.ConceptNameCodeSequence[0] == name
     ref_sop_item = i.ReferencedSOPSequence[0]
     assert ref_sop_item.ReferencedSOPClassUID == sop_class_uid
     assert ref_sop_item.ReferencedSOPInstanceUID == sop_instance_uid
     with pytest.raises(AttributeError):
         ref_sop_item.ReferencedFrameNumber
     with pytest.raises(AttributeError):
         ref_sop_item.ReferencedSegmentNumber