Getting Started

First Steps with MeVisLab

2023-09-25


Table of Contents

1. Before We Start
1.1. Welcome to MeVisLab
1.2. Coverage of the Document
1.3. Intended Audience
1.4. Conventions Used in This Document
1.4.1. Activities
1.4.2. Formatting
1.5. How to Read This Document
1.6. Related MeVisLab Documents
1.7. Glossary (abbreviated)
2. The Nuts and Bolts of MeVisLab
2.1. MeVisLab Basics
2.2. Development in MeVisLab
2.3. MeVisLab Modules
2.4. Fields
2.5. Networks
2.6. Overview of Important Files
2.7. User Interfaces Controls
2.8. Scripting
2.9. How to Find More Information on Networks and Modules
3. Loading and Viewing Images
3.1. The MeVisLab GUI
3.2. Searching and Adding Modules
3.3. Using the ImageLoad Module
3.4. Adding Viewers to ImageLoad
3.4.1. Adding the View2D Module
3.4.2. Adding the View3D Module
3.5. Alternative Ways to Load Images
3.5.1. Dragging Images onto the Workspace
3.5.2. Using the LocalImage Module
3.6. A Note on Importing DICOM Images
4. Implementing a Contour Filter
4.1. Loading the Input Image
4.2. Implementing the Contour Filter
4.3. Parameter Connection for Synchronization
5. Defining a Region of Interest (ROI)
5.1. Creating a Viewer with a Selection Rectangle
5.2. Adding a Second Viewer for the Subimage
5.3. Adding the Interactivity for the Viewers
6. Excursion: Functionality Overview
6.1. Image Handling and Processing
6.1.1. Image Handling
6.1.2. Image Properties
6.1.3. Basic Image Processing
6.1.4. Filter
6.1.5. Segmentation
6.2. Visualization
6.2.1. 2D Viewing
6.2.2. 3D Viewing
6.2.3. Lookup Tables
6.3. Data Objects
6.3.1. Markers
6.3.2. Curves
6.3.3. Contours
6.3.4. Surface objects
6.4. Miscellaneous
6.4.1. Fields
6.4.2. Diagnostic
7. Creating an Open Inventor Scene
7.1. Introduction to Open Inventor
7.2. Creating the Applicator
7.3. Creating the Interaction
7.4. Creating the Anatomical Image
7.5. Finishing the Complete Open Inventor Scene
8. Starting Development with Package Creation
8.1. What are Packages
8.2. Creating a User Package for Your Project
9. Introduction to Macro Modules
10. Developing a Macro Module for an Applicator
10.1. Creating a Basic Global Macro
10.2. Adding the Macro Parameters and Panel
10.3. Programming the Python Script
10.4. Addition: Shifting the Whole Tip
11. GUI Design in MeVisLab
11.1. MeVisLab Definition Language (MDL)
11.1.1. MDL Validator
11.1.2. MDL Controls
11.1.3. MDL GUI definition
11.1.4. A Note on Fields in Scripting Interfaces
11.2. Developing the ExampleToggleButton
11.2.1. Creating the Macro Module
11.2.2. Defining the Interfaces
11.2.3. Programming the Button Action in Python
11.2.4. Referencing the Command in the MDL Script
11.2.5. Persistent Field Values
11.2.6. Implementing a Keyboard Shortcut
11.2.7. Arranging Multiple Buttons
11.2.8. Auto Layouting with the AlignGroups Control
11.2.9. Prototypes for Controls
11.2.10. Designing Larger GUIs
11.3. MDL Styles
11.3.1. How to Use MDL Styles
11.3.2. Defining Global Styles
11.3.3. Creating Custom MDL Controls
11.4. Customize GUI Appearance Using Qt Style Sheets (CSS)
12. Excursion: Image Processing in ML
12.1. Some Advanced Information on Image Processing
12.2. Structure of MeVisLab
12.3. Coordinate Systems
12.4. Affine Transformations
12.5. DICOM Data and Coordinates
12.6. Coordinate Systems in the MeVisLab GUI
12.7. Data Types for DICOM and TIFF
12.8. Image Processing Concepts: Pages, Slices, VirtualVolumes, and More
13. Introduction to C++ Modules
13.1. Module and Connection Specifics on the C++ Level
13.2. Some Tips for Module Design
13.2.1. Macro Modules or C++ Modules?
13.2.2. Combining Functionalities
13.2.3. Tips for Module Testing
13.3. Programming Examples
14. Developing ML Modules
14.1. Creating a New ML Module for Adding Values
14.1.1. Creating the Basic ML Module with the Project Wizard
14.1.2. Preparing the Project
14.1.3. Programming the Functions of the ML Module
14.1.4. GUI Creation/Optimizing
14.1.5. Creating an Example Network and Help File
14.2. Creating an ML Module For Simple Average
14.2.1. Creating the Basic ML Module with the Project Wizard
14.2.2. Editing the Header File of SimpleAverage
14.2.3. Editing the CPP File of SimpleAverage
14.2.4. Testing the Module
14.3. Combining Two Modules in One Project
14.3.1. Copying the Source Files
14.3.2. Editing and Recompiling the CMakeLists.txt File
14.3.3. Editing the Project in the Development Environment
14.3.4. Editing the Module Definition (.def)
14.3.5. Cleaning up Folders and Example Networks
15. Developing a Base Communication
15.1. A Note on Base Types Checks
15.1.1. Base Connectors and Field Types
15.1.2. Overriding Base Type Checks
15.1.3. Implementing Base Type Checks
15.2. Developing the MLBaseOwner Module and the BaseMessenger Class
15.2.1. Creating the BaseCommunication Project in the Wizard
15.2.2. Adding New Files
15.2.3. Adding References to the new Files in CMakeLists.txt
15.2.4. Adding Contents to BaseMessenger.h
15.2.5. Add Contents to BaseMessenger.cpp
15.2.6. Editing MLBaseCommunicationInit.cpp
15.2.7. Editing mlBaseOwner.h
15.2.8. Editing mlBaseOwner.cpp
15.2.9. Making MLBaseCommunication classes known
15.2.10. Adding an object wrapper for MLBaseCommunication objects
15.3. Developing the SoBaseReceiver Module
15.3.1. Creating the New Open Inventor Module with the Wizard
15.3.2. Editing CMakeLists.txt of SoBaseReceiver
15.3.3. Edit SoBaseReceiver.h
15.3.4. Editing SoBaseReceiver.cpp
16. Using the TestCenter
16.1. Introduction to Testing in MeVisLab
16.2. Developing a Test Case
16.2.1. Creating a New Test Case
16.2.2. Populating the Test Network
16.2.3. Editing the Module Settings
16.2.4. Creating a First Test Script with Manual Threshold Setting
16.2.5. Automating the Test Case with the FieldValueTestCaseEditor
16.2.6. Automating the Test Case with an Iterative Test
16.2.7. Grouping Test Functions
16.2.8. Enhancing Test Reports with ScreenShots
16.2.9. Disabling Test Functions

