def __init__(self, graphic_type: Union[GraphicTypeValues3D, str], graphic_data: np.ndarray, frame_of_reference_uid: str) -> None: """ Parameters ---------- graphic_type: Union[highdicom.sr.enum.GraphicTypeValues3D, str] name of the graphic type graphic_data: numpy.ndarray array of ordered spatial coordinates, where each row of the array represents a (x, y, z) coordinate triplet frame_of_reference_uid: str UID of the frame of reference """ # noqa graphic_type = GraphicTypeValues3D(graphic_type) if graphic_type == GraphicTypeValues3D.MULTIPOINT: raise ValueError( 'Graphic type "MULTIPOINT" is not valid for region.') if graphic_type == GraphicTypeValues3D.ELLIPSOID: raise ValueError( 'Graphic type "ELLIPSOID" is not valid for region.') super().__init__(name=CodedConcept(value='111030', meaning='Image Region', scheme_designator='DCM'), graphic_type=graphic_type, graphic_data=graphic_data, frame_of_reference_uid=frame_of_reference_uid, relationship_type=RelationshipTypeValues.CONTAINS)
def __init__( self, graphic_type: Union[GraphicTypeValues3D, str], graphic_data: np.ndarray, frame_of_reference_uid: str, source_images: Optional[ Sequence[SourceImageForSegmentation]] = None, source_series: Optional[SourceSeriesForSegmentation] = None ) -> None: """ Parameters ---------- graphic_type: Union[highdicom.sr.enum.GraphicTypeValues3D, str] name of the graphic type graphic_data: Sequence[Sequence[int]] ordered set of (row, column, frame) coordinate pairs frame_of_reference_uid: str unique identifier of the frame of reference within which the coordinates are defined 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 one or more source images or one source series must be provided. """ # noqa graphic_type = GraphicTypeValues3D(graphic_type) if graphic_type != GraphicTypeValues3D.ELLIPSOID: raise ValueError( 'Graphic type for volume surface must be "ELLIPSOID".') super().__init__(name=CodedConcept(value='121231', meaning='Volume Surface', scheme_designator='DCM'), frame_of_reference_uid=frame_of_reference_uid, graphic_type=graphic_type, graphic_data=graphic_data, relationship_type=RelationshipTypeValues.CONTAINS) self.ContentSequence = ContentSequence() if source_images is not None: for image in source_images: if not isinstance(image, SourceImageForSegmentation): raise TypeError( 'Items of argument "source_image" must have type ' 'SourceImageForSegmentation.') self.ContentSequence.append(image) elif source_series is not None: if not isinstance(source_series, SourceSeriesForSegmentation): raise TypeError('Argument "source_series" must have type ' 'SourceSeriesForSegmentation.') self.ContentSequence.append(source_series) else: raise ValueError( 'One of the following two arguments must be provided: ' '"source_images" or "source_series".')
def __init__( self, name: Union[Code, CodedConcept], graphic_type: Union[GraphicTypeValues3D, str], graphic_data: np.ndarray, frame_of_reference_uid: Union[str, UID], fiducial_uid: Optional[Union[str, UID]] = None, relationship_type: Optional[Union[str, RelationshipTypeValues]] = None ) -> None: """ Parameters ---------- name: Union[highdicom.sr.coding.CodedConcept, pydicom.sr.coding.Code] concept name graphic_type: Union[highdicom.sr.enum.GraphicTypeValues3D, str] name of the graphic type graphic_data: numpy.ndarray[numpy.float] array of spatial coordinates, where each row of the array represents a (x, y, z) coordinate triplet frame_of_reference_uid: Union[pydicom.uid.UID, str] unique identifier of the frame of reference within which the coordinates are defined fiducial_uid: str, optional unique identifier for the content item relationship_type: Union[highdicom.sr.enum.RelationshipTypeValues, str], optional type of relationship with parent content item """ # noqa super(Scoord3DContentItem, self).__init__(ValueTypeValues.SCOORD3D, name, relationship_type) graphic_type = GraphicTypeValues3D(graphic_type) self.GraphicType = graphic_type.value if graphic_type == GraphicTypeValues3D.POINT: if graphic_data.shape[0] != 1 or not graphic_data.shape[1] == 3: raise ValueError( 'Graphic data of a scoord 3D of graphic type "POINT" ' 'must be a single point in three-dimensional patient or ' 'slide coordinate space in form of a (x, y, z) triplet.') elif graphic_type == GraphicTypeValues3D.ELLIPSE: if graphic_data.shape[0] != 4 or not graphic_data.shape[1] == 3: raise ValueError( 'Graphic data of a 3D scoord of graphic type "ELLIPSE" ' 'must be four (x, y, z) triplets in three-dimensional ' 'patient or slide coordinate space.') elif graphic_type == GraphicTypeValues3D.ELLIPSOID: if graphic_data.shape[0] != 6 or not graphic_data.shape[1] == 3: raise ValueError( 'Graphic data of a 3D scoord of graphic type ' '"ELLIPSOID" must be six (x, y, z) triplets in ' 'three-dimensional patient or slide coordinate space.') else: if not graphic_data.shape[0] > 1 or not graphic_data.shape[1] == 3: raise ValueError( 'Graphic data of a 3D scoord must be multiple ' '(x, y, z) triplets in three-dimensional patient or ' 'slide coordinate space.') # Flatten list of coordinate triplets self.GraphicData = graphic_data.flatten().tolist() self.ReferencedFrameOfReferenceUID = frame_of_reference_uid if fiducial_uid is not None: self.FiducialUID = fiducial_uid