VintaSoft Imaging .NET SDK 14.0: Документация для .NET разработчика
Vintasoft.Imaging.Metadata Namespace / DicomSeriesManager Class
Члены типа Объект Синтаксис Example Иерархия Требования Смотрите также
В этом разделе
    Класс DicomSeriesManager
    В этом разделе
    Предоставляет менеджер, позволяющий группировать DICOM-изображения по DICOM-сериям.
    Объектная модель
    ImageCollection DicomSeriesManager
    Синтаксис
    'Declaration
    
    Public Class DicomSeriesManager
    
    
    public class DicomSeriesManager
    
    
    public __gc class DicomSeriesManager
    
    
    public ref class DicomSeriesManager
    
    
    Пример

    Вот C#/VB.NET код, который демонстрирует, как вывести информацию о DICOM-сериях для указанных DICOM-файлов.

    
    ''' <summary>
    ''' Prints information about DICOM series to the console.
    ''' </summary>
    ''' <param name="dir">The directory path.</param>
    Public Shared Sub PrintDicomSeriesInformation(dir As String)
        ' create the DICOM series manager
        Dim manager As New Vintasoft.Imaging.Metadata.DicomSeriesManager()
        manager.Images = New Vintasoft.Imaging.ImageCollection()
    
        ' get names of DICOM files in file directory
        Dim dicomFilePaths As String() = System.IO.Directory.GetFiles(dir, "*.dcm", System.IO.SearchOption.AllDirectories)
        ' add DICOM files to the DICOM series manager
        For Each dicomFilePath As String In dicomFilePaths
            manager.Images.Add(dicomFilePath)
        Next
    
    
        ' get patient identifiers from DICOM files
        Dim patientIdentifiers As System.Collections.Generic.IList(Of String) = manager.GetPatientIdentifiers()
        ' for each patient identifier
        For Each patientIdentifier As String In patientIdentifiers
            ' get patient metadata
            Dim patientMetadata As Vintasoft.Imaging.Metadata.DicomPageMetadata = manager.GetPatientMetadata(patientIdentifier)
    
            ' print patient information
            System.Console.WriteLine("Patient Name: {0}", GetValueAsString(patientMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.PatientName))
            System.Console.WriteLine("Patient Birth Date: {0}", GetValueAsString(patientMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.PatientBirthDate))
    
    
            ' get studies identifiers for patient
            Dim studyIdentifiers As System.Collections.Generic.IList(Of String) = manager.GetStudyIdentifiers(patientIdentifier)
            ' print the studies count for patient
            System.Console.WriteLine("Study Count: {0}", studyIdentifiers.Count)
            ' for each study identifier
            For Each studyIdentifier As String In studyIdentifiers
                ' get the study metadata
                Dim studyMetadata As Vintasoft.Imaging.Metadata.DicomPageMetadata = manager.GetStudyMetadata(studyIdentifier)
    
                ' print study information
                System.Console.WriteLine(vbTab & "Study Date: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyDate))
                System.Console.WriteLine(vbTab & "Study Time: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyTime))
                System.Console.WriteLine(vbTab & "Study Description: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyDescription))
                System.Console.WriteLine(vbTab & "Modality: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.Modality))
    
    
                ' get series identifiers for the study
                Dim seriesIdentifiers As System.Collections.Generic.IList(Of String) = manager.GetSeriesIdentifiers(studyIdentifier)
                ' print the series count for the study
                System.Console.WriteLine(vbTab & "Series Count: {0}", seriesIdentifiers.Count)
                ' for each series identifier
                For Each seriesIdentifier As String In seriesIdentifiers
                    ' get series metadata
                    Dim seriesMetadata As Vintasoft.Imaging.Metadata.DicomPageMetadata = manager.GetSeriesMetadata(seriesIdentifier)
    
                    ' print series information
                    System.Console.WriteLine(vbTab & vbTab & "Series Description: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesDescription))
                    System.Console.WriteLine(vbTab & vbTab & "Series Date: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesDate))
                    System.Console.WriteLine(vbTab & vbTab & "Series Time: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesTime))
    
                    ' get images for the series
                    Dim images As Vintasoft.Imaging.VintasoftImage() = manager.GetSeriesImages(seriesIdentifier)
    
                    ' print the image count in the series
                    System.Console.WriteLine(vbTab & vbTab & vbTab & "Image Count: {0}", images.Length)
                Next
            Next
        Next
    End Sub
    
    ''' <summary>
    ''' Returns the DICOM metadata value as a string.
    ''' </summary>
    ''' <param name="pageMetadata">The DICOM page metadata.</param>
    ''' <param name="id">The DICOM data element identifier.</param>
    ''' <returns>
    ''' The string with DICOM metadata value.
    ''' </returns>
    Private Shared Function GetValueAsString(pageMetadata As Vintasoft.Imaging.Metadata.DicomPageMetadata, id As Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId) As String
        ' get metadata node
        Dim node As Vintasoft.Imaging.Metadata.DicomDataElementMetadata = pageMetadata.FindChildNode(id)
    
        ' if metadata node exists
        If node IsNot Nothing AndAlso node.Value IsNot Nothing Then
            If TypeOf node.Value Is Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid Then
                Dim uid As Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid = DirectCast(node.Value, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid)
    
                Return uid.Value
            ElseIf TypeOf node.Value Is Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime Then
                Dim dateTime As Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime = DirectCast(node.Value, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime)
    
                Return dateTime.LocalDateTime.ToString()
            Else
                Return System.Convert.ToString(node.Value)
            End If
        End If
    
        Return Nothing
    End Function
    
    ' This code example produces the following output:
    '
          Patient Name: AGECANONIX
          Patient Birth Date:
          Study Count: 1
                  Study Date: 01.12.2003 0:00:00
                  Study Time: 12:00:00
                  Study Description: Specials^1CoronaryCTA_with_spiral _CTA_pre
                  Modality: CT
                  Series Count: 1
                          Series Description: CorCTA w/c  1.0  B20f
                          Series Date: 01.12.2003 0:00:00
                          Series Time: 12:00:00
                                  Image Count: 10
          Patient Name: CEREBRIX
          Patient Birth Date: 01.04.1935 0:00:00
          Study Count: 2
                  Study Date: 20.07.2007 0:00:00
                  Study Time: 08:13:35.9680000
                  Study Description: Neuro^Crane
                  Modality: MR
                  Series Count: 1
                          Series Description: t1_mpr3D_ns_sag_gd
                          Series Date: 20.07.2007 0:00:00
                          Series Time: 08:59:10.3750000
                                  Image Count: 15
                  Study Date: 03.08.2007 0:00:00
                  Study Time: 16:42:32.1090000
                  Study Description: PET^PETCT_CTplusFET_LM_Brain (Adult)
                  Modality: PT
                  Series Count: 1
                          Series Description: dynamic recon 3x10min Volume (Corrected)
                          Series Date: 03.08.2007 0:00:00
                          Series Time: 16:53:56
                                  Image Count: 10
          Patient Name: RATIB^OSMAN
          Patient Birth Date: 25.06.1955 0:00:00
          Study Count: 1
                  Study Date: 30.09.2004 0:00:00
                  Study Time: 11:56:15.5930000
                  Study Description: Cardiac^1CTA_CORONARY_ARTERIES_lowHR_TESTBOLUS (Adult)
                  Modality: CT
                  Series Count: 1
                          Series Description: CorCTALow  2.0  B25f 0-95%
                          Series Date: 30.09.2004 0:00:00
                          Series Time: 14:28:38.4680000
                                  Image Count: 25 
          
    
    
    
    
    /// <summary>
    /// Prints information about DICOM series to the console.
    /// </summary>
    /// <param name="dir">The directory path.</param>
    public static void PrintDicomSeriesInformation(string dir)
    {
        // create the DICOM series manager
        Vintasoft.Imaging.Metadata.DicomSeriesManager manager = new Vintasoft.Imaging.Metadata.DicomSeriesManager();
        manager.Images = new Vintasoft.Imaging.ImageCollection();
    
        // get names of DICOM files in file directory
        string[] dicomFilePaths = System.IO.Directory.GetFiles(dir, "*.dcm", System.IO.SearchOption.AllDirectories);
        // add DICOM files to the DICOM series manager
        foreach (string dicomFilePath in dicomFilePaths)
            manager.Images.Add(dicomFilePath);
    
    
        // get patient identifiers from DICOM files
        System.Collections.Generic.IList<string> patientIdentifiers = manager.GetPatientIdentifiers();
        // for each patient identifier
        foreach (string patientIdentifier in patientIdentifiers)
        {
            // get patient metadata
            Vintasoft.Imaging.Metadata.DicomPageMetadata patientMetadata = manager.GetPatientMetadata(patientIdentifier);
    
            // print patient information
            System.Console.WriteLine("Patient Name: {0}", GetValueAsString(patientMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.PatientName));
            System.Console.WriteLine("Patient Birth Date: {0}", GetValueAsString(patientMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.PatientBirthDate));
    
    
            // get studies identifiers for patient
            System.Collections.Generic.IList<string> studyIdentifiers = manager.GetStudyIdentifiers(patientIdentifier);
            // print the studies count for patient
            System.Console.WriteLine("Study Count: {0}", studyIdentifiers.Count);
            // for each study identifier
            foreach (string studyIdentifier in studyIdentifiers)
            {
                // get the study metadata
                Vintasoft.Imaging.Metadata.DicomPageMetadata studyMetadata = manager.GetStudyMetadata(studyIdentifier);
    
                // print study information
                System.Console.WriteLine("\tStudy Date: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyDate));
                System.Console.WriteLine("\tStudy Time: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyTime));
                System.Console.WriteLine("\tStudy Description: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.StudyDescription));
                System.Console.WriteLine("\tModality: {0}", GetValueAsString(studyMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.Modality));
    
    
                // get series identifiers for the study
                System.Collections.Generic.IList<string> seriesIdentifiers = manager.GetSeriesIdentifiers(studyIdentifier);
                // print the series count for the study
                System.Console.WriteLine("\tSeries Count: {0}", seriesIdentifiers.Count);
                // for each series identifier
                foreach (string seriesIdentifier in seriesIdentifiers)
                {
                    // get series metadata
                    Vintasoft.Imaging.Metadata.DicomPageMetadata seriesMetadata = manager.GetSeriesMetadata(seriesIdentifier);
    
                    // print series information
                    System.Console.WriteLine("\t\tSeries Description: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesDescription));
                    System.Console.WriteLine("\t\tSeries Date: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesDate));
                    System.Console.WriteLine("\t\tSeries Time: {0}", GetValueAsString(seriesMetadata, Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId.SeriesTime));
    
                    // get images for the series
                    Vintasoft.Imaging.VintasoftImage[] images = manager.GetSeriesImages(seriesIdentifier);
    
                    // print the image count in the series
                    System.Console.WriteLine("\t\t\tImage Count: {0}", images.Length);
                }
            }
        }
    }
    
    /// <summary>
    /// Returns the DICOM metadata value as a string.
    /// </summary>
    /// <param name="pageMetadata">The DICOM page metadata.</param>
    /// <param name="id">The DICOM data element identifier.</param>
    /// <returns>
    /// The string with DICOM metadata value.
    /// </returns>
    private static string GetValueAsString(
        Vintasoft.Imaging.Metadata.DicomPageMetadata pageMetadata,
        Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDataElementId id)
    {
        // get metadata node
        Vintasoft.Imaging.Metadata.DicomDataElementMetadata node = pageMetadata.FindChildNode(id);
    
        // if metadata node exists
        if (node != null && node.Value != null)
        {
            if (node.Value is Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid)
            {
                Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid uid = (Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomUid)node.Value;
    
                return uid.Value;
            }
            else if (node.Value is Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime)
            {
                Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime dateTime = (Vintasoft.Imaging.Codecs.ImageFiles.Dicom.DicomDateTime)node.Value;
    
                return dateTime.LocalDateTime.ToString();
            }
            else
            {
                return System.Convert.ToString(node.Value);
            }
        }
    
        return null;
    }
    
    /* This code example produces the following output:
    
    Patient Name: AGECANONIX
    Patient Birth Date:
    Study Count: 1
            Study Date: 01.12.2003 0:00:00
            Study Time: 12:00:00
            Study Description: Specials^1CoronaryCTA_with_spiral _CTA_pre
            Modality: CT
            Series Count: 1
                    Series Description: CorCTA w/c  1.0  B20f
                    Series Date: 01.12.2003 0:00:00
                    Series Time: 12:00:00
                            Image Count: 10
    Patient Name: CEREBRIX
    Patient Birth Date: 01.04.1935 0:00:00
    Study Count: 2
            Study Date: 20.07.2007 0:00:00
            Study Time: 08:13:35.9680000
            Study Description: Neuro^Crane
            Modality: MR
            Series Count: 1
                    Series Description: t1_mpr3D_ns_sag_gd
                    Series Date: 20.07.2007 0:00:00
                    Series Time: 08:59:10.3750000
                            Image Count: 15
            Study Date: 03.08.2007 0:00:00
            Study Time: 16:42:32.1090000
            Study Description: PET^PETCT_CTplusFET_LM_Brain (Adult)
            Modality: PT
            Series Count: 1
                    Series Description: dynamic recon 3x10min Volume (Corrected)
                    Series Date: 03.08.2007 0:00:00
                    Series Time: 16:53:56
                            Image Count: 10
    Patient Name: RATIB^OSMAN
    Patient Birth Date: 25.06.1955 0:00:00
    Study Count: 1
            Study Date: 30.09.2004 0:00:00
            Study Time: 11:56:15.5930000
            Study Description: Cardiac^1CTA_CORONARY_ARTERIES_lowHR_TESTBOLUS (Adult)
            Modality: CT
            Series Count: 1
                    Series Description: CorCTALow  2.0  B25f 0-95%
                    Series Date: 30.09.2004 0:00:00
                    Series Time: 14:28:38.4680000
                            Image Count: 25
    */
    
    

    Иерархия наследования

    System.Object
       Vintasoft.Imaging.Metadata.DicomSeriesManager

    Требования

    Целевые платформы: .NET 8; .NET 7; .NET 6; .NET Framework 4.8, 4.7, 4.6, 4.5, 4.0, 3.5

    Смотрите также