List of Figures

1.1. Welcome Screen and Documentation Links
2.1. Image Processing Pipeline
2.2. Network Layout
2.3. Module Context Menu: Show Help
3.1. MeVisLab User Interface
3.2. View Selection
3.3. Modules Menu and Module Browser
3.4. Quick Search Options
3.5. Quick Search Results
3.6. ImageLoad Module
3.7. ImageLoad Panel and Output Inspector
3.8. Adjusting the Window/Level
3.9. Output Inspector with Image Properties
3.10. Output Inspector with Additional Information Display
3.11. 3D Output Inspector
3.12. Connector Details in the Edit Menu
3.13. Connector Details in the Preferences
3.14. Connector Details Depending on Zoom
3.15. Setting up the Connection
3.16. Panel of View2D
3.17. Opening the Settings Panel of View2D
3.18. Settings Panel of View2D
3.19. Automatic and Settings Panel of View2D
3.20. Connecting the View3D Module
3.21. The View3D Panel
3.22. LocalImage Module
3.23. Show the Internal Network
3.24. Internal Network of the LocalImage Module
3.25. DicomImport
4.1. Example Network Contour Filter
4.2. Viewing the Input Image for the Contour Filter
4.3. Adjust Filter Parameters
4.4. Constructing the Filter Pipeline — Convolution Output
4.5. Constructing the Filter Pipeline — Morphology Output
4.6. Constructing the Filter Pipeline — Arithmetic2 Output
4.7. Creating a New Group
4.8. Resulting Contour Filter Network
4.9. Establishing the Parameter Connections
4.10. Resulting Network
5.1. Example Network ROISelection
5.2. Viewer with Selection Rectangle
5.3. Viewer for the Subimage
5.4. Searching for World to Voxel Conversion
5.5. WorldVoxelConvert Panel
5.6. WorldVoxelConvert Modules Added
5.7. Adding the Parameter Connections
5.8. Example Network ROI Selection
7.1. Example Network: Open Inventor Result
7.2. Applicator Only
7.3. Traversing in Open Inventor
7.4. Creating the Applicator Shaft
7.5. Coloring the Applicator Shaft
7.6. Adding an Applicator Tip
7.7. Adding Translation and Grouping
7.8. Finishing the Applicator
7.9. Using SoCenterballManip
7.10. SoCenterballManip — Turned
7.11. Connecting Parameters
7.12. Combining Interaction and Applicator
7.13. Loading a Local Image
7.14. Adding the GigaVoxel Renderer
7.15. Adding the Windowing to the Applicator
7.16. Combining the Groups
7.17. Combined Graphic Elements
7.18. Adding the Applicator Scaling
7.19. Improved Applicator/Interaction Arrangement
8.1. Example for a Package Tree
8.2. Preferences — Packages
8.3. Package Wizard
10.1. Starting a new Macro from the Existing Applicator
10.2. Existing Applicator with Clean Instance Names
10.3. Macro Module Wizard
10.4. Selecting a Genre
10.5. Macro Module Properties
10.6. File Browser with the New Macro Module Files
10.7. ApplicatorMacro as Macro Module
10.8. ApplicatorMacro.script in MATE
10.9. ApplicatorMacro Module with Output Connector
10.10. Internal Network of the ApplicatorMacro Module
10.11. Automatic Panel of the ApplicatorMacro Module
10.12. Panel of the ApplicatorMacro Module
10.13. Parameters for Diameter Setting
10.14. Changing the Diameter of the Applicator
10.15. Strange Behavior of the ApplicatorMacro
10.16. Adding the Correct Tip Translation
10.17. Complete ApplicatorMacro
10.18. Feeding the SoCalculator Module
10.19. Improved Applicator Macro Module
11.1. View3D Panels as Example for GUI Elements
11.2. Fields as Model
11.3. Controls as View/Controller
11.4. Controls as Views/Controller
11.5. View3D Panel with C++ Class Names of Included MDL Controls for Scripting
11.6. Command Execution Context
11.7. Contexts of the Scripting Console
11.8. ExampleToggleButton
11.9. ExampleToggleButton
11.10. Buttons in a Grid
11.11. View3D Panels with the Panel Control
11.12. Redesigned Panel
11.13. Entering Style Settings
11.14. ExampleToggleButton with Application Style Panel
11.15. Color Chooser Example Control
11.16. View3D Panel with Qt Widgets
12.1. MeVisLab Structure
12.2. Coordinate Systems
12.3. Matrix Multiplication
12.4. World Coordinates in Context of the Human Body
12.5. The DICOM Tag Browser
12.6. Image Properties for an Ideal Image
12.7. Image Properties for a Sagittal Image
12.8. Image Properties in the Info Module
14.1. Entering the ML Module Properties
14.2. Entering the Imaging Module Properties
14.3. Additional Module Properties
14.4. Entering the ML Module Properties — Fields
14.5. Example Network for SimpleAdd
15.1. Example Network for ML Module and an Open Inventor Module
15.2. Mouse-over Information for Base Connectors
15.3. Mouse-over Information for Different Base Connectors in One Module
15.4. Base Field Connection Checked for Type Compatibility
15.5. Project Wizard — Module Properties
15.6. Project Wizard — Imaging Module Properties
15.7. Project Wizard — Additional Module Properties
15.8. Project Wizard — Module Field Interface
15.9. Resulting BaseOwner Module
15.10. SoBaseReceiver Module Alternative
15.11. Project Wizard — General Module Properties
15.12. Project Wizard — Module Type
15.13. Project Wizard — Module Field Interface
16.1. Creating a New Test Case
16.2. New Test Case in Test Selection
16.3. New Test Case in the Package Path
16.4. Basic Test Case Setup
16.5. Test Functions in the TestCaseManager
16.6. Report for ManualTest_75
16.7. The FieldValueTestCaseEditor Panel
16.8. Dragging Fields into the Parameter List
16.9. Dragging Fields into the Expected Results List
16.10. The Resulting Panel
16.11. Our Automatic FieldValue Tests Added
16.12. Report for AutomaticTest_1
16.13. Our Iterative Test in the Test Center
16.14. Report for AutomaticTest_2
16.15. Grouped Test Functions
16.16. Report for ScreenShot Example

List of Tables

1.1. List of MeVisLab Documents
2.1. Module Types
2.2. Connectors
2.3. Connections
2.4. Important Files