diff --git a/Core/Code/Testing/DICOMTesting/DICOMTesting.dox b/Core/Code/Testing/DICOMTesting/DICOMTesting.dox index 2847dbf68c..15aea78acd 100644 --- a/Core/Code/Testing/DICOMTesting/DICOMTesting.dox +++ b/Core/Code/Testing/DICOMTesting/DICOMTesting.dox @@ -1,145 +1,144 @@ /** \page DICOMTesting MITK DICOM testing \section DICOMTesting_introduction Introduction Reading DICOM data into mitk::Images is a complicated business since DICOM and MITK have very different ideas of images. DicomSeriesReader brings DICOM and MITK as close together as possible by offering methods to load DICOM CT and MR images into mitk::Images, optionally grouping slices to 3D+t images. Since there are so many possible sources for mistakes with any change to this loading process, testing the many -assumptions implemented in DicomSeriesReader is worthwhile. This document describes what kind of tests are implemented -and what how. +assumptions implemented in DicomSeriesReader is worthwhile. This document describes what and how theses kind of tests are implemented. \section DICOMTesting_problem Problem description The task of loading DICOM files into mitk::Images is a challenge because of major differences in the way that DICOM and MITK represent images: - DICOM images - are mostly stored as one slice per file - do not describe how they can be arraged into image stacks with orthogonal axis - sometimes they cannot be arranged in image stacks as described above (e.g. tilted gantry) - mitk::Image (at least its mature areas) - represents image stacks with orthogonal axis (nothing like a tilted gantry) - have a concept of a fourth dimension (time steps) Because image processing applications based on MITK still need a way to load DICOM images into -mitk::Image objects, MITK needs to put a lot of effort into building image stacks as best as it can. And this needs to be well tested. +mitk::Image objects, MITK needs a way to build image stacks and this needs to be well tested. For more background information, see David Clunie's most valuable posts on comp.protocols.dicom, e.g.: - http://groups.google.com/group/comp.protocols.dicom/browse_thread/thread/6db91972e161f0d4/6e0304ac264a6eb5 - http://groups.google.com/group/comp.protocols.dicom/browse_thread/thread/e9bd1497bea3e66b/187a7dc8810613d2 - http://groups.google.com/group/comp.protocols.dicom/browse_thread/thread/5d80bb0b7fafcb81/cf96119e3b024ed8 - http://groups.google.com/group/comp.protocols.dicom/browse_thread/thread/4568635e083a3fba/e2a8ceec23032601 \section DICOMTesting_testidea Test principle The general idea for DICOM loaing tests is to run a set of known DICOM files through DicomSeriesReader's methods GetSeries() and LoadDicomSeries() to generate mitk::Images. These images are then compared to expected image properties, such as the number of individual mitk::Images, positions, orientations, spacings, etc. Stored expectations look like this (should be self-explanatory): \verbatim -- Image 1 Pixeltype: s BitsPerPixel: 16 Dimension: 4 Dimensions: 64 64 6 1 Geometry: Matrix: 5.25 0 0 0 5.2468 0.139598 0 -0.183222 3.99757 Offset: -159.672 -309.974 -69.0122 Center: 0 0 0 Translation: -159.672 -309.974 -69.0122 Scale: 1 1 1 Origin: -159.672 -309.974 -69.0122 Spacing: 5.25 5.25 4 TimeBounds: 0 1 -- Image 2 Pixeltype: s BitsPerPixel: 16 Dimension: 4 Dimensions: 64 64 41 1 Geometry: Matrix: 5.25 0 0 0 5.25 0 0 0 4 Offset: -160.672 -311.672 -285 Center: 0 0 0 Translation: -160.672 -311.672 -285 Scale: 1 1 1 Origin: -160.672 -311.672 -285 Spacing: 5.25 5.25 4 TimeBounds: 0 1 \endverbatim \section DICOMTesting_implementation Implementation \section DICOMTesting_implementation_utils Test helpers (applications and classes) Application DumpDICOMMitkImage Takes a list of DICOM images, loads them using TestDICOMLoading, then dumps information about the resulting mitk::Images to standard output. This application is helpful when defining reference data for tests. Application VerifyDICOMMitkImageDump Takes a list of DICOM images and loads them using TestDICOMLoading. Takes a dump file as generated by DumpDICOMMitkImage, parses it and compares it to actually generated mitk::Images. This application is used to implement the majority of test cases. They all load images, then verify the expected result structure. Class TestDICOMLoading \section PageDICOMLoadingTests_testcaseimplementation Test case implementation Individual test cases are stored in the MITK-Data repository and constructed by Core/Code/Testing/DICOMTesting/Testing/CMakeLists.txt The CMake file parses given directories for subdirectories containing specific test cases. Each directory contains two files: - File "input": lists DICOM files that should be loaded for this test case - File "expected.dump": contains the image properties in the above mentioned dump format Each test case is translated into a CTest test which evaluates the return value of a call to VerifyDICOMMitkImageDump. \section PageDICOMLoadingTests_testcases Implemented test cases From test set TinyCTAbdomen (see description.txt in this directory for details on test images): - singleslice : just a single slice (should work and contain meaningful spacing) - two_slices : two slices, spacing should be calculated correctly - all : load a "normal" series as a single 3D block - 3D_and_T : load a small set of slices with multiple time-steps - diff_orientation : load a set of files containing two differently oriented image blocks - diff_orientation_gaps : load a set of files containing two differently oriented image blocks, each missing slices, so blocks must be split - diff_spacing : load a set of files containint two set of slices with different spacings - gap : load slices that cannot form a single 3D block, because single slices are missing - gaps : slices missing in differnt locations, so multiple splits needed - unsorted_gaps : as before, just file names are unsorted - single_negative_spacing : from reported bug related to single MR images with misleading spacing information - tilted_gantry : slice origins do not align along first slice normal (happens with tilted gantries) - interleaved : two volumes of slices with origins along the same line. The volumes' slices interleave in their border region. This test is meant to correctly sort apart the two blocks instead of generating many two-slices groups in the interleaved region. \section DICOMTesting_othertests Specific other tests This list is meant to provide an up-to-date list of all implemented DICOM loading tests. If you ever find this outdated, please update it or make the persons who invalidated the list update it. mitkDICOMTestingSanityTest_* These tests implement basic testing of the implemented helper classes. The tests use DicomSeriesReader to load a number of DICOM image. They verify: - DicomSeriesReader recognizes all input files as DICOM images - DicomSeriesReader generates a number of mitk::Images from the DICOM images - the number of mitk::Images matches a number given on the command line or CTest's add_test() - helper methods in class TestDICOMLoading make minimal sense (comparison of an image dump to itself must be valid) */ diff --git a/Documentation/Doxygen/DirectoryStructure.dox b/Documentation/Doxygen/DirectoryStructure.dox index 4262713cd4..63b631dc04 100644 --- a/Documentation/Doxygen/DirectoryStructure.dox +++ b/Documentation/Doxygen/DirectoryStructure.dox @@ -1,23 +1,23 @@ /** \page DirectoryStructurePage Directory Structure -There are eight directories on the top level, each containing several sub-directories that contain the implementation. Thus, as far as code is concerned, the depth of the directory structure is limited to two. Classes in a sub-directory may reference classes in other sub-directories on the same level and in sub-directories that have already been mentioned, when you the following list from top to bottom: +There are eight directories on the top level, each containing several sub-directories that contain the implementation. Thus, as far as code is concerned, the depth of the directory structure is limited to two. Classes in a sub-directory may reference classes in other sub-directories on the same level and in sub-directories that have already been mentioned, which are listed from top to bottom: \li \a DataStructures: contains sub-directories with data classes. Besides the actual data storage classes, the same sub-directory may contain functions inherently associated to the data storage class in the sense of object-oriented programming. For example a container class may include methods like \a add, \a remove, \a addSorted (add and keep the container sorted), and comparison operators. Classes in a directory may reference classes in other data-directories, but \em not in any of the other seven directories at the top level. \li \a Algorithms: contains sub-directories with algorithms, which may reference other algorithms and data-structures. \li \a Controllers: contains sub-directories with controllers. Controllers are invisible data management classes. An (non-exclusive!) example are controllers in the sense of the model-view-controller design-pattern. Controllers may reference other controllers, algorithms and data-structures. -\li \a Rendering: contains sub-directories with rendering classes, e.g. mitk-mappers. Rendering classes may be graphics library dependent (e.g. OpenGL or vtk), but are GUI-toolkit independent (independent from Qt, FLTK, etc.). They produce output within a widget provided to them. Other classes within sub-directories of \a Rendering and all above mentioned directories my be referenced. +\li \a Rendering: contains sub-directories with rendering classes, e.g. mitk-mappers. Rendering classes may be graphics library dependent (e.g. OpenGL or vtk), but are GUI-toolkit independent (independent from Qt, FLTK, etc.). They produce output within a widget provided to them. Other classes within sub-directories of \a Rendering and all above mentioned directories may be referenced. \li \a Interactions: contains sub-directories with interaction classes, which may reference other interactions and all above mentioned directories. \li \a AppModule: contains sub-directories with classes creating a (part of a) GUI, which can be used within applications. This includes widgets and combinations of widgets and other AppModules. Classes in all directories except the \a Functionalities and \a Application directory may be referenced. \li \a Functionalities: contains sub-directories with functionalities. A functionality combines a main-widget area with a control widget area and an icon/menu-entry/description. Functionalities may include other functionalities. Classes in all directories except the \a Application directory may be referenced. -\li \a Applications: Each directory includes the files required for at least one application. Classes in all directories may be referenced. In future, this directory may be moved to a separate cvs-repository. +\li \a Applications: Each directory includes the files required for at least one application. Classes in all directories may be referenced. In future, this directory may be moved to a seperate cvs-repository. \section Directory Naming Conventions If the classes within a sub-directory are implemented according to the mechanisms or on basis of a toolkit, the name of the sub-directory should start with the acronym of the toolkit. For example, if a registration algorithm uses itk, a reasonable directory name is \a itkRegistration. The classes within the directory need not be in the namespace of the toolkit (as in the case of itk-using classes), but they may, as in the case of directories containing mitk-core-classes. Typical acronyms are \a mitk, \a itk, \a vtk, \a ip and \a Qmitk (following the Qt-Naming Guidelines). \section File Naming Conventions If a file contains a class that is within a namespace, the file name \em must begin with the namespace name, e.g. mitkImage.h and mitkImage.cpp contain the class mitk::Image. Namespace names are normally identical to toolkit acronyms. Consequently, name of the directory will begin with the acronym according to the previous section. \section Compilation Conventions Files created during compilation should be stored in a separate directory tree parallel to the source tree (e.g. \a mitkBinary). For mitk, cmake should be used. */ diff --git a/Documentation/Doxygen/Interaction.dox b/Documentation/Doxygen/Interaction.dox index dac6c11999..0a390450d9 100644 --- a/Documentation/Doxygen/Interaction.dox +++ b/Documentation/Doxygen/Interaction.dox @@ -1,122 +1,122 @@ /** \page InteractionPage Interaction and Undo/Redo Concepts \section InteractionIntroduction Interaction in MITK \b Interaction is one of the most important tasks in clinically useful image processing software. Due to that, MITK has a special interaction concept, with which the developer can map the desired interaction. For a simple change in interaction he doesn't have to change the code. All information about the sequence of the interaction is stored in an XML-file that is loaded by the application during startup procedure at runtime. That even allows the storage of different interaction patterns, e.g. an interaction behaviour like in MS PowerPoint, in Adobe Photoshop or like the interaction behaviour on a medical image retrieval system. \section Statemachines Statemachines to realize Interaction The interaction in MITK is realized with the concept of state machines (by Mealy). This concept allows to build the steps of interaction with different states, which each have different conditions, very alike the different interactions that may have to be build to develop medical imaging applications. Furthermore state machines can be implemented using object oriented programming (OOP). Due to that we can abstract from the section of code, that implements the interaction and focus on the sequence of interaction. What steps must the user do first before the program can compute a result? For example he has to declare three points in space first and these points are the input of a filter so only after the definition of the points, the filter can produce a result. The according interaction sequence will inform the filter after the third point is set and not before that. Now the filter after an adaption only needs two points as an input. The sequence of the interaction can be easily changed if it is build up as a sequence of objects and not hard implemented in a e.g. switch/case block. Or the user wants to add a point in the scene with the right mouse button instead of the left. Wouldn't it be nice to only change the definition of an interaction sequence rather than having to search through the code and changing every single if/else condition? \subsection Statemachine State Machine So a separation of the definition of a sequence in interaction and its implementation is a useful step in the development of an interactive application. -To be able to do that, we implemented the concept of state machines with several classes: States, Transitions and Actions define the interaction pattern. The state machine itself adds the handling of events, that are send to it. +To be able to do that, we implemented the concept of state machines with several classes: States, Transitions and Actions define the interaction pattern. The state machine itself adds the handling of events, that are sent to it. \image html statemachine.jpg \subsubsection ExampleA Example A: A deterministic Mealy state machine has always one current state (here state 1). If an event 1 is sent to the state machine, it searches in its current state for a transition that waits for event 1 (here transition 1). The state machine finds transition 1, changes the current state to state2, cause the transition points to it and executes actions 1 and 2. Now state 2 is the current state. The state machine receives an event 2 and searches for an according transition. Transition 2 waits for event 2, and since the transition leads to state 2 the current state is not changed. Action 3 and 4 are executed. Now Event 3 gets send to the state machine but the state machine can't find an according transition in state 2. Only transition 2 , that waits for event 2 and transition 4, that waits for event 4 are defined in that state. So the state machine ignores the event and doesn't change the state or execute an action. Now the state machine receives an event 4 and finds transition 3. So now the current state changes from state 2 to state 1 and actions 5 and 1 are executed. Several actions can be defined in one transition. The execution of an action is the active part of the state machine. Here is where the state machine can make changes in data, e.g. add a Point into a list. See mitk::StateMachine, mitk::State, mitk::Event, mitk::Action, mitk::Transition, mitk::Interactor \subsection GuardState Guard States Guard States are a special kind of states. The action, that is executed after the state is set as current state, sends a new event to the state machine, which leads out of the guard state. So the state machine will only stay in a guard state for a short time. This kind of state is used to check different conditions, e.g. is an Object is picked of a set of points will be full after the addition of one point. \image html statemachine_guard.jpg \subsubsection ExampleB Example B: -Event 1 is send to the state machine. This leads the current state from state 1 into state check. The action 1 is executed. This action checks a condition and puts the result into a new event, that is send an handled by the same (this) state machine. E.g. is the the object, the state machine handles the interaction, picked with the received mouse-coordinate? The event, that is generated, will be Yes or No. In case of event No, the state machine sets the current state back to state 1 and executes action 2. In case of event Yes, the state machine changes the state from state check into state 2 and executes action 3, which e.g. can select the object taken care of. +Event 1 is sent to the state machine. This leads the current state from state 1 into state check. The action 1 is executed. This action checks a condition and puts the result into a new event, that is sent and handled by the same (this) state machine. E.g. is the the object, the state machine handles the interaction, picked with the received mouse-coordinate? The event, that is generated, will be Yes or No. In case of event No, the state machine sets the current state back to state 1 and executes action 2. In case of event Yes, the state machine changes the state from state check into state 2 and executes action 3, which e.g. can select the object taken care of. \subsection XMLDefinitionStatemachine Definition of a State machine Due to the separation of the definition of an interaction sequence and its implementation, the definition has to be archived somewhere, where the application can reach it during startup and build up all the objects (states, transitions and actions) that represent the sequence of a special interaction. In MITK, these informations are defined in an XML-file (usually in Interaction/mitkBaseInteraction/StateMachine.xml). The structure is the following (from \ref ExampleA) : \code \endcode The identification numbers (ID) inside a state machine has to be unique. Each state machine has to have one state, that is defined as the start-state of that state machine. This means, initially, the current state of the state machine is the start-state. The Event-Ids seen above are also defined in the statemachine.xml file. They specify a unique number for a combination of input-conditions (key, mouse and so on). See \ref InteractionEvents for further informations. So a state machine is defined through a few lines of xml-code, which is loaded at runtime. This allows us to change the sequence in interaction in the xml-file and restart the application, where the changes are applied right away. The definition of one single state machine is called the \a statemachine-pattern. Since this pattern is build up during startup with objects (states, transitions and actions) and these objects only hold information about what interaction may be done at the current state, we can also reuse the pattern. Note, that you as a developer don't necessarily have to implement your own XML-File! We already have defined some interaction-patterns (e.g. for setting Points in 2D or 3D) which you can use and adapt. \subsubsection ReusePattern Reuse of Interaction Patterns If we for example have a pattern called "pointset", which defines how the user can set different points into the scene and there is an instance of a state machine called "PointSetInteractor". This state machine has a pointer pointing to the current state in its assigned state machine pattern. Several events are send to the state machine, which moves the pointer from one state to the next, according to the transitions, and executes the actions, referenced in the transitions. But now a new instance of the class "PointSetInteractor" has to be build. So we reuse the pattern and let the current state pointer of the new object point to the start state of the pattern "pointset". The implementation of the actions is \b not done inside a class of the pattern (\a state, \a transition, \a action), it is done inside a state machine class (see the reference for mitkStatemachine). \subsection StartupInteraction Loading Statemachines at Runtime During startup all state machine-patterns are checked for not having states, that have no transitions leading out of it (dead states), or states, that have no transitions leading into it (magic states) [Bin99 p. 183]. If an error is found, an error-message will be displayed \b and the state machine will be loaded. See mitk::StateMachineFactory \subsection InteractionEvents Events During runtime, events are thrown from e.g. the mouse to the operation system, are then send to your graphical user interface and from there it has to be send to the MITK-object called \a mitkEventMapper. This class maps the events received with an internal list of all events that can be understood in MITK. The definition of all understandable events is also located in the XML-File the state machines are defined in. If the received event can be found in the list, an internal mitk-eventnumber is added to the event and send to the object \a mitkGlobalInteraction. See mitk::Event, mitk::GlobalInteraction \subsection GlobalInteraction GlobalInteraction -This object administers the transmit of events to registered state machines. There can be two kinds of state machines, the ones that are only listening and ones that also change data. Listening state machines are here called Listeners and state machines, that also change data, are called Interactors. \b Note that the discrimination between \a Listener and \a Interactor is only made in mitkGlobalInteraction. As Listener an object derived from class StateMachine can be added and removed from GlobalInteraction and as Interactor an object derived from class Interactor can be added and removed. See the interaction class diagram for further information. +This object administers the transmission of events to registered state machines. There can be two kinds of state machines, the ones that are only listening and ones that also change data. Listening state machines are here called Listeners and state machines that also change data are called Interactors. \b Note that the discrimination between \a Listener and \a Interactor is only made in mitkGlobalInteraction. As Listener an object derived from class StateMachine can be added and removed from GlobalInteraction and as Interactor an object derived from class Interactor can be added and removed. See the interaction class diagram for further information. -To add or remove a state machine to the list of registered interactors, call \a AddInteractor or \a RemoveInteractor of \a GlobalInteraction or to add or remove a listener call \a AddListener of \a RemoveListener. Listeners are always provided with the events. Interactors shall only be provided with an event, if they can handle the event. Because of that, the method CanHandleEvent, implemented in each Interactor, is called. This method analyses the event and returns a value between 0 (can't handle event) and 1 (can handle the event). Information, that can help to calculate this jurisdiction can be the bounding box of the interacted data and the picked mouse-position stored in the event. +To add or remove a state machine to the list of registered interactors, call \a AddInteractor or \a RemoveInteractor of \a GlobalInteraction or to add or remove a listener call \a AddListener of \a RemoveListener. Listeners are always provided with the events. Interactors shall only be provided with an event, if they can handle the event. Because of that the method CanHandleEvent is called, which is implemented in each Interactor. This method analyses the event and returns a value between 0 (can't handle event) and 1 (can handle the event). Information, that can help to calculate this jurisdiction can be the bounding box of the interacted data and the picked mouse-position stored in the event. So after the object \a GlobalInteraction has received an event, it sends this event to all registered Listeners and then asks all registered Interactors through the method \a CanHandleEvent how good each Interactor can handle this event. The Interactor which can handle the event the best receives the event. Also see the documented code in \a mitkGlobalInteraction. To not ask all registered interactors on a new event, the class \a Interactor also has a mode, which can be one of the following: deselected, subselected (deprecated since HierarchicalInteraction has been removed), selected. These modes are also used for the event mechanism. -If an interactor is in a state, where the user builds up a graphical object, it is likely, that the following events are also for the build of the object. Here the interactor is in mode selected as long as the interactor couldn't handle an event. Then it changes to mode deselected. The mode changes are done in the actions through operations (described further down) and so declared inside the interaction pattern. +If an interactor is in a state, where the user builds up a graphical object, it is likely that the following events are also for the build of the object. Here the interactor is in mode selected as long as the interactor couldn't handle an event. Then it changes to mode deselected. The mode changes are done in the actions through operations (described further down) and so declared inside the interaction pattern. See mitk::GlobalInteraction \subsection Interactors Interactors The class \a Interactor is the superclass for all state machines, that solve the interaction for a single data-object. An example is the class \a mitkPointSetInteractor which handles the interaction of the data \a mitkPointSet. Inside the class \a mitkPointSetInteractor all actions, defined in the interaction-pattern "pointsetinteractor", are implemented. Inside the implementation of these actions (\a ExecuteAction(...) ), so called \a mitkOperations are created, filled with information and send to the \a mitkUndoController and to \a mitkOperactionActor (the data, the interaction is handled for). See mitk::Interactor \subsection ExecOperations Executing Operations The class mitkOperation and its subclasses basically holds all information needed to execute a certain change of data. This change of data is only done inside the data-class itself, which is derived from the interface \a mitkOperationActor. Interactors handle the interaction through state-differentiation and combine all informations about the change in a \a mitkOperation and send this operation-object to the method ExecuteOperation (of data-class). Here the necessary data is extracted and then the change of data is performed. When the operation-object, here called do-operation, is created inside the method \a ExecuteAction (in class \a mitkInteractor), an undo-operation is also created and together with the do-operation stored in an object called \a OperationEvent. After the Interactor has sent the do-operation to the data, the operation-event-object then is sent to the instance of class \a mitkUndoController, which administrates the undo-mechanism. See mitk::Operation, mitk::OperationActor \subsection UndoController UndoController The instance of class \a mitkUndoController administrates different Undo-Models. Currently implemented is a limited linear Undo. Only one Undo-Model can be activated at a time. The UndoController sends the received operation events further to the current Undo-Model, which then stores it according to the model. If the method \a Undo() of UndoController is called (e.g. Undo-Button pressed from ) the call is send to the current Undo-Model. Here the undo-operation from the last operation event in list is taken and send to the data, referenced in a pointer which is also stored in the operation-event. A call of the method \a Redo() is handled accordingly. See mitk::UndoController, mitk::LimitedLinearUndo \subsection references References [Bin99] Robert V. Binder. Testing Object-Oriented Systems: Models, Patterns, and Tools. Addison-Wesley, 1999 */ diff --git a/Documentation/Doxygen/Overview.dox b/Documentation/Doxygen/Overview.dox index 573969ae13..9a8621f165 100644 --- a/Documentation/Doxygen/Overview.dox +++ b/Documentation/Doxygen/Overview.dox @@ -1,46 +1,52 @@ /** \page OverviewPage Overview on the Medical Imaging Interaction Toolkit (MITK) Four issues are important for advanced interactive medical imaging software: -\li the data, not only the original images, but also other data like segmentation results, + Today, there are two major open-source toolkits for visualization and image processing: -\li the Visualization Toolkit (VTK), which provides "a wide variety + ITK provides powerful algorithms, but is not designed for visualization or interaction. VTK has powerful visualization capabilities, but only low-level support for interaction such as picking methods, rotation, movement and scaling of objects. Support for high level interactions with data as, for example, the interactive construction and modification of deformable models, and undo-capabilities is outside the scope of VTK. Furthermore, it is designed to create \em one \em kind of view on the data. There is no special assistance to realized multiple, different views of the data (as a multiplanar reconstruction and a 3D rendering). Finally, VTK supports only 2D and 3D data, not 3D+t data, which are required for some medical applications, and there is currently no convenient possibility to combine VTK with ITK. The aim of MITK is to use VTK and ITK, allow an easy combination of both and extend them with those features, which are outside the scope of both. \section DesignOverview Design Overview The basic design concept of MITK is model-view-controller (MVC). Although some people think MVC is out-of-date, it is useful in this case (and also we do not really use pure MVC): we have data (\em model), on which we want to have different @em views and we want to interact with the data (\em controller), which should result in a simultaneous and consistent update of all views. -\li data management classes -\li + ... */ diff --git a/Modules/Bundles/org.mitk.gui.qt.imagecropper/documentation/UserManual/QmitkImageCropperUserManual.dox b/Modules/Bundles/org.mitk.gui.qt.imagecropper/documentation/UserManual/QmitkImageCropperUserManual.dox index 91561b70e2..dfaf6256e0 100644 --- a/Modules/Bundles/org.mitk.gui.qt.imagecropper/documentation/UserManual/QmitkImageCropperUserManual.dox +++ b/Modules/Bundles/org.mitk.gui.qt.imagecropper/documentation/UserManual/QmitkImageCropperUserManual.dox @@ -1,41 +1,41 @@ /** \bundlemainpage{org_imagecropper} The Image Cropper Module \image html icon.png "Icon of the Module" Available sections: - \ref QmitkImageCropperUserManualOverview - \ref QmitkImageCropperUserManualFeatures - \ref QmitkImageCropperUserManualUsage - \ref QmitkImageCropperUserManualTroubleshooting \section QmitkImageCropperUserManualOverview Overview ImageCropper is a functionality which allows the user to manually crop an image by means of a bounding box. The functionality does not create a new image, it only hides parts of the original image. \section QmitkImageCropperUserManualFeatures Features - Crop a selected image using a bounding box. - Set the border voxels to a specific user defined value after cropping. \section QmitkImageCropperUserManualUsage Usage First select from the drop down menu the image to crop. The three 2D widgets show yellow rectangles representing the bounding box in each plane (transversal, sagital, coronal ), the lower right 3D widget shows the entire volume of the bounding box.\n - To change the size of bounding box press control + right click and move the cursor up/down or left/right in one of the three 2D views.\n -- To change the oriantation of bounding box press control + middle click and move the cursor up/down or left/right in one of the three 2D views.\n +- To change the orientation of the bounding box press control + middle click and move the cursor up/down or left/right in one of the three 2D views.\n - To move the bounding box press control + left click and move the cursor to the wanted position in one of the three 2D views.\n To show the result press the [crop] button.\n To crop the image again press the [New bounding box!] button.\n\n All actions can be undone by using the global undo function (Ctrl+Z).\n To set the border voxels to a specific value after cropping the image, activate the corresponding checkbox and choose a gray value. \section QmitkImageCropperUserManualTroubleshooting Troubleshooting */ diff --git a/Modules/Bundles/org.mitk.gui.qt.imagestatistics/documentation/UserManual/QmitkImageStatistics.dox b/Modules/Bundles/org.mitk.gui.qt.imagestatistics/documentation/UserManual/QmitkImageStatistics.dox index 36bf034f43..37b98277ca 100644 --- a/Modules/Bundles/org.mitk.gui.qt.imagestatistics/documentation/UserManual/QmitkImageStatistics.dox +++ b/Modules/Bundles/org.mitk.gui.qt.imagestatistics/documentation/UserManual/QmitkImageStatistics.dox @@ -1,44 +1,44 @@ /** \bundlemainpage{org_imagestatistics} The Image Statistics Module \image html ImageStatistic_48.png "Icon of the Module" \section QmitkImageStatisticsUserManualSummary Summary This module provides an easy interface to quickly compute some features of a whole image or a region of interest. This document will tell you how to use this module, but it is assumed that you already know how to use MITK in general. Please see \ref QmitkImageStatisticsUserManualDetails for more detailed information on usage and supported filters. If you encounter problems using the module, please have a look at the \ref QmitkImageStatisticsUserManualTrouble page. \section QmitkImageStatisticsUserManualDetails Details Manual sections: - \ref QmitkImageStatisticsUserManualOverview - \ref QmitkImageStatisticsUserManualUsage - \ref QmitkImageStatisticsUserManualTrouble \section QmitkImageStatisticsUserManualOverview Overview This module provides an easy interface to quickly compute some features of a whole image or a region of interest. \image html Screenshot1.png "The interface" \section QmitkImageStatisticsUserManualUsage Usage -After selection of an image or a binary mask of an image in the datamanader the Image Statistics module shows some statistical information. If a mask is selected the name of the mask and the name of the image this mask is applied to are shown at the top. +After selection of an image or a binary mask of an image in the datamanader, the Image Statistics module shows some statistical information. If a mask is selected, the name of the mask and the name of the image, to which the mask is applied, are shown at the top. -Below that are the statistics window, which displays the calculated statistical features (such as mean, standard deviation...) and the histogram. +Below it is the statistics window which displays the calculated statistical features (such as mean, standard deviation...) and the histogram. At the bottom of the module are two buttons. They copy their respective data in csv format to the clipboard. \section QmitkImageStatisticsUserManualTrouble Troubleshooting No known problems. All other problems.
Please report to the MITK mailing list. See http://www.mitk.org/wiki/Mailinglist on how to do this. */ diff --git a/Modules/Bundles/org.mitk.gui.qt.materialeditor/documentation/UserManual/QmitkSurfaceMaterialEditor.dox b/Modules/Bundles/org.mitk.gui.qt.materialeditor/documentation/UserManual/QmitkSurfaceMaterialEditor.dox index 079cf83f29..c1ad65b3ea 100644 --- a/Modules/Bundles/org.mitk.gui.qt.materialeditor/documentation/UserManual/QmitkSurfaceMaterialEditor.dox +++ b/Modules/Bundles/org.mitk.gui.qt.materialeditor/documentation/UserManual/QmitkSurfaceMaterialEditor.dox @@ -1,10 +1,10 @@ /** \bundlemainpage{org_surfacematerialeditor} The Surface Material Editor \image html SurfaceMaterialEditorIcon.png "Icon of the Module" -The Surface Material Editor shows the properties of the selected data, that are relevant for the selected shader. These properties can be filtered to find a specific property. The preview window shows the representation of a neutral 3D object with the currently selected settings. +The Surface Material Editor shows the properties of the selected data that are relevant for the selected shader. These properties can be filtered to find a specific property. The preview window shows the representation of a neutral 3D object with the currently selected settings. \image html QmitkSurfaceMaterialEditorGui.png "The Surface Material Editor" */ \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.moviemaker/documentation/UserManual/QmitkMovieMakerUserManual.dox b/Modules/Bundles/org.mitk.gui.qt.moviemaker/documentation/UserManual/QmitkMovieMakerUserManual.dox index 8cfbb729ca..2e0780d8b9 100644 --- a/Modules/Bundles/org.mitk.gui.qt.moviemaker/documentation/UserManual/QmitkMovieMakerUserManual.dox +++ b/Modules/Bundles/org.mitk.gui.qt.moviemaker/documentation/UserManual/QmitkMovieMakerUserManual.dox @@ -1,45 +1,45 @@ /** \bundlemainpage{org_moviemaker} The Movie Maker Module \image html icon.png "Icon of the Module" Available sections: - \ref QmitkMovieMakerUserManualOverview - \ref QmitkMovieMakerUserManualFeatures - \ref QmitkMovieMakerUserManualUsage \section QmitkMovieMakerUserManualOverview Overview MovieMaker is a functionality for easily creating fancy movies from scenes displayed in MITK widgets. It is also possible to slide through your data, automatically rotate 3D scenes and take screenshots of widgets. \section QmitkMovieMakerUserManualFeatures Features - The Movie Maker allows you to create movies and screenshots from within MITK. It can automatically scroll thorugh timesteps and slices while recording a movie. This way you can record visualizations like a beating heart or a rotating skull. + The Movie Maker allows you to create movies and screenshots from within MITK. It can automatically scroll thorugh timesteps and slices while recording a movie. This way, you can record visualizations like a beating heart or a rotating skull. \section QmitkMovieMakerUserManualUsage Usage \image html QmitkMovieMakerControlArea.png "A view of the command area of QmitkMovieMaker" \subsection QmitkMovieMakerUserManualWindowSelection Window selection -With the first two drop down boxes you can choose which window you want to step through and which window you want to record in. left clicking inside a window will set both drop down boxes to that one, but you can choose different windows for stepping and recording. +With the first two drop down boxes, you can choose which window you want to step through and which window you want to record in. Left clicking inside a window will set both drop down boxes to that window, but you can choose different windows for stepping and recording. -The first drop down box defines the window along which slices will be stepped through if stepping is set to spatial (see below). The second denotes the window which content will be recorded. +The first drop down box defines the window along which slices will be stepped through if stepping is set to spatial (see below). The second denotes the window from which the content will be recorded. -\subsection QmitkMovieMakerUserManualRecordingOptions Recording options +\subsection QmitkMovieMakerUserManualRecordingOptions Recording Options The slider can be used to step through the slices manually while not recording. Start and stop control a preview of what a video would look like. -The buttons in the bottom part of this section can be used to create movies (windows only) or screenshots. Clicking opens a file %dialog, where a name can be selected. After confirmation a screenshot or movie, according to the playing options, is created. +The buttons in the bottom part of this section can be used to create movies (windows only) or screenshots. Clicking opens a file %dialog where a name can be selected. After confirmation, a screenshot or movie is created according to the playing options. -\subsection QmitkMovieMakerUserManualPlayingOptions Playing options +\subsection QmitkMovieMakerUserManualPlayingOptions Playing Options The first section controls whether the movie steps through slices (if a 2D view is selected), rotate the shown scene (if a 3D view is selected), or step through time steps (if set to temporal and a time resolved dataset is selected). If set to combined, a combination of both above options is used, with their speed relation set via the S/T Relation Spinbox. -In the second section the direction of stepping can be set. Options are: Forward, backward and Ping-Pong, which is back-and-forth. Via the spinbox, stepping speed can be set (total time in seconds). +In the second section the direction of stepping can be set. Options are: Forward, backward and Ping-Pong, which is back-and-forth.The stepping speed can be set via the spinbox(total time in seconds). Although stepping speed is a total time in sec., this can not always be achieved. As a minimal frame rate of 25 fps is assumed to provide smooth movies, a dataset with only 25 slices will always be stepped through in 1 sec or faster. */ diff --git a/Modules/Bundles/org.mitk.gui.qt.pointsetinteraction/documentation/UserManual/QmitkPointSetInteractionUserManual.dox b/Modules/Bundles/org.mitk.gui.qt.pointsetinteraction/documentation/UserManual/QmitkPointSetInteractionUserManual.dox index 297810e34e..1846ec2e17 100644 --- a/Modules/Bundles/org.mitk.gui.qt.pointsetinteraction/documentation/UserManual/QmitkPointSetInteractionUserManual.dox +++ b/Modules/Bundles/org.mitk.gui.qt.pointsetinteraction/documentation/UserManual/QmitkPointSetInteractionUserManual.dox @@ -1,38 +1,38 @@ /** \bundlemainpage{org_pointsetinteraction} The Point Set Interaction Module \image html pointset_interaction.png "Icon of the Module" Available sections: - \ref QmitkPointSetInteractionUserManualOverview - \ref QmitkPointSetInteractionUserManualDetails \section QmitkPointSetInteractionUserManualOverview Overview This functionality allows you to define multiple sets of points, to fill them with points and to save them in so called PointSets. \image html QmitkPointSetInteraction.png "MITK with the QmitkPointSetInteraction functionality" This document will tell you how to use this functionality, but it is assumed that you already know how to navigate through the slices of an image using the four window view. Please read the application manual for more information. \section QmitkPointSetInteractionUserManualDetails Details -First of all you have to select a PointSet to use this functionality. Therefore you have to select the point set in the data manager. If there are currently no point sets in the data tree you have to first add a new point set to the data tree. This is done by clicking the "Add pointset..." +First of all you have to select a PointSet to use this functionality. Therefore, you have to select the point set in the data manager. If there are currently no point sets in the data tree, you have to first add a new point set to the data tree. This is done by clicking the "Add pointset..." button. \image html AddPointSet.png "The Add pointset... dialog" -In the pop-up dialog you have to specify a name for the new point set. this is also the node for the new data tree item. +In the pop-up dialog, you have to specify a name for the new point set. This is also the node for the new data tree item. \image html CurrentPointSetArea.png "The Current pointset area" -The "Current pointset" area contains a list of points. Within this area, all points for the current point set node are listed. T To set points you have to toggle the "Set Points" button, the leftmost of the four buttons on the bottom of the view. Points can be defined by performing a left mousebutton click while holding the "Shift"-key pressed in the four window view. +The "Current pointset" area contains a list of points. Within this area, all points for the current point set node are listed. To set points you have to toggle the "Set Points" button, the leftmost of the four buttons on the bottom of the view. Points can be defined by performing a left mouse button click while holding the "Shift"-key pressed in the four window view. To erase all points from the list press the next button. The user is prompted to confirm the decision. If you want to delete only a single point, left click on it in the list and then press delete on your keyboard. -With the third button a previously saved point set can be loaded and all of its points are shown in the list and the four window view. The user is prompted to select the file to be loaded. The file extension is ".mps". On the right of this button is the save button. With this function the entire point set can be saved to harddisk. The user is prompted to select a filename. Pointsets were saved in XML fileformat but have to have a ".mps" file extension. +With the third button, a previously saved point set can be loaded and all of its points are shown in the list and the four window view. The user is prompted to select the file to be loaded. The file extension is ".mps". On the right of this button is the save button. With this function the entire point set can be saved to the harddrive. The user is prompted to select a filename. Pointsets are saved in XML fileformat but have to have a ".mps" file extension. -You can select points in the render window, if the "Set Points" button is toggled, with a left mouse button click on them. If you keep the mouse button pressed you can move the points by moving the mouse and then release the mouse button. With the delete key you can remove the selected points. +You can select points in the render window, if the "Set Points" button is toggled, with a left mouse button click on them. If you keep the mouse button pressed, you can move the points by moving the mouse and then releasing the mouse button. With the delete key you can remove the selected points. */ \ No newline at end of file diff --git a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/documentation/UserManual/QmitkRegionGrowingUserManual.dox b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/documentation/UserManual/QmitkRegionGrowingUserManual.dox index dae63dd528..ba661680f7 100644 --- a/Modules/Bundles/org.mitk.gui.qt.regiongrowing/documentation/UserManual/QmitkRegionGrowingUserManual.dox +++ b/Modules/Bundles/org.mitk.gui.qt.regiongrowing/documentation/UserManual/QmitkRegionGrowingUserManual.dox @@ -1,29 +1,29 @@ /** \bundlemainpage{org_regiongrowing} The Region Growing Module \image html icon.png "Icon of the Module" Available documentation sections: - \ref QmitkRegionGrowingUserManualOverview - \ref QmitkRegionGrowingUserManualUsage \section QmitkRegionGrowingUserManualOverview Overview -The Region growing module provides mainly a programming example, showing developers how to create new bundle for MITK with graphical user interface (GUI) and which is also using some ITK image filters. +The Region growing module provides a programming example, showing developers how to create new bundles for MITK with a graphical user interface (GUI) that also uses some ITK image filters. For the programmers: this functionality is the result of tutorial step 9 \section QmitkRegionGrowingUserManualUsage Usage */ diff --git a/Modules/Bundles/org.mitk.gui.qt.segmentation/documentation/UserManual/org_mitk_gui_qt_segmentation.dox b/Modules/Bundles/org.mitk.gui.qt.segmentation/documentation/UserManual/org_mitk_gui_qt_segmentation.dox index 0764b0ad7d..c39be0a450 100644 --- a/Modules/Bundles/org.mitk.gui.qt.segmentation/documentation/UserManual/org_mitk_gui_qt_segmentation.dox +++ b/Modules/Bundles/org.mitk.gui.qt.segmentation/documentation/UserManual/org_mitk_gui_qt_segmentation.dox @@ -1,268 +1,268 @@ /** \bundlemainpage{org_segment} The Segmentation Module \image html segmentation.png "Icon of the Module" -Some of the below described features are not available in the open-source part of the MITK-3M3-Application. +Some of the features described below are not available in the open-source part of the MITK-3M3-Application. Available sections: - \ref org_mitk_gui_qt_segmentationUserManualOverview - \ref org_mitk_gui_qt_segmentationUserManualTechnical - \ref org_mitk_gui_qt_segmentationUserManualImageSelection - \ref org_mitk_gui_qt_segmentationUserManualManualKringeling - \ref org_mitk_gui_qt_segmentationUserManualManualKringeling1 - \ref org_mitk_gui_qt_segmentationUserManualManualKringeling2 - \ref org_mitk_gui_qt_segmentationUserManualManualKringeling3 - \ref org_mitk_gui_qt_segmentationUserManualManualKringeling4 - \ref org_mitk_gui_qt_segmentationUserManualManualKringeling5 - \ref org_mitk_gui_qt_segmentationUserManualOrganSegmentation - \ref org_mitk_gui_qt_segmentationUserManualOrganSegmentation1 - \ref org_mitk_gui_qt_segmentationUserManualOrganSegmentation2 - \ref org_mitk_gui_qt_segmentationUserManualOrganSegmentation99 - \ref org_mitk_gui_qt_segmentationUserManualLesionSegmentation - \ref org_mitk_gui_qt_segmentationUserManualPostprocessing - \ref org_mitk_gui_qt_segmentationUserManualSurfaceMasking - \ref org_mitk_gui_qt_segmentationUserManualTechnicalDetail \section org_mitk_gui_qt_segmentationUserManualOverview Overview The Segmentation perspective allows you to create segmentations of anatomical and pathological structures in medical images of the human body. -The perspective groups a number of tools for +The perspective groups a number of tools which can be used for: \image html org_mitk_gui_qt_segmentationIMGapplication.png Segmentation perspective consisting of the Data Manager view and the Segmentation view If you wonder what segmentations are good for, we shortly revisit the concept of a segmentation here. A CT or MR image is made up of volume of physical measurements (volume elements are called voxels). In CT images, for example, the gray value of each voxel corresponds to the mass absorbtion coefficient for X-rays in this voxel, which is similar in many %parts of the human body. The gray value does not contain any further information, so the computer does not know whether a given voxel is part of the body or the background, nor can it tell a brain from a liver. -However, the distinction between a foreground and a background structure is required when +However, the distinction between a foreground and a background structure is required when: Creating this distinction between foreground and background is called segmentation. The Segmentation perspective of MITKApp uses a voxel based approach to segmentation, i.e. each voxel of an image must be completely assigned to either foreground or background. -This is in contrast to some other applications which might use an approach based on contours, where the border of a structure might cut a voxel into two %parts. +This is, in contrast to some other applications which might use an approach based on contours, where the border of a structure might cut a voxel into two %parts. The remainder of this document will summarize the features of the Segmentation perspective and how they are used. -\section org_mitk_gui_qt_segmentationUserManualTechnical Technical issues +\section org_mitk_gui_qt_segmentationUserManualTechnical Technical Issues The Segmentation perspective makes a number of assumptions. To know what this module can be used for, it will help you to know that: -\section org_mitk_gui_qt_segmentationUserManualImageSelection Image selection +\section org_mitk_gui_qt_segmentationUserManualImageSelection Image Selection The Segmentation perspective makes use of the Data Manager view to give you an overview of all images and segmentations. -\image html org_mitk_gui_qt_segmentationIMGselection.png Data Manager is used for selection of the current segmentation. The reference image is selected in the drop down box of the control area. +\image html org_mitk_gui_qt_segmentationIMGselection.png Data Manager is used for selecting the current segmentation. The reference image is selected in the drop down box of the control area. -To select the reference image (e.g. the original CT/MR image) use the drop down box in the control area of the Segmentation view. The segmentation image that has been selected in the Data Manager is displayed below the drop down box. If no segmentation image exists or none is selected create a new segmentation image by using the "New segmentation" button. +To select the reference image (e.g. the original CT/MR image) use the drop down box in the control area of the Segmentation view. The segmentation image selected in the Data Manager is displayed below the drop down box. If no segmentation image exists or none is selected create a new segmentation image by using the "New segmentation" button. Some items of the graphical user interface might be disabled when no image is selected. -In any case the application will give you hints if a selection is needed. +In any case, the application will give you hints if a selection is needed. -\section org_mitk_gui_qt_segmentationUserManualManualKringeling Manual contouring +\section org_mitk_gui_qt_segmentationUserManualManualKringeling Manual Contouring With manual contouring you define which voxels are part of the segmentation and which are not. This allows you to create segmentations of any structeres that you may find in an image, even if they are not part of the human body. You might also use manual contouring to correct segmentations that result from sub-optimal automatic methods. The drawback of manual contouring is that you might need to define contours on many 2D slices. However, this is moderated by the interpolation feature, which will make suggestions for a segmentation. -\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling1 Creating new segmentations +\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling1 Creating New Segmentations Unless you want to edit existing segmentations, you have to create a new, empty segmentation before you can edit it. To do so, click the "New manual segmentation" button. Input fields will appear where you can choose a name for the new segmentation and a color for its display. Click the checkmark button to confirm or the X button to cancel the new segmentation. Notice that the input field suggests names once you %start typing and that it also suggests colors for known organ names. -If you use names that are not yet known to the application, it will automatically remember these and consider them the next time you create a new segmentation. +If you use names that are not yet known to the application, it will automatically remember these names and consider them the next time you create a new segmentation. Once you created a new segmentation, you can notice a new item with the "binary mask" icon in the Data Manager tree view. -This item is automatically selected for you, so that you can %start editing the new segmentation right away. +This item is automatically selected for you, allowing you to %start editing the new segmentation right away. -\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling2 Selecting segmentations for editing +\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling2 Selecting Segmentations for Editing As you might want to have segmentations of multiple structures in a single patient image, the application needs to know which of them to use for editing. -You select a segmenation by clicking it in the tree view of Data Manager. Note that usually segmentations are displayed as sub-items of "their" patient image. -In the rare case where you need to edit a segmentation that is not displayed as a a sub-item, you can click both the original image AND the segmentation while holding down CTRL on the keyboard. +You select a segmenation by clicking it in the tree view of Data Manager. Note that segmentations are usually displayed as sub-items of "their" patient image. +In the rare case, where you need to edit a segmentation that is not displayed as a a sub-item, you can click both the original image AND the segmentation while holding down CTRL on the keyboard. -When a selection is made, the Segmentation view will hide all but the selected segmentation and the corresponding original image. -When there are multiple segmentations, the unselected ones will remain in Data Manager, you can make them visible at any time by selecting them. -If you want to see all segmenations at the same time, just clear the selection by clicking outside all the tree items in Data Manager. +When a selection is made, the Segmentation View will hide all but the selected segmentation and the corresponding original image. +When there are multiple segmentations, the unselected ones will remain in the Data Manager, you can make them visible at any time by selecting them. +If you want to see all segmenations at the same time, just clear the selection by clicking outside all the tree items in the Data Manager. -\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling3 Selecting editing tools +\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling3 Selecting Editing Tools If you are familiar with MITKApp, you know that clicking and moving the mouse in any of the 2D render windows will move around the crosshair that defines what part of the image is displayed. This behavior is disabled while any of the manual segmentation tools are active -- otherwise you might have a hard time concentrating on the contour you are drawing. To %start using one of the editing tools, click its button the the displayed toolbox. The selected editing tool will be active and its corresponding button will stay pressed until you click the button again. Selecting a different tool also deactivates the previous one. If you have to delineate a lot of images, you should try using shortcuts to switch tools. Just hit the first letter of each tool to activate it (A for Add, S for Subtract, etc.). -\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling4 Using editing tools +\subsection org_mitk_gui_qt_segmentationUserManualManualKringeling4 Using Editing Tools -All of the editing tools work by the same principle: you press the mouse (left button) anywhere in a 2D window (any of the orientations transversal, sagittal, or frontal), move the mouse while holding the mouse button and release to finish the editing action. -All tools work on the original slices of the patient image, i.e. with some rotated/tilted MR image volumes you need to perform a "reinit" option in Data Manger before you are able to use editing tools. +All of the editing tools work by the same principle: you use the mouse (left button) to click anywhere in a 2D window (any of the orientations transversal, sagittal, or frontal), move the mouse while holding the mouse button and release to finish the editing action. +All tools work on the original slices of the patient image, i.e. with some rotated/tilted MR image volumes you need to perform a "reinit" option in the Data Manger before you are able to use the editing tools. Multi-step undo and redo is fully supported by all editing tools. Use the application-wide undo button in the toolbar to revert erroneous %actions. -\image html org_mitk_gui_qt_segmentationIMGiconAddSubtract.png Add and Subtract tools +\image html org_mitk_gui_qt_segmentationIMGiconAddSubtract.png Add and Subtract Tools Use the left mouse button to draw a closed contour. When releasing the mouse button, the contour will be added (Add tool) to or removed from (Subtract tool) the current segmentation. -Hold down the CTRL key to invert the operation (this will switch tools temporarily to allow you quick corrections). +Hold down the CTRL key to invert the operation (this will switch tools temporarily to allow for quick corrections). -\image html org_mitk_gui_qt_segmentationIMGiconPaintWipe.png Paint and Wipe tools +\image html org_mitk_gui_qt_segmentationIMGiconPaintWipe.png Paint and Wipe Tools Use the slider below the toolbox to change the radius of these round paintbrush tools. Move the mouse in any 2D window and press the left button to draw or erase pixels. As the Add/Subtract tools, holding CTRL while drawing will invert the current tool's behavior. -\image html org_mitk_gui_qt_segmentationIMGiconRegionGrowing.png Region Growing tool +\image html org_mitk_gui_qt_segmentationIMGiconRegionGrowing.png Region Growing Tool -Click at one point in a 2D slice widget to add an image region by the region growing tool to the segmentation. Moving up the cursor while holding the left mouse button widens the range for the included grey values, moving it down narrows it. +Click at one point in a 2D slice widget to add an image region to the segmentation with the region growing tool. Moving up the cursor while holding the left mouse button widens the range for the included grey values; moving it down narrows it. When working on an image with a high range of grey values, the selection range can be influenced more strongly by moving the cursor at higher velocity. Region Growing selects all pixels around the mouse cursor that have a similar gray value as the pixel below the mouse cursor. This enables you to quickly create segmentations of structures that have a good contrast to surrounding tissue, e.g. the lungs. The tool will select more or less pixels (corresponding to a changing gray value interval width) when you move the mouse up or down while holding down the left mouse button. -A common issue with region growing is so called "leakage", which happens when the structure of interest is connected to other pixels of similar gray values through a narrow "bridge" at the border of the structure. -The Region Growing tool comes with "leakage detection/removal" feature. If leakage happens, you can left-click into the leakage region and the tool will try to automatically remove this region (see illustration below). +A common issue with region growing is the so called "leakage" which happens when the structure of interest is connected to other pixels, of similar gray values, through a narrow "bridge" at the border of the structure. +The Region Growing tool comes with a "leakage detection/removal" feature. If leakage happens, you can left-click into the leakage region and the tool will try to automatically remove this region (see illustration below). \image html org_mitk_gui_qt_segmentationIMGleakage.png Leakage correction feature of the Region Growing tool -\image html org_mitk_gui_qt_segmentationIMGiconCorrection.png Correction tool +\image html org_mitk_gui_qt_segmentationIMGiconCorrection.png Correction Tool You do not have to draw a closed contour to use the Correction tool and do not need to switch between the Add and Substract tool to perform small corrective changes. The following figure shows the usage of this tool: -\image html org_mitk_gui_qt_segmentationIMGcorrectionActions.png %actions of the Correction tool illustrated +\image html org_mitk_gui_qt_segmentationIMGcorrectionActions.png %Actions of the Correction tool illustrated. -\image html org_mitk_gui_qt_segmentationIMGiconFill.png Fill tool +\image html org_mitk_gui_qt_segmentationIMGiconFill.png Fill Tool Left-click inside a segmentation with holes to completely fill all holes. -\image html org_mitk_gui_qt_segmentationIMGiconErase.png Erase tool +\image html org_mitk_gui_qt_segmentationIMGiconErase.png Erase Tool This tool removes a connected part of pixels that form a segmentation. You may use it to remove so called islands (see picture) or to clear a whole slice at once (hold CTRL while clicking). \subsection org_mitk_gui_qt_segmentationUserManualManualKringeling5 Interpolation Creating segmentations for modern CT volumes is very time-consuming, because strucutres of interest can easily cover a range of 50 or more slices. The Segmentation view offers a helpful feature for these cases: "Interpolation" creates suggestions for a segmentation whenever you have a slice that Interpolated suggestions are displayed in a different way than manual segmentations are, until you "accept" them as part of the segmentation. To accept single slices, click the "Accept" button below the toolbox. -If you have segmented a whole organ in a every-x-slices way, you may also review the interpolations and then accept all of them at once by clicking "... all slices". +If you have segmented a whole organ in every-x-slice, you may also review the interpolations and then accept all of them at once by clicking "... all slices". -\section org_mitk_gui_qt_segmentationUserManualOrganSegmentation Organ segmentation +\section org_mitk_gui_qt_segmentationUserManualOrganSegmentation Organ Segmentation The manual contouring described above is a fallback option that will work for any kind of images and structures of interest. However, manual contouring is very time-consuming and tedious. This is why a major part of image analysis research is working towards automatic segmentation methods. -The Segmentation view comprises a number of easy-to-use tools for segmentation of CT images (Liver) and MR image (left ventricle and wall, left and right lung). +The Segmentation View comprises a number of easy-to-use tools for segmentation of CT images (Liver) and MR image (left ventricle and wall, left and right lung). -\subsection org_mitk_gui_qt_segmentationUserManualOrganSegmentation1 Liver on CT images +\subsection org_mitk_gui_qt_segmentationUserManualOrganSegmentation1 Liver on CT Images -On CT image volumes, preferrably with contrast agent in the portal venous phase, the Liver tool will fully automatically analyze and segment the image. +On CT image volumes, preferrably with a contrast agent in the portal venous phase, the Liver tool will fully automatically analyze and segment the image. All you have to do is to load and select the image, then click the "Liver" button. During the process, which takes a minute or two, you will get visual progress feedback by means of a contour that moves closer and closer to the real liver boundaries. -\subsection org_mitk_gui_qt_segmentationUserManualOrganSegmentation2 Heart, lung, and hippocampus on MRI +\subsection org_mitk_gui_qt_segmentationUserManualOrganSegmentation2 Heart, Lung, and Hippocampus on MRI While liver segmentation is performed fully automatic, the following tools for segmentation of the heart, the lungs, and the hippocampus need a minimum amount of guidance. Click one of the buttons on the "Organ segmentation" page to add an average %model of the respective organ to the image. This %model can be dragged to the right position by using the left mouse button while holding down the CTRL key. -You can also use CTRL+middle mouse button to rotate or CTRL+right mouse button to scale the %model. +You can also use CTRL + middle mouse button to rotate or CTRL + right mouse button to scale the %model. Before starting the automatic segmentation process by clicking the "Start segmentation" button, try placing the %model closely to the organ in the MR image (in most cases, you do not need to rotate or scale the %model). -During the segmentation process, a green contour that moves closer and closer to the real liver boundaries will provide you visual feedback of the segmentation progress. +During the segmentation process, a green contour that moves closer and closer to the real liver boundaries will provide you with visual feedback of the segmentation progress. The algorithms used for segmentation of the heart and lung are method which need training by a number of example images. They will not work well with other kind of images, so here is a list of the image types that were used for training: -\subsection org_mitk_gui_qt_segmentationUserManualOrganSegmentation99 Other organs +\subsection org_mitk_gui_qt_segmentationUserManualOrganSegmentation99 Other Organs As mentioned in the Heart/Lung section, most of the underlying methods are based on "training". The basic algorithm is versatile and can be applied on all kinds of segmentation problems where the structure of interest is topologically like a sphere (and not like a torus etc.). -If you are interested in other organs than offered by the current version of the Segmentation view, +If you are interested in other organs than those offered by the current version of the Segmentation view, please contact our research team. -\section org_mitk_gui_qt_segmentationUserManualLesionSegmentation Lesion segmentation +\section org_mitk_gui_qt_segmentationUserManualLesionSegmentation Lesion Segmentation -Lesion segmentation is a little different from organ segmentation, because lesions are not part of the healthy body, sometimes having a diffuse border, -and oftenly they are found if varying places all over the body. +Lesion segmentation is a little different from organ segmentation. Since lesions are not part of the healthy body, they sometimes have a diffused border, +and are often found in varying places all over the body. The tools in this section offer efficient ways to create 3D segmentations of such lesions. -The Segmentation view currently offers supoprt for enlarged lymph nodes. +The Segmentation View currently offers supoprt for enlarged lymph nodes. To segment an enlarged lymph node, find a more or less central slice of it, activate the "Lymph Node" tool and draw a rough contour on the inside of the lymph node. When releaseing the mouse button, a segmentation algorithm is started in a background task. The result will become visible after a couple of seconds, but you do not have to wait for it. If you need to segment several lymph nodes, you can continue to inspect the image right after closing the drawn contour. If the lymph node segmentation is not to your content, you can select the "Lymph Node Correction" tool and drag %parts of the lymph node surface towards the right position (works in 3D, not slice-by-slice). This kind of correction helps in many cases. If nothing else helps, you can still use the pure manual tools as a fallback. \section org_mitk_gui_qt_segmentationUserManualPostprocessing Things you can do with segmentations As mentioned in the introduction, segmentations are never an end in themselves. -Consequently, the Segmentation view adds a couple of "post-processing" %actions to Data Manager. +Consequently, the Segmentation view adds a couple of "post-processing" %actions to the Data Manager. These %actions are accessible through the context-menu of segmentations in Data Manager's list view -\image html org_mitk_gui_qt_segmentationIMGDataManagerContextMenu.png Context menu items for segmentations +\image html org_mitk_gui_qt_segmentationIMGDataManagerContextMenu.png Context menu items for segmentations. \section org_mitk_gui_qt_segmentationUserManualSurfaceMasking Surface Masking You can use the surface masking tool to create binary images from a surface which -is used used as a mask on an image. This tast is demonstrated below: +is used used as a mask on an image. This task is demonstrated below: \image html segmentationFromSurfaceBefore.png Load an image and a surface. Select the -image and the surface in the corresponding drop-down boyes (both is selected automatically +image and the surface in the corresponding drop-down boxes (both are selected automatically if there is just one image and one surface) \image html segmentationFromSurfaceAfter.png After clicking "Create segmentation from surface" the newly created binary image is inserted in the DataManager and can be used for further processing \section org_mitk_gui_qt_segmentationUserManualTechnicalDetail Technical Information for Developers For technical specifications see \subpage QmitkSegmentationTechnicalPage and for information on the extensions of the tools system \subpage toolextensions . */ diff --git a/Modules/Bundles/org.mitk.gui.qt.simplemeasurement/documentation/UserManual/QmitkSimpleMeasurementUserManual.dox b/Modules/Bundles/org.mitk.gui.qt.simplemeasurement/documentation/UserManual/QmitkSimpleMeasurementUserManual.dox index 917515eef8..d27f0713d8 100644 --- a/Modules/Bundles/org.mitk.gui.qt.simplemeasurement/documentation/UserManual/QmitkSimpleMeasurementUserManual.dox +++ b/Modules/Bundles/org.mitk.gui.qt.simplemeasurement/documentation/UserManual/QmitkSimpleMeasurementUserManual.dox @@ -1,44 +1,44 @@ /** \bundlemainpage{org_simplemeasurement} The Simple Measurement Module \image html SimpleMeasurementIcon.png "Icon of the Module" Available sections: - \ref QmitkSimpleMeasurementUserManualOverview - \ref QmitkSimpleMeasurementUserManualFeatures - \ref QmitkSimpleMeasurementUserManualUsage \section QmitkSimpleMeasurementUserManualOverview Overview -SimpleMeasurement is a program module that allows to measure distances, angels and pathes on a dataset. +SimpleMeasurement is a program module that allows to measure distances, angles and paths on a dataset. \section QmitkSimpleMeasurementUserManualFeatures Features \section QmitkSimpleMeasurementUserManualUsage Usage -To use the SimpleMeasurement Module, at first a data set must be loaded. That can be done by drag & drop. +To use the SimpleMeasurement Module, a data set must first be loaded. This can be done by drag & drop. Choose the simplemeasurement method you need by pressing the according button. What the different modes mean and how to use them: \image html SimpleMeasurementGUI.png Graphical User Interface of SimpleMeasurement */ diff --git a/Modules/Bundles/org.mitk.gui.qt.viewinitialization/documentation/UserManual/org_mitk_gui_qt_viewinitialization.dox b/Modules/Bundles/org.mitk.gui.qt.viewinitialization/documentation/UserManual/org_mitk_gui_qt_viewinitialization.dox index 8e16c89466..5986a69c0e 100644 --- a/Modules/Bundles/org.mitk.gui.qt.viewinitialization/documentation/UserManual/org_mitk_gui_qt_viewinitialization.dox +++ b/Modules/Bundles/org.mitk.gui.qt.viewinitialization/documentation/UserManual/org_mitk_gui_qt_viewinitialization.dox @@ -1,8 +1,8 @@ /** \bundlemainpage{org_viewinitialitzation} The View Initialization Module \image html viewInitializationIcon.png "Icon of the Module" -This view serves as a sandbox for experimenting with and understanding the geometry initialization parameters. For example to view the transversal slices from above instead of from below. It is not intended for end users, but for developers. +This view serves as a sandbox for understanding and experimenting with the geometry initialization parameters. For example, to view the transversal slices from above instead of from below. It is not intended for end users, but for developers. */ \ No newline at end of file