The ML Programming Guide

Programming Object-Oriented Image Processing with the MeVis Library

2023-09-25


Table of Contents

About This Document
1. What This Document Contains
2. What You Should Know Before Reading This Document
3. Suggestions for Further Reading
4. Conventions Used in This Document
5. Quick Start
1. Conceptual Overview
1.1. Overview
1.2. Principles
1.3. ML Classes - Overview
1.3.1. Classes for Module Development
1.3.2. Administrative Classes
1.3.3. Image Classes
1.3.4. Helper Classes
1.3.5. APIs and Classes for Interfaces and Voxel Type Extensions
1.3.6. Component Groups
1.3.7. The ML Module Database
2. Detailed Class Overview and Usage
2.1. Classes for Module Development
2.1.1. Module
2.1.2. Field
2.1.3. FieldContainer
2.1.4. Image Classes for Module Development
2.2. Administrative Classes
2.2.1. Host
2.2.2. Memory
2.2.3. Base
2.2.4. The Runtime Type System
2.2.5. Debugging and Error Handling Support
2.3. Image Classes
2.3.1. ImageProperties
2.3.2. MedicalImageProperties
2.3.3. ImagePropertyExtension
2.3.4. PagedImage
2.3.5. SubImage/TSubImage
2.3.6. BitImage
2.3.7. VirtualVolume
2.3.8. MemoryImage
2.4. Helper Classes
2.4.1. ImageVector, ImageVector
2.4.2. SubImageBox
2.5. APIs and Classes for Interfaces and Voxel Type Extensions
2.5.1. How Applications and the ML Work
2.5.2. The C-API
2.5.3. Registering and Using Self-Defined Data Types
2.6. Tools
2.6.1. MLLinearAlgebra(Vector2, ..., Vector10, Vector16, Matrix2, , ..., Matrix6, quaternion, ImageVector)
2.6.2. MLUtilities
2.6.3. Other Classes
2.6.4. MLBase
2.6.5. MLKernel
2.6.6. MLTools
2.6.7. MLDiagnosis
2.6.8. MLImageFormat
2.6.9. MLDataCompressors
2.7. Registered Data Types
2.8. ML Data Types
2.8.1. Voxel Types and Their Enumerators
2.8.2. Index, Size and Offset Types
3. Deriving Your Own Module from Module
3.1. Deriving from Module
3.1.1. Basics
3.1.2. Implementing the Constructor
3.1.3. Module Persistence and Overloading activateAttachments()
3.1.4. Implementing handleNotification()
3.1.5. Using TypedCalculateOutputImageHandler
3.1.6. Implementing calculateOutputImageProperties()
3.1.7. Implementing calculateInputSubImageBox()
3.1.8. Changes to calcInSubImageProps()
3.1.9. Implementing calculateOutputSubImage()
3.1.10. Handling Disconnected or Invalid Inputs by Overloading handleInput()
3.1.11. Configuring Image Processing Behavior of the Module
3.1.12. Explicit Image Data Requests from Module Inputs
3.1.13. Getting Single Voxel Values from Module Inputs
3.1.14. Interrupting Page-Based Image Processing and Handling Errors
3.1.15. Testing for Interruptions During Calculations
3.1.16. Adapting Page Extents
3.1.17. Processing Input Images Sequentially
3.1.18. Traps and Pitfalls in Classes Derived from Module
4. Image Processing Concepts
4.1. Page Calculation in the ML
4.2. Page-Based Approaches
4.2.1. Page-Based Concept
4.2.2. Voxel-Based Concept
4.2.3. Slice-Based Concept
4.2.4. Kernel-Based Concept
4.3. Concepts for Partially Global Image Processing
4.3.1. Random Access Concept (Tile Requesting)
4.3.2. Sequential Image Processing Concept
4.3.3. VirtualVolume Concept
4.4. Global Image Processing Concepts
4.4.1. Temporary Global Concept
4.4.2. Global Image Processing Concept
4.4.3. BitImage Concept
4.4.4. MemoryImage Concept
4.5. Miscellaneous Modules
5. Debugging and Error Handling
5.1. Printing Debug Information
5.2. Handling Errors
5.3. Registering Error Handlers
5.4. The Class ErrorOutput and Configuring Message Outputs
5.5. Tracing, Exception Handling and Checked Object Construction/Destruction
6. The C-API
6.1. The C-API
6.2. mlInitSystemML.h
6.3. mlAPI.h
6.4. mlDataTypes.h
6.5. mlTypeDefs.h
6.6. C-Example using the C-API
7. Registered Voxel Data Types
7.1. Overview of Registered Voxel Data Types
7.1.1. Registered Voxel Data Types
7.1.2. About Standard, Default and Registered Voxel Types
7.2. Implementing Image Processing on extended Voxel Data Types
7.2.1. Important Functions For Voxel Types
7.2.2. The Basic Concept of Calculating the Output SubImage
7.2.3. Examples with Registered Voxel Types
7.2.4. Compile and Runtime Decisions on Standard and Registered Voxel Types
7.2.5. Handling Generalized Registered Voxel Types as Module Parameters
7.3. Limitations of Registered Data Types
7.4. Traps and Pitfalls When Using Registered Voxel Types
7.5. Advanced Issues on Registered Voxel Types
7.5.1. About the Difference Between Scalar, Extended and Registered Voxel Types
7.5.2. Getting and Managing Metadata About Registered Voxel Types
7.5.3. Reducing Generated Code and Compile Times
7.5.4. Configuration of Supported Voxel Types
7.5.5. Implementing a New Voxel Data Type by Deriving from MLTypeInfos
8. Base Objects
8.1. Base Objects
8.2. Composing, Storing and Retrieving Base Objects
8.3. Creating Trees from Base Objects Using TreeNodes
8.4. Writing/Reading Base Objects to/from AbstractPersistenceStream
9. Unicode Support
9.1. Unicode Support
10. File System Support
10.1. File System
A. Basics about ML Programming and Projects
A.1. Creating an ML Project by Using MeVisLab
A.2. Programming Examples
A.3. Exporting Library Symbols
A.4. General Rules for ML Programming
A.5. How to Document an ML Module
A.6. Updating from Older ML Versions
A.7. Version Control
B. Optimizing Image Processing
B.1. Optimizing Module Code
B.2. Optimizing Data Flow in Module Networks
C. Handling Memory Problems
D. Messages and Errors
D.1. ML Error Codes
E. Improving Quality of ML-Based Software
Glossary