VintaSoft Imaging .NET SDK 12.5: Документация для .NET разработчика
В этом разделе
    DICOM: Просмотр многоплоскостной реконструкции DICOM в WPF
    В этом разделе

    1. Параметры визуализации среза DICOM MPR

    Класс WpfMprSliceVisualizer позволяет определить параметры визуализации среза DICOM MPR в просмотрщике изображений. Класс позволяет определять цвета и маркерную точку среза.



    2. Визуализация и преобразование среза DICOM MPR в WPF просмотрщике изображений

    SDK предоставляет 2 визуальных инструмента для визуализации и преобразования среза DICOM MPR в WPF просмотрщике изображений.

    2.1. Визуальный инструмент WpfMprImageTool

    Визуальный инструмент WpfMprImageTool предназначен для визуализации и преобразования среза DICOM MPR в WPF просмотрщике изображений. Поддерживаются следующие операции:
    По умолчанию, этот визуальный инструмент использует левую кнопку мыши для просмотра срезов DICOM MPR (перемещение среза DICOM MPR вдоль перпендикулярной оси) и правую кнопку мыши для панорамирования среза DICOM MPR (перемещение среза DICOM MPR вдоль горизонтальной и вертикальной оси).
    Метод WpfMprImageTool.GetInteractionMode позволяет определить, какая операция назначена указанной кнопке мыши. Метод WpfMprImageTool.SetInteractionMode позволяет назначить операцию кнопке мыши.

    Свойства визуального инструмента позволяют определить качество рендеринга срезов MPR, получить сфокусированный срез MPR и т.д.

    Кроме того, визуальный инструмент WpfMprImageTool позволяет создавать новый срез DICOM MPR в просмотрщике изображений. Построение среза DICOM MPR можно начать, вызвав метод WpfMprImageTool.AddAndBuildSlice.

    Вот C#/VB.NET код, который демонстрирует, как отобразить осевой срез DICOM MPR в просмотрщике изображений.
    /// <summary>
    /// Displays the axial slice in viewer.
    /// </summary>
    /// <param name="viewer">The image viewer.</param>
    /// <param name="mprImage">The MPR image.</param>
    public static void DisplayAxialSliceInViewer(
        Vintasoft.Imaging.Wpf.UI.WpfImageViewer viewer,
        Vintasoft.Imaging.Dicom.Mpr.MprImage mprImage)
    {            
        // create the MPR visualization controller
       Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController controller =
            new Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(mprImage, viewer);
    
        // create the axial slice
        Vintasoft.Imaging.Dicom.Mpr.MprPlanarSlice axialSlice =
            mprImage.CreateAxialSlice(mprImage.YLength / 2.0);
    
        // add slice to the MPR visualization controller
        controller.AddSliceVisualization(axialSlice, System.Windows.Media.Colors.Yellow);
    
        // specify that the slice must be shown in viewer
        controller.ShowSliceInViewer(viewer, axialSlice);
    }
    
    ''' <summary>
    ''' Displays the axial slice in viewer.
    ''' </summary>
    ''' <param name="viewer">The image viewer.</param>
    ''' <param name="mprImage">The MPR image.</param>
    Public Shared Sub DisplayAxialSliceInViewer(viewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer, mprImage As Vintasoft.Imaging.Dicom.Mpr.MprImage)
        ' create the MPR visualization controller
        Dim controller As New Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(mprImage, viewer)
    
        ' create the axial slice
        Dim axialSlice As Vintasoft.Imaging.Dicom.Mpr.MprPlanarSlice = mprImage.CreateAxialSlice(mprImage.YLength / 2.0)
    
        ' add slice to the MPR visualization controller
        controller.AddSliceVisualization(axialSlice, System.Windows.Media.Colors.Yellow)
    
        ' specify that the slice must be shown in viewer
        controller.ShowSliceInViewer(viewer, axialSlice)
    End Sub
    


    Вот скриншот просмотрщика изображений, на которой отображается корональный срез MPR DICOM:



    2.2. Визуальный инструмент WpfDicomMprTool

    WpfDicomMprTool - составной визуальный инструмент, сочетающий в себе функциональность следующих визуальных инструментов:
    1. WpfMprImageTool - используется для визуализации и преобразования срезов DICOM MPR в WPF просмотрщике изображений.
    2. WpfDicomViewerTool - используется для масштабирования срезов DICOM MPR в WPF просмотрщике изображений и для применения VOI LUT к срезу DICOM MPR.
    3. WpfImageMeasureTool - используется для измерения объектов на срезе DICOM MPR в просмотрщике изображений.
    4. WpfTextOverlayTool - используется для отображения текста (метаданных) на срезе DICOM MPR в просмотрщике изображений.

    Вот C#/VB.NET код, который демонстрирует, как отобразить корональный срез MPR DICOM с метаданными в просмотрщике изображений.
    /// <summary>
    /// Displays the coronal slice with metadata in viewer.
    /// </summary>
    /// <param name="viewer">The image viewer.</param>
    /// <param name="mprImage">The MPR image.</param>
    public static void DisplayCoronalSliceWithMetadataInViewer(
        Vintasoft.Imaging.Wpf.UI.WpfImageViewer viewer,
        Vintasoft.Imaging.Dicom.Mpr.MprImage mprImage)
    {
        // create the MPR visualization controller
        Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController controller =
            new Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(mprImage, viewer);
    
        // create the coronal slice
        Vintasoft.Imaging.Dicom.Mpr.MprPlanarSlice coronalSlice =
            mprImage.CreateCoronalSlice(mprImage.YLength / 2.0);
    
        // add slice to the MPR visualization controller
        controller.AddSliceVisualization(coronalSlice, System.Windows.Media.Colors.Yellow);
    
        // specify that the slice must be shown in viewer
        controller.ShowSliceInViewer(viewer, coronalSlice);
    }
    
    ''' <summary>
    ''' Displays the coronal slice with metadata in viewer.
    ''' </summary>
    ''' <param name="viewer">The image viewer.</param>
    ''' <param name="mprImage">The MPR image.</param>
    Public Shared Sub DisplayCoronalSliceWithMetadataInViewer(viewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer, mprImage As Vintasoft.Imaging.Dicom.Mpr.MprImage)
        ' create the MPR visualization controller
        Dim controller As New Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(mprImage, viewer)
    
        ' create the coronal slice
        Dim coronalSlice As Vintasoft.Imaging.Dicom.Mpr.MprPlanarSlice = mprImage.CreateCoronalSlice(mprImage.YLength / 2.0)
    
        ' add slice to the MPR visualization controller
        controller.AddSliceVisualization(coronalSlice, System.Windows.Media.Colors.Yellow)
    
        ' specify that the slice must be shown in viewer
        controller.ShowSliceInViewer(viewer, coronalSlice)
    End Sub
    


    Вот снимок экрана просмотрщика изображений, на котором отображается корональный срез MPR DICOM с метаданными:



    3. Визуализация и преобразование нескольких срезов DICOM MPR в нескольких WPF просмотрщиках изображений

    Класс WpfMprVisualizationController позволяет управлять визуализацией нескольких срезов DICOM MPR в нескольких WinForms просмотрщиках изображений. Например, можно использовать 3 просмотрщика изображений для одновременной визуализации сагиттальных, корональных и аксиальных срезов исследуемого объекта. Или, например,можно использовать 2 просмотрщика изображений для одновременной визуализации сагиттального среза и криволинейного среза, построенного на основе сагиттального среза.

    Для отображения N срезов в N просмотрщиках изображений необходимо выполнить следующие шаги:
    Вот C#/VB.NET код, который демонстрирует, как отобразить корональные, сагиттальные и аксиальные плоские срезы DICOM MPR в трех просмотрщиках изображений.
    /// <summary>
    /// Displays the coronal, sagittal and axial DICOM MPR slices in 3 image viewers.
    /// </summary>
    /// <param name="sagittalViewer">The sagittal viewer.</param>
    /// <param name="coronalViewer">The coronal viewer.</param>
    /// <param name="axialViewer">The axial viewer.</param>
    /// <param name="mprImage">The MPR image.</param>
    public static void DisplayThreePlanarSlicesInThreeViewers(
        Vintasoft.Imaging.Wpf.UI.WpfImageViewer sagittalViewer,
        Vintasoft.Imaging.Wpf.UI.WpfImageViewer coronalViewer,
        Vintasoft.Imaging.Wpf.UI.WpfImageViewer axialViewer,
        Vintasoft.Imaging.Dicom.Mpr.MprImage mprImage)
    {
        // create the MPR visualization controller
        Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController controller =
            new Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(
            mprImage, sagittalViewer, coronalViewer, axialViewer);
    
        // add slices to the MPR visualization controller
        Vintasoft.Imaging.Dicom.Mpr.MprSlice[] slices = controller.AddThreeSlicesVisualization(
            mprImage.XLength / 2.0, System.Windows.Media.Colors.LightBlue,
            mprImage.YLength / 2.0, System.Windows.Media.Colors.Coral,
            mprImage.ZLength / 2.0, System.Windows.Media.Colors.Yellow);
    
        // specify that the first slice must be shown in sagittalViewer
        controller.ShowSliceInViewer(sagittalViewer, slices[0]);
        // specify that the second slice must be shown in coronalViewer
        controller.ShowSliceInViewer(coronalViewer, slices[1]);
        // specify that the third slice must be shown in axialViewer
        controller.ShowSliceInViewer(axialViewer, slices[2]);
    }
    
    ''' <summary>
    ''' Displays the coronal, sagittal and axial DICOM MPR slices in 3 image viewers.
    ''' </summary>
    ''' <param name="sagittalViewer">The sagittal viewer.</param>
    ''' <param name="coronalViewer">The coronal viewer.</param>
    ''' <param name="axialViewer">The axial viewer.</param>
    ''' <param name="mprImage">The MPR image.</param>
    Public Shared Sub DisplayThreePlanarSlicesInThreeViewers(sagittalViewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer, coronalViewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer, axialViewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer, mprImage As Vintasoft.Imaging.Dicom.Mpr.MprImage)
        ' create the MPR visualization controller
        Dim controller As New Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(mprImage, sagittalViewer, coronalViewer, axialViewer)
    
        ' add slices to the MPR visualization controller
        Dim slices As Vintasoft.Imaging.Dicom.Mpr.MprSlice() = controller.AddThreeSlicesVisualization(mprImage.XLength / 2.0, System.Windows.Media.Colors.LightBlue, mprImage.YLength / 2.0, System.Windows.Media.Colors.Coral, mprImage.ZLength / 2.0, System.Windows.Media.Colors.Yellow)
    
        ' specify that the first slice must be shown in sagittalViewer
        controller.ShowSliceInViewer(sagittalViewer, slices(0))
        ' specify that the second slice must be shown in coronalViewer
        controller.ShowSliceInViewer(coronalViewer, slices(1))
        ' specify that the third slice must be shown in axialViewer
        controller.ShowSliceInViewer(axialViewer, slices(2))
    End Sub
    


    Вот снимок экрана трех просмотрщиков изображений, которые отображают фронтальные, сагиттальные и аксиальные плоские срезы DICOM MPR:



    Вот C#/VB.NET код, который демонстрирует, как отобразить осевой срез DICOM MPR в первом просмотрщике изображений, а также построить и отобразить криволинейный срез DICOM MPR, который основан на аксиальном срезе, во втором просмотрщике изображений.
    /// <summary>
    /// Displays an axial DICOM MPR slice in the first image viewer and
    /// builds and displays the curvlinear DICOM MPR slice, which is based on axial slice, in the second image viewer.
    /// </summary>
    /// <param name="axialViewer">The viewer with axial slice.</param>
    /// <param name="curvlinearViewer">The viewer with curvlinear slice.</param>
    /// <param name="mprImage">The MPR image.</param>
    public static void DisplayAxialAndCurvilinearSlicesInTwoViewers(
        Vintasoft.Imaging.Wpf.UI.WpfImageViewer axialViewer,
        Vintasoft.Imaging.Wpf.UI.WpfImageViewer curvlinearViewer,
        Vintasoft.Imaging.Dicom.Mpr.MprImage mprImage)
    {
        // create the MPR visualization controller
        Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController controller =
            new Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(
            mprImage, axialViewer, curvlinearViewer);
    
    
        // create the axial slice
        Vintasoft.Imaging.Dicom.Mpr.MprPlanarSlice axialSlice = mprImage.CreateAxialSlice(mprImage.ZLength / 2.0);
        // add axial slice to the MPR visualization controller
        controller.AddSliceVisualization(axialSlice, System.Windows.Media.Colors.Yellow);
    
        // show the axial slice in axialViewer
        controller.ShowSliceInViewer(axialViewer, axialSlice);
    
    
        // create the curvlinear slice
        Vintasoft.Imaging.Dicom.Mpr.MprCurvilinearSlice curvlinearSlice = mprImage.CreateCurvilinearSlice(
            axialSlice, null);
        // set parameters of curvilinear slice
        curvlinearSlice.RenderingMode = Vintasoft.Imaging.Dicom.Mpr.MprSliceRenderingMode.Avg;
        curvlinearSlice.Thickness = 10;
        Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprSliceVisualizer curvlinearSliceVisualizer =
            new Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprSliceVisualizer(curvlinearSlice, System.Windows.Media.Colors.Blue);
    
        // get the DICOM MPR tool, which will be used for building the curvilinear slice
        Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.VisualTools.WpfDicomMprTool dicomMprTool =
             controller.GetDicomMprToolAssociatedWithImageViewer(axialViewer);
        // add the curvilinear slice to the visual tool and start building of slice
        dicomMprTool.MprImageTool.AddAndBuildSlice(curvlinearSliceVisualizer);
    
        // show the curvlinear slice in curvlinearViewer
        controller.ShowSliceInViewer(curvlinearViewer, curvlinearSlice);
    }
    
    ''' <summary>
    ''' Displays an axial DICOM MPR slice in the first image viewer and
    ''' builds and displays the curvlinear DICOM MPR slice, which is based on axial slice, in the second image viewer.
    ''' </summary>
    ''' <param name="axialViewer">The viewer with axial slice.</param>
    ''' <param name="curvlinearViewer">The viewer with curvlinear slice.</param>
    ''' <param name="mprImage">The MPR image.</param>
    Public Shared Sub DisplayAxialAndCurvilinearSlicesInTwoViewers(axialViewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer, curvlinearViewer As Vintasoft.Imaging.Wpf.UI.WpfImageViewer, mprImage As Vintasoft.Imaging.Dicom.Mpr.MprImage)
        ' create the MPR visualization controller
        Dim controller As New Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprVisualizationController(mprImage, axialViewer, curvlinearViewer)
    
    
        ' create the axial slice
        Dim axialSlice As Vintasoft.Imaging.Dicom.Mpr.MprPlanarSlice = mprImage.CreateAxialSlice(mprImage.ZLength / 2.0)
        ' add axial slice to the MPR visualization controller
        controller.AddSliceVisualization(axialSlice, System.Windows.Media.Colors.Yellow)
    
        ' show the axial slice in axialViewer
        controller.ShowSliceInViewer(axialViewer, axialSlice)
    
    
        ' create the curvlinear slice
        Dim curvlinearSlice As Vintasoft.Imaging.Dicom.Mpr.MprCurvilinearSlice = mprImage.CreateCurvilinearSlice(axialSlice, Nothing)
        ' set parameters of curvilinear slice
        curvlinearSlice.RenderingMode = Vintasoft.Imaging.Dicom.Mpr.MprSliceRenderingMode.Avg
        curvlinearSlice.Thickness = 10
        Dim curvlinearSliceVisualizer As New Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.WpfMprSliceVisualizer(curvlinearSlice, System.Windows.Media.Colors.Blue)
    
        ' get the DICOM MPR tool, which will be used for building the curvilinear slice
        Dim dicomMprTool As Vintasoft.Imaging.Dicom.Mpr.Wpf.UI.VisualTools.WpfDicomMprTool = controller.GetDicomMprToolAssociatedWithImageViewer(axialViewer)
        ' add the curvilinear slice to the visual tool and start building of slice
        dicomMprTool.MprImageTool.AddAndBuildSlice(curvlinearSliceVisualizer)
    
        ' show the curvlinear slice in curvlinearViewer
        controller.ShowSliceInViewer(curvlinearViewer, curvlinearSlice)
    End Sub
    


    Вот снимок экрана двух просмотрщиков изображений, которые отображают осевой срез DICOM MPR с криволинейным срезом DICOM MPR: