diff --git a/mevislab.github.io/content/examples/image_processing/example6/DICOMRT.mlab b/mevislab.github.io/content/examples/image_processing/example6/DICOMRT.mlab
index 88b0b92b4..bc33c36e7 100644
--- a/mevislab.github.io/content/examples/image_processing/example6/DICOMRT.mlab
+++ b/mevislab.github.io/content/examples/image_processing/example6/DICOMRT.mlab
@@ -1,29 +1,29 @@
// MDL v1 utf8
-mevislabVersion = 4.1.1.2
-network {
+mevislabVersion = 4.1.70.3239
+network {
watchlist = ""
}
module DicomImport {
- internal {
- frame = "545 613 144 56"
+ internal {
+ frame = "273 677 144 56"
moduleGroupName = ""
showNetworkPanel = true
- windows {
+ windows {
window _default {
- geometry = "2855 261 722 632"
- relativePosition = "0.1750 -0.2726"
+ geometry = "404 206 722 632"
+ relativePosition = "-0.1016 -0.3203"
sizeHint = "722 632"
wasOpen = no
}
}
}
- fields {
+ fields {
instanceName = DicomImport
- source = C:/Users/malfalahat/Downloads/DICOM_from_Varex
+ source = C:/tmp/DICOM
files = ""
inputMode = Directory
enableRecursiveSearch = TRUE
- selectedItem = 8
+ selectedItem = 7
logLevel = Warning
useSortPartConfigFile = FALSE
sortPartConfigFile = ""
@@ -105,24 +105,24 @@ module DicomImport {
}
}
module View2D {
- internal {
- frame = "589 -11 120 56"
+ internal {
+ frame = "285 -91 120 56"
moduleGroupName = ""
- windows {
+ windows {
window _default {
- geometry = "2709 255 400 399"
- relativePosition = "0.0151 -0.2778"
+ geometry = "243 471 400 400"
+ relativePosition = "-0.2693 -0.0903"
sizeHint = "400 400"
wasOpen = yes
}
}
}
- fields {
+ fields {
instanceName = View2D
inventorInputOn = TRUE
inventorOutputOn = FALSE
view2DExtensionsOn = TRUE
- startSlice = 89
+ startSlice = 173
numSlices = 1
numXSlices = 1
sliceStep = 1
@@ -140,15 +140,15 @@ module View2D {
snapToCenter = TRUE
zoomMode = VIEW2D_AUTO_ZOOM
unzoomOnImageChange = FALSE
- sliceZoom = 1
- sliceZoomSynced = 1
+ sliceZoom = 1.8773158
+ sliceZoomSynced = 1.8773158
baseColor = "1 1 1"
margin = "2 2"
- sliceOrigin = "0 0"
+ sliceOrigin = "119.63508605957 119.63508605957"
useShaders = TRUE
useManagedInteraction = FALSE
- lutCenter = 397284480
- lutWidth = 794568768
+ lutCenter = 3357.72436523438
+ lutWidth = 3276.74926757813
annotationOn = TRUE
annotationMode = ANNO_MODE_AUTO
annotationSizeMode = ANNO_SHOW_DETAILED
@@ -167,31 +167,31 @@ module View2D {
}
}
module DicomImportExtraOutput {
- internal {
- frame = "729 389 208 72"
+ internal {
+ frame = "441 517 208 72"
moduleGroupName = ""
showNetworkPanel = true
- windows {
- window _default {
- geometry = "2539 413 399 35"
- relativePosition = "-0.0734 -0.1406"
- sizeHint = "397 35"
- wasOpen = no
- }
- }
}
- fields {
+ fields {
instanceName = DicomImportExtraOutput
selectedItem = 6
}
}
module ExtractRTStruct {
- internal {
- frame = "757 229 152 56"
+ internal {
+ frame = "485 397 152 56"
moduleGroupName = ""
showNetworkPanel = true
+ windows {
+ window _default {
+ geometry = "788 555 342 150"
+ relativePosition = "-0.0005 -0.0174"
+ sizeHint = "342 150"
+ wasOpen = no
+ }
+ }
}
- fields {
+ fields {
instanceName = ExtractRTStruct
maxPointDistance = 0
levelPlanarCSOs = TRUE
@@ -199,19 +199,11 @@ module ExtractRTStruct {
}
}
module SoView2DCSOExtensibleEditor {
- internal {
- frame = "765 109 200 56"
+ internal {
+ frame = "461 277 200 56"
moduleGroupName = ""
- windows {
- window _default {
- geometry = "2683 443 392 375"
- relativePosition = "-0.0005 -0.1146"
- sizeHint = "392 375"
- wasOpen = no
- }
- }
}
- fields {
+ fields {
instanceName = SoView2DCSOExtensibleEditor
interactionProviderID = ""
drawingOn = TRUE
@@ -250,19 +242,19 @@ module SoView2DCSOExtensibleEditor {
}
}
module CSOLabelRenderer {
- internal {
- frame = "953 229 144 56"
+ internal {
+ frame = "697 405 144 56"
moduleGroupName = ""
- windows {
+ windows {
window _default {
- geometry = "2525 218 453 584"
- relativePosition = "-0.0667 -0.3099"
+ geometry = "204 238 453 584"
+ relativePosition = "-0.2755 -0.2925"
sizeHint = "453 584"
wasOpen = no
}
}
}
- fields {
+ fields {
instanceName = CSOLabelRenderer
extensionId = labelRenderer
allowModification = TRUE
@@ -270,13 +262,11 @@ module CSOLabelRenderer {
shouldDrawLabelBorderForSelectedCSO = TRUE
labelBorderMarginX = 2
labelBorderMarginY = 2
- currentCSOId = 4501
- labelName = "name "
+ currentCSOId = 790
+ labelName = ""
labelCaption = ""
- labelString = PTVRing
- labelCode = "labelString = cso.getId()
-labelName = 'name ' + cso.getLabel()
-labelString = cso.getGroupAt(0).getLabel()
+ labelString = Lips
+ labelCode = "labelString = cso.getGroupAt(0).getLabel()
deviceOffsetX = 0
deviceOffsetY = 0"
shouldRenderLabelName = TRUE
@@ -316,12 +306,34 @@ deviceOffsetY = 0"
shouldShowLabelStringOfOutputInfoLabel = TRUE
}
}
+module CSOLabelPlacementGlobal {
+ internal {
+ frame = "669 525 184 56"
+ moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "819 555 310 151"
+ relativePosition = "0.0073 -0.0174"
+ sizeHint = "280 151"
+ wasOpen = no
+ }
+ }
+ }
+ fields {
+ instanceName = CSOLabelPlacementGlobal
+ deviceOffset = 20
+ additionalSlots = 12
+ hullMode = CONVEX_CSO_HULL
+ startAngle = 0
+ endAngle = 0
+ }
+}
module SoCSO3DRenderer {
- internal {
- frame = "1025 93 144 56"
+ internal {
+ frame = "713 261 144 56"
moduleGroupName = ""
}
- fields {
+ fields {
instanceName = SoCSO3DRenderer
interactionProviderID = ""
autoApply = TRUE
@@ -344,19 +356,19 @@ module SoCSO3DRenderer {
}
}
module SoExaminerViewer {
- internal {
- frame = "1029 -27 136 56"
+ internal {
+ frame = "717 141 136 56"
moduleGroupName = ""
- windows {
+ windows {
window _viewer {
- geometry = "2014 228 400 400"
- relativePosition = "-0.3469 -0.3012"
+ geometry = "685 271 400 400"
+ relativePosition = "-0.0391 -0.2639"
sizeHint = "400 400"
wasOpen = no
}
}
}
- fields {
+ fields {
instanceName = SoExaminerViewer
renderCaching = AUTO
boundingBoxCaching = AUTO
@@ -404,10 +416,10 @@ module SoExaminerViewer {
stereoViewing = FALSE
stereoOffset = 3
height = 0.78539819
- position = "-584.030151367188 -543.745544433594 -132.615020751953"
- orientation = "0.877203702926636 -0.347087979316711 -0.331728011369705 1.80854225158691"
- nearDistance = 501.30063
- farDistance = 1174.1635
+ position = "592.274658203125 -501.426330566406 172.853942871094"
+ orientation = "0.842681884765625 0.285796403884888 0.456297665834427 1.5371880531311"
+ nearDistance = 465.04492
+ farDistance = 1210.4917
focalDistance = 837.39618
forceRedrawOnInteraction = FALSE
button1events = TO_VIEWER
@@ -427,39 +439,31 @@ module SoExaminerViewer {
}
}
module DicomImportExtraOutput {
- internal {
- frame = "197 501 216 72"
+ internal {
+ frame = "-67 509 216 72"
moduleGroupName = ""
showNetworkPanel = true
- windows {
- window _default {
- geometry = "2600 689 397 35"
- relativePosition = "-0.0422 0.0990"
- sizeHint = "395 35"
- wasOpen = yes
- }
- }
}
- fields {
+ fields {
instanceName = DicomImportExtraOutput1
selectedItem = 8
}
}
module MinMaxScan {
- internal {
- frame = "189 285 168 72"
+ internal {
+ frame = "-51 373 168 72"
moduleGroupName = ""
showNetworkPanel = true
- windows {
+ windows {
window _default {
- geometry = "2655 473 472 314"
+ geometry = "735 473 472 314"
relativePosition = "0.0057 -0.0885"
sizeHint = "449 314"
wasOpen = no
}
}
}
- fields {
+ fields {
instanceName = MinMaxScan
updateMode = AutoUpdate
typeSelect = "Proposed Data Type"
@@ -467,28 +471,28 @@ module MinMaxScan {
}
}
module Histogram {
- internal {
- frame = "225 173 128 56"
+ internal {
+ frame = "-27 253 120 56"
moduleGroupName = ""
showNetworkPanel = true
- windows {
+ windows {
window _default {
- geometry = "2675 448 409 364"
+ geometry = "755 448 409 364"
relativePosition = "0.0000 -0.1102"
sizeHint = "409 364"
wasOpen = no
}
}
}
- fields {
- instanceName = Histogram1
+ fields {
+ instanceName = Histogram
useMask = TRUE
xRange = "Image Min/Max"
maskMode = Weights
curveType = Line
curveStyle = 0
curveTitle = ""
- updateMode = Off
+ updateMode = AutoUpdate
useStepFunction = FALSE
useZeroAsBinCenter = TRUE
useBackgroundValue = FALSE
@@ -497,13 +501,64 @@ module Histogram {
maxBinCount = 25000000
}
}
+module SoLUTEditor {
+ internal {
+ frame = "-3 133 104 56"
+ moduleGroupName = ""
+ windows {
+ window _default {
+ geometry = "408 303 513 459"
+ relativePosition = "-0.1536 -0.2361"
+ sizeHint = "513 459"
+ wasOpen = no
+ }
+ }
+ }
+ fields {
+ instanceName = SoLUTEditor
+ rangeMin = 0
+ rangeMax = 1092005
+ viewMin = 0
+ viewMax = 1092005
+ window = 1
+ level = 0.5
+ allowNewPoints = TRUE
+ updateLutWhileDragging = TRUE
+ relativeLut = FALSE
+ colorInterpolation = InterpolateRGB
+ colorPoints = "[ 0 0 0 0, 232051.0625 0 0.803921580314636 0.423529416322708, 555102.5625 0.367724865674973 0.876024484634399 0.635511994361877, 914554.1875 0.674509823322296 0.509803950786591 0.815686285495758, 1092005 1 1 1 ]"
+ alphaPoints = "[ 0 0.31288343667984, 232051.0625 0.631901860237122, 555102.5625 0.950920224189758, 914554.1875 1, 1092005 1 ]"
+ alphaFactor = 1
+ newRangeMin = 0
+ newRangeMax = 4095
+ newRangeMode = ClipFormerLUT
+ colorEditorHeight = 24
+ showColorEditor = TRUE
+ showAlphaEditor = TRUE
+ markerRadius = 4
+ selectedMarkerRadius = 6
+ snapMarkerRadius = 10
+ alphaLineWidth = 2
+ backgroundColor = "0.800000011920929 0.800000011920929 0.800000011920929"
+ marginColor = "0.830999970436096 0.815999984741211 0.783999979496002"
+ borderColor = "0 0 0"
+ alphaLineColor = "0 0 0"
+ histogramColor = "0.400000005960464 0.400000005960464 0.400000005960464"
+ drawColoredMarkers = TRUE
+ markerColor = "1 1 1"
+ selectedMarkerColor = "1 0.5 0.5"
+ selectedTriangleSize = 8
+ triangleSize = 6
+ useAntiAliasing = TRUE
+ }
+}
module SoView2DOverlay {
- internal {
- frame = "405 261 168 56"
+ internal {
+ frame = "117 133 168 56"
moduleGroupName = ""
showNetworkPanel = true
}
- fields {
+ fields {
instanceName = SoView2DOverlay
interactionProviderID = ""
drawingOn = TRUE
@@ -545,81 +600,30 @@ module SoView2DOverlay {
areCheckerTilesInverted = FALSE
}
}
-module SoLUTEditor {
- internal {
- frame = "261 85 104 56"
- moduleGroupName = ""
- windows {
- window _default {
- geometry = "2305 745 484 459"
- relativePosition = "-0.1734 0.1476"
- sizeHint = "513 459"
- wasOpen = no
- }
- }
- }
- fields {
- instanceName = SoLUTEditor
- rangeMin = 0
- rangeMax = 1092000
- viewMin = 0
- viewMax = 1092000
- window = 1
- level = 0.5
- allowNewPoints = TRUE
- updateLutWhileDragging = TRUE
- relativeLut = FALSE
- colorInterpolation = InterpolateRGB
- colorPoints = "[ 0 0 0 0, 239707.3125 0 0.666666984558105 0.49803900718689, 566581 0 1 0.49803900718689, 932199 1 0.333332985639572 1, 1092000 1 1 1 ]"
- alphaPoints = "[ 0 0.294479012489319, 239707.3125 0.607361972332001, 566581 0.932515025138855, 932199 1, 1092000 1 ]"
- alphaFactor = 1
- newRangeMin = 0
- newRangeMax = 4095
- newRangeMode = ClipFormerLUT
- colorEditorHeight = 24
- showColorEditor = TRUE
- showAlphaEditor = TRUE
- markerRadius = 4
- selectedMarkerRadius = 6
- snapMarkerRadius = 10
- alphaLineWidth = 2
- backgroundColor = "0.800000011920929 0.800000011920929 0.800000011920929"
- marginColor = "0.830999970436096 0.815999984741211 0.783999979496002"
- borderColor = "0 0 0"
- alphaLineColor = "0 0 0"
- histogramColor = "0.400000005960464 0.400000005960464 0.400000005960464"
- drawColoredMarkers = TRUE
- markerColor = "1 1 1"
- selectedMarkerColor = "1 0.5 0.5"
- selectedTriangleSize = 8
- triangleSize = 6
- useAntiAliasing = TRUE
- }
-}
module SoGroup {
- internal {
- frame = "449 45 80 56"
+ internal {
+ frame = "289 5 96 56"
moduleGroupName = ""
}
- fields {
+ fields {
instanceName = SoGroup
}
}
-connections {
+connections {
View2D.inImage = DicomImport.output0
View2D.inInvPreLUT = SoGroup.self
- View2D.inInvPostLUT = SoView2DCSOExtensibleEditor.self
DicomImportExtraOutput.inImportResult = DicomImport.outImportResult
ExtractRTStruct.inDicom = DicomImportExtraOutput.outDicomTree
SoView2DCSOExtensibleEditor.inCSOList = ExtractRTStruct.outCSOList
SoView2DCSOExtensibleEditor.inExtensions = CSOLabelRenderer.outScene
+ CSOLabelRenderer.inLabelPlacement = CSOLabelPlacementGlobal.outPlacement
SoCSO3DRenderer.inCSOList = ExtractRTStruct.outCSOList
SoExaminerViewer.children = SoCSO3DRenderer.self
DicomImportExtraOutput1.inImportResult = DicomImport.outImportResult
MinMaxScan.input0 = DicomImportExtraOutput1.output0
- Histogram1.input0 = MinMaxScan.output0
+ Histogram.input0 = MinMaxScan.output0
+ SoLUTEditor.inHistogram = Histogram.outputHistogramCurve
SoView2DOverlay.image = DicomImportExtraOutput1.output0
- SoLUTEditor.inHistogram = Histogram1.outputHistogramCurve
- SoGroup.children = "SoLUTEditor.outInventorLUT SoView2DOverlay.self"
+ SoGroup.children = "SoLUTEditor.outInventorLUT SoView2DOverlay.self SoView2DCSOExtensibleEditor.self"
}
networkModel = ""
diff --git a/mevislab.github.io/content/tutorials/image_processing/image_processing6.md b/mevislab.github.io/content/tutorials/image_processing/image_processing6.md
index 6b88b0711..c51091b48 100644
--- a/mevislab.github.io/content/tutorials/image_processing/image_processing6.md
+++ b/mevislab.github.io/content/tutorials/image_processing/image_processing6.md
@@ -16,157 +16,133 @@ menu:
# Example 6: DICOM RT Visualization in MeVisLab – RTSTRUCT and RTDOSE Workflow
## Introduction
-This tutorial explains how to load and visualize DICOM RT data in MeVisLab step by step. You will learn how to:
+This tutorial explains how to load and visualize DICOM RT (Radiotherapy) data in MeVisLab. You will learn how to:
* Load CT and related RTSTRUCT data.
* Visualize RTSTRUCTs as colored CSOs.
-* Visualize RTDOSE as a colored overlay.
* Show labels next to each RTSTRUCT contour.
-We use the `ExtractRTStruct`module for this example.
+* Visualize RTDOSE as a semi-transparent colored overlay.
-**DICOM RT (Radiotherapy)** files are essential in radiotherapy treatment planning. They include:
-* **RTSTRUCT**: Defines contours of tumors and organs.
-* **RTDOSE**: Shows planned 3D dose distribution.
-* **RTPLAN**: Contains treatment plan details like beams and dose settings.
-Together, they ensure accurate and safe radiotherapy delivery.
+*DICOM RT* files are essential in radiotherapy treatment planning.
-## Prepare your network
-First, we need to download the ZIP file from:
+They include:
+* **RT Structure Set**, containing information related to patient anatomy, for example structures, markers, and isocenters. These entities are typically identified on devices such as CT scanners, physical or virtual simulation workstations, or treatment planning systems.
+* **RT Plan**, containing geometric and dosimetric data specifying a course of external beam and/or brachytherapy treatment, for example beam angles, collimator openings, beam modifiers, and brachytherapy channel and source specifications. The RT Plan entity may be created by a simulation workstation, and subsequently enriched by a treatment planning system before being passed on to a record and verify system or treatment device. An instance of the RT Plan object usually references an RT Structure Set instance to define a coordinate system and set of patient structures.
+* **RT Dose**, containing dose data generated by a treatment planning system in one or more of several formats: three-dimensional dose data, isodose curves, DVHs, or dose points.
-https://medicalaffairs.varian.com/headandneckbilat-imrtsx2
+Additional objects not used in this tutorial are:
+* **RT Image**, specifying radiotherapy images which have been obtained on a conical imaging geometry, such as those found on conventional simulators and portal imaging devices. It can also be used for calculated images using the same geometry, such as digitally reconstructed radiographs (DRRs).
+* **RT Beams Treatment Record**, **RT Brachy Treatment Record**, and **RT Treatment Summary Record**, containing data obtained from actual radiotherapy treatments. These objects are the historical record of treatment, and are linked with the other „planning” objects to form a complete picture of the treatment.
-It contains the CT, RTSTRUCT, and RTDOSE files needed for this tutorial to work correctly in MeVisLab.
+## Precondition
+If you do not have DICOM RT data, you can download an example dataset at:
+https://medicalaffairs.varian.com/headandneckbilat-imrtsx2
{{}}
This data is FOR EDUCATIONAL AND SCIENTIFIC EXCHANGE ONLY – NOT FOR SALES OR PROMOTIONAL USE.
{{}}
-Create a new folder named *DICOM_FILES*. Extract the ZIP file into this folder.
+Extract the ZIP file into a new folder named *DICOM_FILES*.
-We will use it in this tutorial.
+## Prepare your network
Add the module `DicomImport` to your workspace.
-
-
-Then click {{< mousebutton "left" >}} Browse and select the new folder named *DICOM_FILES* where you copied the content of the ZIP file earlier. Click Import {{< mousebutton "left" >}}. You can see the result after import in the below figure:
-
-
-
-Now add a `View2D` module and connect it to the `DicomImport` module.
-
-As shown in the Data Tree (middle pane), the imported DICOM RT structure includes:
+Then click {{< mousebutton "left" >}} Browse and select the new folder named *DICOM_FILES* where you copied the content of the ZIP file earlier. Click Import {{< mousebutton "left" >}}. You can see the result after import below:
-* **eByLuKOZoWxBUrIW** – An anonymized Patient ID.
-* **0000-00-00** – Missing or anonymized Birth/Study Date.
+
-When you expand the tree view you will see:
+The dataset contains an anonymized patient with four series:
+ * RTPLAN \
+ * RTSTRUCT \
+ * CT 512×512×272×1
+ * RTDOSE 199×115×147×1
- * **RTPLAN** – Treatment plan metadata (no image).
- * **RTSTRUCT** – Contour data (e.g., organs, tumors; no image).
- * **CT 512×512×272×1** – The full CT scan volume (visible anatomy).
- * **RTDOSE 199×115×147×1** – The 3D dose distribution (dose grid).
+In order to see the images, add a `View2D` module and connect it to the `DicomImport` module.
-After connecting, open the `View2D` and click on each of these items to visualize the corresponding data in the viewer, as shown in the figures below.
+The *RTPLAN* and *RTSTRUCT* files do not contain pixel data. Therefore the `DicomImport` module informs that there is no image data available. The *CT* series contains the original CT data and the *RTDOSE* series contains a mask providing three-dimensional dose data.
{{< imagegallery 4 "/images/tutorials/image_processing/" "RTPLAN" "RTSTRUCT" "CT512" "RTDOSE">}}
-Select the CT 512×512×272×1 series.
+Select the *CT 512×512×272×1* series.
-We now want to view the CT images and the RTSTRUCT data together. The module `DicomImport` only allows to select one single object. In order to select more than one object, we use a `DicomImportExtraOutput` module. Select the CT series in the `DicomImport` module and the RTSTRUCT in the `DicomImportExtraOutput` module.
+We now want to view the CT images and the *RTSTRUCT* data together. The module `DicomImport` only allows to select one single object. In order to select more than one object, we use a `DicomImportExtraOutput` module. Select the CT series in the `DicomImport` module and the *RTSTRUCT* in the `DicomImportExtraOutput` module.
-You have to select the correct index for the RTSTRUCT. In our example it is index 2.
+You have to select the correct index for the *RTSTRUCT*. In our example it is index 2.
-
+
### Visualize RTSTRUCTs as colored CSOs
-Now we need an `ExtractRTStruct` module to convert RTSTRUCT data into CSOs (Contour Segmentation Objects). CSOs in MeVisLab allow to visualize the contours on the CT scan and to interact with them.
+Add an `ExtractRTStruct` module to the `DicomImportExtraOutput` to convert *RTSTRUCT* data into MeVisLab contours (CSOs). CSOs allow to visualize the contours on the CT scan and to interact with them in MeVisLab.
-Then connect it with the `DicomImportExtraOutput` as shown in the figure:
+A preview of the resulting CSOs can be seen in the *Output Inspector*.
-
+
-Add a `SoView2DCSOExtensibleEditor` module to enable visualization and interaction with the CSOs in the 2D viewer. Connect it with a `View2D` module and the `ExtractRTStruct` module. The `View2D` module shows the CT scan with the contours from the *RTSTRUCT* file.
+Add a `SoView2DCSOExtensibleEditor` module to enable visualization and interaction with the CSOs in the 2D viewer.
-
+
-There are no names for the contours shown by default. We want to display the names for the contours available in the *RTSTRUCT* file to identify the segmented structure. Use the `CSOLabelRenderer` module to show labels (e.g., 'Bladder', 'Prostate') next to each contour. The figure below shows that:
+We want to display the names for the contours available in the *RTSTRUCT* file to identify the segmented structure. Use the `CSOLabelRenderer` module to show labels (e.g., 'Bladder', 'Prostate') next to each contour.
-
+
-As you can see, the contours are labeled with numbers. The number is the internal ID of the contour. We want to show the names for the contour to identify the segmented structure. To do this, open the `CSOLabelRenderer` panel.
+By default, the ID of the contours is rendered. Open the panel of the `CSOLabelRenderer` and change the *labelString* parameter as seen below.
-
+
-Now, add this line to make the numbers names for the contour:
{{< highlight >}}
```Python
labelString = cso.getGroupAt(0).getLabel()
```
{{}}
-Then press apply. The label of the CSO provides the name of each contour. You can see them next to the contours.
+Then press apply {{< mousebutton "left" >}}. The name of the structure is defined in the group of each CSO. We now show the label of the group next to the contour. Add a `CSOLabelPlacementGlobal` module to define a better readable location of these labels.
-
+The module `CSOLabelPlacementGlobal` implements an automatic label placement strategy that considers all CSOs on a slice.
-{{}}
-You can use a `CSOLabelPlacementLocal` module or a `CSOLabelPlacementGlobal` module to define the locations of these labels.
-{{}}
+
### 3D Visualization of Contours Using `SoExaminerViewer`
+The contours can also be shown in 3D.
-If you want to visualize the contours in 3D, follow these steps:
-
-Add the `SoCSO3DRenderer` module and connect it to the `ExtractRTStruct` module. The `SoCSO3DRenderer` will render the contours (CSOs) in 3D.
-
-Add the `SoExaminerViewer` module and connect it to the `SoCSO3DRenderer` module. The `SoExaminerViewer` will allow you to view the 3D contours. You can rotate, zoom, and move around the 3D image.
-
-The following figure shows the network and the result:
+Add a `SoCSO3DRenderer` and a `SoExaminerViewer` module and connect them to the `ExtractRTStruct` module. The `SoCSO3DRenderer` will render the contours (CSOs) into the `SoExaminerViewer`.
-
+
-### Visualizing RTDOSE as a Color Overlay Using LUT
-We now ant to show the *RTDOSE* data as provided for the patient as a semi-transparent overlay.
+### Visualizing RTDOSE as a colored overlay
+We now want to show the *RTDOSE* data as provided for the patient as a semi-transparent, colored overlay.
-Now we need to add another `DicomImportExtraOutput` module to import multiple DICOM objects. You have to select the correct index for the example. In this case, we select index 4 for the *RTDOSE* 199*115*147*1 data. Add a `MinMaxScan` module to scan the input image and calculate the minimum and maximum values of the image. Connect it with the `DicomImportExtraOutput` module.
+Add another `DicomImportExtraOutput` module to get the *RTDOSE* object. Again, select the correct index. In this case, we select index 4.
-
-
-Add a `Histogram` module to calculate the image's intensity distribution, and connect it to the `MinMaxScan` module.
-
-The `Histogram` module computes the image's intensity distribution and is connected to the `SoLUTEditor` module to modify the lookup table (LUT). The LUT is then passed to the `SoGroup` module, which is connected to the `SoView2DOverlay` module to blend the 2D image overlay in a 2D viewer. The `SoLUTEditor` module allows interactive editing of the LUT, while the `SoView2DOverlay` module facilitates overlaying *RTDOSE* in a 2D scene.
-
-{{}}
-Note that the `SoView2DOverlay` module is for 2D blending. The `GVROrthoOverlay` module should be used for `OrthoView2D`.
-{{}}
+Add a `MinMaxScan` module to scan the input image and calculate the minimum and maximum values of the image. Connect it with the `DicomImportExtraOutput` module.
-The below figure shows the connections of the network:
+
-
+Add a `Histogram` and a `SoLUTEditor` module to calculate the image's intensity distribution and define a colored lookup table for the overlay.
-Now we should update the `Histogram` module by pressing the update button on it.
+Change update mode of the `Histogram` module to *Auto Update*.
-
+Open the panel of the `SoLUTEditor` module and go to tab *Range*. Click {{< mousebutton "left" >}} *Update Range From Histogram* to apply the histogram values for the *Range* of the lookup table.
-Now open `SoLUTEditor` module panel, go to *Range*, *Update Range From Histogram* to apply the histogram values, as shown in the figure:
+
-
+On tab *Editor*, define a lookup table as seen below.
-In the same panel, on tab *Editor*, change the colors as shown in the figure:
+
-
+The lookup table shall be used for showing the RT Dose data as a semi-transparent overlay on the CT image. Add a `SoView2DOverlay` and a `SoGroup` module to your network. Replace the input of the View2D module from the `SoView2DCSOExtensibleEditor` with the `SoGroup`.
-Finally, when you open the `View2D` panel, it will display a 2D anatomical image with a colored *RTDOSE* overlay, where the dose distribution is visualized using a customized Lookup Table (LUT) that clearly highlights the radiation intensity levels within the body.
+
-
+If you want to visualize the RT Struct contours together with the RT Dose overlay, connect the `SoView2DCSOExtensibleEditor` module and the `SoGroup` module.
-## **Summary**
+
-* Load DICOM RT data including RTDOSE and RTSTRUCT.
-* Visualize RTSTRUCTs with `ExtractRTStruct` and `CSOLabelRenderer`.
-* Display contour labels using `CSOLabelRenderer`.
-* View images in 2D (`View2D`) and 3D (`SoExaminerViewer`).
-* Visualize RTDOSE as a color overlay using `SoLUTEditor`.
-* Adjust dose intensity with `Histogram` and `MinMaxScan`.
+## Summary
+* DICOM RT data can be loaded and processed in MeVisLab.
+* RT Structure Sets can be converted to MeVisLab contours and visualized using `ExtractRTStruct` and `CSOLabelRenderer` modules
+* Anatomical information can be shown using the module `CSOLabelRenderer`.
+* RT Dose files can be shown as a semi-transparent colored overlay using `SoView2DOverlay`.
{{< networkfile "/examples/image_processing/example6/DICOMRT.mlab" >}}
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/2df.png b/mevislab.github.io/static/images/tutorials/image_processing/2df.png
deleted file mode 100644
index 0ea313592..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/2df.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/CSOLabelRenderer.png b/mevislab.github.io/static/images/tutorials/image_processing/CSOLabelRenderer.png
deleted file mode 100644
index bb803eda9..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/CSOLabelRenderer.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/CSOLabelRendererpanel.png b/mevislab.github.io/static/images/tutorials/image_processing/CSOLabelRendererpanel.png
deleted file mode 100644
index 33013d6b9..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/CSOLabelRendererpanel.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Dicommm.png b/mevislab.github.io/static/images/tutorials/image_processing/Dicommm.png
deleted file mode 100644
index 8800f634a..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/Dicommm.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_1.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_1.png
new file mode 100644
index 000000000..aacbfb977
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_1.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_10.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_10.png
new file mode 100644
index 000000000..2e3bf6338
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_10.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_11.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_11.png
new file mode 100644
index 000000000..300b35cf8
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_11.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_12.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_12.png
new file mode 100644
index 000000000..4f58fdcbb
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_12.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_13.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_13.png
new file mode 100644
index 000000000..f8e4310c5
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_13.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_2.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_2.png
new file mode 100644
index 000000000..eedb3899b
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_2.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_3.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_3.png
new file mode 100644
index 000000000..8e98652ec
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_3.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_4.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_4.png
new file mode 100644
index 000000000..19cfe2e0f
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_4.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_5.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_5.png
new file mode 100644
index 000000000..26a3709ad
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_5.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_6.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_6.png
new file mode 100644
index 000000000..978483b24
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_6.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_7.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_7.png
new file mode 100644
index 000000000..6a348a6d6
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_7.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_8.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_8.png
new file mode 100644
index 000000000..37d6a2076
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_8.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Example6_9.png b/mevislab.github.io/static/images/tutorials/image_processing/Example6_9.png
new file mode 100644
index 000000000..ecb275fd8
Binary files /dev/null and b/mevislab.github.io/static/images/tutorials/image_processing/Example6_9.png differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/Import.png b/mevislab.github.io/static/images/tutorials/image_processing/Import.png
deleted file mode 100644
index c75ecd7b9..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/Import.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/contournamed.png b/mevislab.github.io/static/images/tutorials/image_processing/contournamed.png
deleted file mode 100644
index 8805ddedd..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/contournamed.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/converter.png b/mevislab.github.io/static/images/tutorials/image_processing/converter.png
deleted file mode 100644
index d6d284ccf..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/converter.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/cotour.png b/mevislab.github.io/static/images/tutorials/image_processing/cotour.png
deleted file mode 100644
index 8f9e5545c..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/cotour.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/editior.png b/mevislab.github.io/static/images/tutorials/image_processing/editior.png
deleted file mode 100644
index 56f03476c..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/editior.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/histo.png b/mevislab.github.io/static/images/tutorials/image_processing/histo.png
deleted file mode 100644
index ac69e0723..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/histo.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/minmaxscan.png b/mevislab.github.io/static/images/tutorials/image_processing/minmaxscan.png
deleted file mode 100644
index ed51800bb..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/minmaxscan.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/net.png b/mevislab.github.io/static/images/tutorials/image_processing/net.png
deleted file mode 100644
index 91e5a2557..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/net.png and /dev/null differ
diff --git a/mevislab.github.io/static/images/tutorials/image_processing/solut.png b/mevislab.github.io/static/images/tutorials/image_processing/solut.png
deleted file mode 100644
index 6a47652c7..000000000
Binary files a/mevislab.github.io/static/images/tutorials/image_processing/solut.png and /dev/null differ