DICOM: Просмотр многоплоскостной реконструкции DICOM в WPF
В этом разделе
1. Параметры визуализации среза DICOM MPR
Класс
WpfMprSliceVisualizer позволяет определить параметры визуализации среза DICOM MPR в просмотрщике изображений. Класс позволяет определять цвета и маркерную точку среза.
2. Визуализация и преобразование среза DICOM MPR в WPF просмотрщике изображений
SDK предоставляет 2 визуальных инструмента для визуализации и преобразования среза DICOM MPR в WPF просмотрщике изображений.
Визуальный инструмент
WpfMprImageTool предназначен для визуализации и преобразования среза DICOM MPR в WPF просмотрщике изображений. Поддерживаются следующие операции:
- Просмотр среза DICOM MPR в просмотрщике изображений.
- Перемещение среза DICOM MPR вдоль горизонтальной, вертикальной и перпендикулярной оси в просмотрщике изображений.
- Поворот среза DICOM MPR в 2D и 3D-пространстве в просмотрщике изображений.
По умолчанию, этот визуальный инструмент использует левую кнопку мыши для просмотра срезов 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:
WpfDicomMprTool - составной визуальный инструмент, сочетающий в себе функциональность следующих визуальных инструментов:
- WpfMprImageTool - используется для визуализации и преобразования срезов DICOM MPR в WPF просмотрщике изображений.
- WpfDicomViewerTool - используется для масштабирования срезов DICOM MPR в WPF просмотрщике изображений и для применения VOI LUT к срезу DICOM MPR.
- WpfImageMeasureTool - используется для измерения объектов на срезе DICOM MPR в просмотрщике изображений.
- 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: