Bender/Documentation/1.1/Modules/Workflow: Difference between revisions

From KitwarePublic
Jump to navigationJump to search
m (Move right images to the top of each section)
(Review 2), 3), 4), 5) and 6) sections)
Line 1: Line 1:
= Introduction =
= Introduction =
The Workflow module guides the user step-by-step into transforming a volume using a rigging, skinning and posing technique.
The [[Bender/Documentation/1.0/Modules/Workflow|Workflow]] module guides the user step-by-step into transforming a volume using a [http://en.wikipedia.org/wiki/Skeletal_animation rigging, skinning and posing] technique.


Typically, the anatomical pose of a voxelized model is limited by the imaging device used to acquire the underlying data, e.g., MRI and CT scanners have narrow entries. Changing the pose of an already acquired voxelized anatomical model enables new processing of human anatomy in a wide variety of poses. The workflow module allows an operator to specify a rigging that represents the anatomical pose of an existing voxel model, manipulate that rigging into a different anatomical pose, and then generate a new voxelized model that represents the original model resampled into that new position.
Typically, the anatomical pose of a voxelized model is limited by the imaging device used to acquire the underlying data, e.g., MRI and CT scanners have narrow entries. Changing the pose of an already acquired voxelized anatomical model enables new processing of human anatomy in a wide variety of poses. The workflow module allows an operator to specify a rigging that represents the anatomical pose of an existing voxel model, manipulate that rigging into a different anatomical pose, and then generate a new voxelized model that represents the original model resampled into that new position.


This module applies the [http://en.wikipedia.org/wiki/Skeletal_animation Skeletal animation] technique initially conceived for surfaces to voxelized models.  
This module applies to voxelized models the [http://en.wikipedia.org/wiki/Skeletal_animation Skeletal animation] technique initially conceived for surfaces.  


= Details =  
= Details =  
Line 34: Line 34:
===Volume render===
===Volume render===


At anytime, the ''Volume render'' helps to visualize, inspect a volume/labelmap.
The [[#Volume_render|Volume render]] section can volume render intermediate or final volume/labelmap for verification.


* '''Labelmap''': Select the volume/labelmap you want to volume render. The checkbox next to labelmap controls whether the rendering is visible or not.
* '''Labelmap''': Select the volume/labelmap you want to volume render. The checkbox next to labelmap controls whether the rendering is visible or not.
Line 82: Line 82:
== 2) Extract bone and skin ==
== 2) Extract bone and skin ==


The ''2) Extract bone and skin'' page deals with creating the bone and skin model that will serve as references and watch dogs for the posing.
The [[#2.29_Extract_bone_and_skin|2) Extract bone and skin]] page creates the bone and skin surface models to interactively control the posing.


{| width="100%"
{| width="100%"
Line 88: Line 88:
===A) Bone model maker ===
===A) Bone model maker ===


This helps to create the bone model.
This section extracts the surface of the bone label in the input labelmap volume. If there is more than 1 bone label, you can use [[#B.29_Merge_labels| Merge labels]] to merge them into a unique label.


'''Simple workflow'''
'''Simple workflow'''
* '''Output model hierarchy''': Select the output model hierarchy under which the bone model will be stored.
* '''Output model hierarchy''': Select the output model hierarchy under which the bone model will be stored.
* '''Generate bone model''': Using the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/ModelMaker Model Maker], generate the bone model. The bone model will be used when placing the armature. It allows to place the armature bones on top the real bones for a better and more natural posing.
* '''Generate bone model''': Generate the bone model using the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/ModelMaker Model Maker] module. The extracted bone surface is used when placing or adjusting the armature by ensuring the armature bones are on top of the labelmap bones.
'''Advanced workflow'''
'''Advanced workflow'''
* '''Label(s)''': Select the label that will be used to create the bone model. By default, it automatically uses the label from '''Bone Label''' (in ''1) A)'').
* '''Input Labelmap''': Select the labelmap to extract the bone label from.
* '''Go To Models''': Opens the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/Models Models] module.
* '''Label(s)''': Select the label of the input labelmap to create the bone model surface. By default, it is the '''Bone Label''' value in [[#B.29_Merge_labels|Merge labels]].
* '''Go To Model Maker''': Opens the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/ModelMaker Models Maker] module. The [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/ModelMaker Models Maker] allows to generate the model corresponding to any (or all) the label of a given labelmap using marching cubes. The module can give more control over the smoothing, normal computation...
* '''Go To Models''': Open the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/Models Models] module to change the created model properties such as name, opacity, color...
* '''Go To Model Maker''': Open the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/ModelMaker Models Maker] module to access more controls over the model extraction parameters such as smoothing or normal computation. The [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/ModelMaker Models Maker] generates models corresponding to any (or all) label(s) of a given labelmap using marching cubes.  


===B) Skin model maker===
===B) Skin model maker===


This section is in charge of creating the skin model.
This section extracts the surface of the skin label in the input labelmap volume. The algorithm is different than [[#A.29_Bone_model_maker|Bone model maker]] because it solely needs the information of the background label, it creates an outer surface of the Foreground labels (all the labels that are not "Background").  


'''Simple workflow'''
'''Simple workflow'''
* '''Output''': Select the output model for the skin model.
* '''Output''': Select the output model for the skin model.
* '''Toggle skin visibility''': Toggle the visibility of the model selected in '''Output'''.
* '''Toggle skin visibility''': Toggle the visibility of the generated model in '''Output'''.
* '''Generate skin model''': Using the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/GrayscaleModelMaker Grayscale Model Maker], extract the outer surface of the '''Input Labelmap'''. The skin model can be used to help find the right pose with no overlaps by using the ''5) Pose Armature(posing)''.  
* '''Generate skin model''': Using the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/GrayscaleModelMaker Grayscale Model Maker], extract the outer surface of the '''Input Labelmap'''. As posing a surface is computationally faster than posing a labelmap, the skin surface model is interactively transformed when posing the armature to quickly have visual feedback of the pose and make sure there is no flesh collision in [[#5.29_Pose_armature_.28posing.29|5) Pose Armature(posing)]].  
'''Advanced workflow'''
'''Advanced workflow'''
* '''Input Labelmap''': Select the labelmap that will be used to create the skin model.
* '''Input Labelmap''': Select the labelmap volume to extract the skin model from.
* '''Threshold''': Select the threshold that will be used to differentiate the body in the labelmap from the outside (usually air). Default is 0.1.
* '''Threshold''': Select the threshold used to differentiate the body in the labelmap (foreground) from the outside air (background). Default is 0.1 (= 0.0 + epsilon).
* '''Go To Models''': Opens the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/Models Models] module.
* '''Go To Models''': Open the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/Models Models] module to change the created model properties such as name, opacity, color...
* '''Go To Grayscale Model Maker''': Opens the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/GrayscaleModelMaker Grayscale Model Maker] module. The module give more control computation parameters such as the smoothing, the computation of the normal, etc...  
* '''Go To Grayscale Model Maker''': Open the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/GrayscaleModelMaker Grayscale Model Maker] module to access more controls over the model extraction parameters such as smoothing, normal computation.  


| valign="top"|
| valign="top"|
Line 118: Line 119:
== 3) Create armature (rigging) ==
== 3) Create armature (rigging) ==


This section creates the rig of the volume to pose.
'''Note:''' When opening this page, the view will automatically switch to ''3D Only'' to help creating/visualizing the armature.
'''Note:''' When opening this page, the view will automatically switch to ''3D Only'' to help creating/visualizing the armature.


Line 124: Line 126:
===A) Armatures ===
===A) Armatures ===


The armature (either created or loaded) is the interface between the user and the transformations needed to pose the volume models. Once completed, the armature rest positions should not be changed since it would necessitate all the following computation to be updated as well. It is therefore highly encouraged to save the created armature in order to be able to restore it with '''Load armature from model'''.
Manually create or load an existing armature to fit on the bones of the volume to pose. The user is redirected to the [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module for manually editing (e.g. create/edit/remove a bone segment).
The armature (either created or loaded) is the interface between the user and the transformations needed to pose the volume models.  
'''Note:''' Once completed, the armature rest positions should not be changed since it would require all the following computations to be updated as well. It is therefore highly encouraged to save the created armature in order to be able to restore it with '''Load armature from model'''.


'''Simple workflow'''
'''Simple workflow'''
* '''Toggle Skin visibility''': Does the same as '''Toggle Skin Visibility''' in ''2) B)''. It is advised to turn off the skin visibility so when placing bone, they automatically will drop at the same depth as the skeleton model instead of the skin model.
* '''Toggle Skin visibility''': Same as '''Toggle Skin Visibility''' in [[#B.29_Skin_model_maker]|Skin model maker]]. When dropping bones, bones are placed in 3D where the user click (X,Y) and at the depth (Z) of the closest surface model under the mouse cursor. It is advised to hide skin model when placing armature bones because you want them on the bones surface and not the skin surface .
* '''Load armature from model''': Prompts a dialog window to open an armature from a model. See [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module for further details.
* '''Load armature from model''': Open a dialog window to load an armature from a model file. See [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module for further details.
* '''Go To Armature Module''': Opens the [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module.[[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module allows the user to modify the armature by adding, tweaking, deleting bones in Rest mode. The display properties of the armature like X-Ray mode, opacity, color or shape can also be modified there.
* '''Go To Armature Module''': Open the [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module to manually edit the armature by adding, moving, deleting bones in Rest mode. Armature display properties such as X-Ray mode, opacity, color or shape can also be modified.


| valign="top"|
| valign="top"|
Line 136: Line 140:


== 4) Compute weights (skinning) ==
== 4) Compute weights (skinning) ==
The ''Compute weights'' section is where each voxel of the input image gets attributed a weight that represents by how much it is influence by a given bone movement.
The [[#4.29_Compute_weights_.28skinning.29|Compute weights]] section assigns a weight for each voxel of the input volume. The weights represent how much a voxel is influenced by a bone. It is later used when posing the volume and computing the unique transform to apply at a voxel (by interpolating the influencing bones transforms).
 
'''Note:''' When opening this page, the view switches to ''Four Up''.


'''Note:''' When opening this page, the view will automatically switch to ''Four Up''.
{| width="100%"
{| width="100%"
| valign="top"|
| valign="top"|
===A) Volume skinning===
===A) Volume skinning===


To compute a weight, the skinning volume must first be computed. The skinning represents what bones influences the most a given voxel.
Before computing the weights, the skinning volume must first be extracted. The skinning volume represents what bones influence the most a given voxel. For each voxel a unique bone index is assigned.
This means that if we were to use binary weights (see [[Bender/Documentation/1.0/Modules/ComputeArmatureWeight|Compute Armature Weight]]) , a given voxel would rotate similarly to its associated bone in the skinned volume. Because the skinning might not produces perfect results (some voxels might be assigned the wrong bones), and because the skinned volume drives the weight computation, it can be useful to tweak the output skinned volume, most notably in joints area. The [[http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/Editor Editor] module can be used to edit the labelmap.


'''Simple workflow'''
'''Simple workflow'''
* '''Volume''': Select the volume/labelmap that will be used for the skinning.
* '''Volume''': Select the labelmap volume to use for skinning.
* '''Armature''': Select the armature associated with the '''Volume'''.
* '''Armature''': Select the armature to skin '''Volume'''.
* '''Output skinned volume''': Select the output volume.
* '''Output skinned volume''': Select the volume that will contain the output skinned volume.
* '''Skin volume''': Compute the skinned volume. The output skinned volume is a labelmap where each voxel of the input '''Volume''' is associated with a bone of the input '''Armature'''. This means that if we were to use binary weights, a given voxel will move exactly as its associated bone in the skinned volume. For this reason and as the skinned volume drives the weight computation, it can be very profitable to tweak this results, most notably in joints area.
* '''Skin volume''': Compute the skinned volume. The output skinned volume is a labelmap where each voxel of the input '''Volume''' is associated with a bone of the input '''Armature''' (voronoi style algorithm).  
'''Advanced workflow'''
'''Advanced workflow'''
* '''Go To Volume Skinning Module''': Opens the [[Bender/Documentation/1.0/Modules/VolumeSkinning|Volume Skinning]] module.
* '''Go To Volume Skinning Module''': Open the [[Bender/Documentation/1.0/Modules/VolumeSkinning|Volume Skinning]] module for advanced properties.


===B) Compute armature weight===
===B) Compute armature weight===
    
    
The weight computation is then refined further in order to consider the influence of every bone on a given voxel.
Smooth the Skinned volume by computing weights in order to consider the influence of every bone on a given voxel.


'''Simple workflow'''
'''Simple workflow'''
* '''Output weight image folder''': Select the folder where the weight images will be saved.
* '''Output weight image folder''': Select the folder where the weight images will be saved. You need to have user write access.
* '''Compute weights''': Compute the weight image. For each bone of the '''Armature''' a weight image is created. A weight image stores by how much a given voxel of the '''Volume''' will be influenced when the associated bone moves. This computation is based on the solving of a heat-diffusion equation for which the bones of the volume represent the hot source. To increase computation speed, the input images are first downsampled by a scale factor. The resulting weight image is then upsampled back to the original image spacing.
* '''Compute weights''': Compute the weight images. For each bone of the '''Armature''', a weight image is created. A weight image stores by how much a given voxel of the '''Volume''' will be influenced when the associated bone moves. This computation is done by solving a heat-diffusion equation in which the bones of the volume represent the hot source. To increase computation speed, the input images are first downsampled by a scale factor. The resulting weight image is then upsampled back to the original image spacing.
'''Advanced workflow'''
'''Advanced workflow'''
* '''Volume''': Select the volume/labelmap that will be used for the weight computation. It should be the that was used for the ''A) Volume Skinning''.
* '''Volume''': Select the volume that will be used for weight computation. It should be the same as in [[#A.29_Volume_skinning|A) Volume Skinning]].
* '''Armature''': Select the armature associated with the '''Volume'''. It should be the that was used for the ''A) Volume Skinning''.
* '''Armature''': Select the armature associated with '''Volume'''. It should be the same as in [[#A.29_Volume_skinning|A) Volume Skinning]].
* '''Input skinned volume''': Select the skinned volume. It should be the (possibly tweaked) volume associated with the '''Volume''' and the '''Armature'''.
* '''Input skinned volume''': Select the skinned volume to use for its bone regions. It should be the (possibly edited) volume associated with the '''Volume''' and the '''Armature''' generated in [[#A.29_Volume_skinning|A) Volume Skinning]].
* '''Go To Compute Armature Weights Module''': Opens the [[Bender/Documentation/1.0/Modules/ComputeArmatureWeight|Compute Armature Weight]] module. In the [[Bender/Documentation/1.0/Modules/ComputeArmatureWeight|Compute Armature Weight]] module, the user can further refine the computation of the weight by, for example, restricting it to a given bone or the downsampling factor.
* '''Go To Compute Armature Weights module''': Open the [[Bender/Documentation/1.0/Modules/ComputeArmatureWeight|Compute Armature Weight]] module to further refine the computation of the weights by, for example, restricting it to a given bone or changing the downsampling ratio.


| valign="top"|
| valign="top"|
Line 171: Line 177:


== 5) Pose armature (posing)==
== 5) Pose armature (posing)==
This page is meant to help the user to find the right pose before starting the ''6) Pose labelmap'' by posing a model interactively.
The [[#5.29_Pose_armature_.28posing.29|Pose armature]] section guides the user into posing the armature for the final  [[#6.29_Pose_labelmap|Pose labelmap]] resampling.


'''Note:''' When opening this page, the current armature (if any) will automatically switch to ''Pose'' mode.  
'''Note:''' When opening this page, the current armature automatically switches to ''Pose'' mode.  


{| width="100%"
{| width="100%"
Line 179: Line 185:
===A) Evaluate surface weight===
===A) Evaluate surface weight===


The first step is to evaluate the weight at each vertices of the model using ''A) Evaluate surface weight''.
To speed up [[#C.29_Pose_surface|Pose surface]], weights at each vertices can be pre-computed.


'''Simple workflow'''
'''Simple workflow'''
* '''Output surface''': Select the output surface with the weight evaluated for each of its points.
* '''Output surface''': Select the output surface that will contain the evaluated weights at each point of '''Input surface'''.
* '''Evaluate surface weight''': For each point of the '''Input Surface''', evaluates of the influence of all weight and add it as a field array. This will improve the computational time of the '''Pose Surface'''.
* '''Evaluate surface weight''': For each point of the '''Input Surface''', evaluate the influence (weight) of each bone and add the weights into field arrays (one point data array per bone). This improves the computational time of the '''Pose Surface'''.
'''Advanced workflow'''
'''Advanced workflow'''
* '''Input surface''': Select the input surface that will have the weight evaluated on.
* '''Input surface''': Select the input surface that will have the weight evaluated on.
* '''Weight images folder''': Select the folder where the weight images are.
* '''Weight images folder''': Select the folder containing the weight image files.
* '''Go To Evaluate Surface Weight Module''': Opens the [[Bender/Documentation/1.0/Modules/EvalWeight|Evaluate Weight]] module.
* '''Go To Evaluate Surface Weight module''': Open the [[Bender/Documentation/1.0/Modules/EvalWeight|Evaluate Weight]] module to access further parameters.


===B) Armatures===
===B) Armatures===


This just serves as a quick link to the Armature module, should it be needed.
Pose the armature by applying rotations to armature bones. You can directly pose the armature from the 3D view, if needed the [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module can provide more controls.
 
'''Note:''' At this point only the ''Pose'' of the armature can be edited, if the "Rest" mode of the armature is changed, the skinned volume and bone weights must be recomputed.  


'''Simple workflow'''
'''Simple workflow'''
* '''Go Armature Module''': Opens the [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module. In that case, the [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module can be used to reset the current pose to its originals rest value. This can be useful in order to create a clean pose.
* '''Go Armature module''': Open the [[Bender/Documentation/1.0/Modules/Armatures|Armatures]] module to further control the armature and its posing (e.g. reset the current pose to its originals rest value).


===C) Pose surface===
===C) Pose surface===


This poses any surface according to the armature. Usualy, the skin and bone models give a fairly good idea of what the result of the ''6) Pose labelmap'' will look like.
Transform a surface model according to the armature pose. Posing the skin (or bone) surface model gives a fairly good idea of what the result of the [[#6.29_Pose_labelmap|6) Pose labelmap]] will look like.


'''Simple workflow'''
'''Simple workflow'''
* '''Output surface''': Select the output surface that will store the posed '''Input Surface'''.
* '''Output surface''': Select the output surface that will store the posed '''Input Surface'''.
* '''Pose surface''': This will pose the '''Input Surface''' according to the posed '''Armature''' and the weight images from the given '''Weight images folder'''. If the surface was evaluated, this will automatically use the evaluated weight to compute the posed surface. If not it will read the weight from the '''Weight images folder''' to do so (slower computation). If the checkbox is activated, the CLI will automatically run anytime any of the input is modified. Otherwise, the CLI will only run once. This steps operates as a prelude to ''6) Pose Labelmap''. When posing the skin and/or the skeleton, the user can assert the quality of the weights as well as fine tune the pose interactively. Once the pose is satisfying, it can then be applied to the labelmap.
* '''Pose surface''': Pose the '''Input Surface''' according to the posed '''Armature''' and the weight images from the given '''Weight images folder'''. If the surface was first evaluated in [[#A.29_Evaluate_surface_weight|A) Evaluate Surface Weight]], this automatically uses the evaluated weights to compute the posed surface. Otherwise it reads the weights from the '''Weight images folder''' to compute the point weights (slower computation). If the checkbox is toggled, the module will automatically run anytime any input parameter is modified. If unchecked, the module run only once. Posing the skin surface and/or the bone surface is a way to assess the quality of the weights as well as to fine tune the pose interactively. Once the armature is posed and the surface looks fine, the pose can then be applied to the labelmap (longer process).
'''Advanced workflow'''
'''Advanced workflow'''
* '''Armature''': Select the posed input armature.
* '''Armature''': Select the posed input armature.
* '''Input surface''': Select the input surface that will be posed.
* '''Input surface''': Select the input surface to transform with the armature pose.
* '''Weight images folder''': Select the folder where the weight images are.
* '''Weight images folder''': Select the folder where the weight image files are.
* '''Go To Pose Surface Module''': Opens the [[Bender/Documentation/1.0/Modules/PoseSurface|Pose Surface]] module.
* '''Go To Pose Surface module''': Open the [[Bender/Documentation/1.0/Modules/PoseSurface|Pose Surface]] module to choose the weight blending mode or decide whether to use the evaluated weights or not.


| valign="top"|
| valign="top"|
Line 214: Line 222:


== 6) Pose labelmap ==
== 6) Pose labelmap ==
Final step of the workflow, the ''6) Pose labelmap'' uses the posed armature and the weights associated with it to compute the posed labelmap.  
The [[#6.29_Pose_labelmap|6) Pose labelmap]] section is the final step of the workflow, it uses the posed armature and the weights associated with the volume to compute the posed labelmap.  


{| width="100%"
{| width="100%"
Line 221: Line 229:
===A) Resample labelmap with pose===
===A) Resample labelmap with pose===


Pose a labelmap given an armature and the weights associated with it.
Pose a labelmap volume given an armature and its weights.


'''Simple workflow'''
'''Simple workflow'''
* '''Output posed labeldmap''': Select the output labelmap that will store the posed '''Input labelmap'''.
* '''Output posed labeldmap''': Select the output labelmap that will store the transformed '''Input labelmap'''.
* '''Apply''': This will pose the '''Input labelmap''' according to the posed '''Armature''' and the weight images from the given '''Weight images folder'''. As this steps may take quite some time, it is highly encouraged to first try to pose the skeleton to make sure that the pose does not create any anatomical error. The skin model should also be posed to verify that there is no overlap (to make sure for example that the hand does not enter the thigh).
* '''Apply''': Pose the '''Input labelmap''' according to the posed '''Armature''' and the weight images from the given '''Weight images folder'''. As this step may take quite some time in fine resolution (i.e. 1mm or 2mm), it is highly encouraged to first try to pose the bone surface model first to make sure that the pose does not create any anatomical error. The skin surface model should also be posed to verify that there is no overlap (to make sure for example that the hand does not go through the thigh).
'''Advanced workflow'''
'''Advanced workflow'''
* '''Input labelmap''': Select the input labelmap to pose.
* '''Armature''': Select the posed input armature.
* '''Armature''': Select the posed input armature.
* '''Input surface''': Select the input labelmap that will be posed.
* '''Weight images folder''': Select the folder where the weight image files are.
* '''Weight images folder''': Select the folder where the weight images are.
* '''Go To Pose Labelmap Module''': Open the [[Bender/Documentation/1.0/Modules/PoseLabelmap|Pose Labelmap]] module to tweak some parameters such as the '''Maximum radius''' to speed up the computation.
* '''Go To Pose Labelmap Module''': Opens the [[Bender/Documentation/1.0/Modules/PoseLabelmap|Pose Labelmap]] module. It can be useful to tweak some of the parameters like the Maximum radius to prevent the computation to take too much time.


| valign="top"|
| valign="top"|
Line 242: Line 250:


= Developer Information =
= Developer Information =
This module is a Python script that can be manually edited for custom behavior (even in the installed version of Bender).

Revision as of 16:34, 1 April 2013

Introduction

The Workflow module guides the user step-by-step into transforming a volume using a rigging, skinning and posing technique.

Typically, the anatomical pose of a voxelized model is limited by the imaging device used to acquire the underlying data, e.g., MRI and CT scanners have narrow entries. Changing the pose of an already acquired voxelized anatomical model enables new processing of human anatomy in a wide variety of poses. The workflow module allows an operator to specify a rigging that represents the anatomical pose of an existing voxel model, manipulate that rigging into a different anatomical pose, and then generate a new voxelized model that represents the original model resampled into that new position.

This module applies to voxelized models the Skeletal animation technique initially conceived for surfaces.

Details

Author: Julien Finet, Kitware
Contributor #1: Johan Andruejol, Kitware
Acknowledgements: This work is supported by the Air Force Research Laboratories.
Contact: Julien Finet

Use Cases

Parameters

Advanced properties

The Advanced properties can be shown or hidden by clicking on the BenderExpandIcon.png expanding button.

  • Advanced Workflow: Show/Hide advanced controls at each step of the workflow.
    Advanced properties are automatically set by the workflow logic for a "standard" processing. Nonetheless it is possible for the user to tweak those parameters.
    Note that all the parameters are not exposed even in "Advanced Workflow" mode. The full list of parameters is available in the specific module panels that can be opened by clicking the "Go to XYZ" buttons.

Volume render

The Volume render section can volume render intermediate or final volume/labelmap for verification.

  • Labelmap: Select the volume/labelmap you want to volume render. The checkbox next to labelmap controls whether the rendering is visible or not.
  • Label(s): List all the label(s) that should be visible (i.e. opacity > 0.), all the other labels will be hidden (i.e. opacity = 0.). Labels must be separated with a ',' (comma).
  • Go To Volume Rendering: Opens the Volume Rendering module. It gives full control over the volume rendering parameters such as the color and opacity transfer functions, shading, rendering quality...
Advanced properties panel

1) Adjust labelmap

The Adjust labelmap is the first step of the workflow. The user select here the volume to pose and can optionally prepare the volume before computation is applied.

A) Labelmap

This section makes sure the input labelmap has the right color table associated with it and is in the right coordinate system.

Simple workflow

  • Volume: Select the volume/labelmap that you want to reposition. Read here the instructions to load data into Bender. The choosen volume will be automatically set as the default volume for all the following steps.
  • Colors: Select the color transfer function to apply to the volume. It is assigned to the volume when Apply is clicked. For each voxel intensity, a unique color is associated and is used at display time. It is important to select the right transfer function of the volume because the color names in the color transfer function are used in the [[#B.29_Merge_labels|Merge labels] section. Grayscale means the volume is not a labelmap and there is no color transfer function associated to it.
  • Apply: Set the color transfer function to the volume.
  • LPS<->RAS: Apply a (-1,-1, 1) transform to the volume. It can be used to apply the same coordinate system used by Bender to the volume. The "R,L,A,P,S,I" letters on the purple box in the 3D view represent the orientations "Right, Left, Anterior, Posterior, Superior, Inferior".

Advanced workflow

  • Go To Volumes: Go to the Volumes module to read volume information (such as its size, origin, spacing, scalar type, range...) and display properties (window/level, threshold, interpolation...)

B) Merge labels

This section provides the functionality of merging the bones labels and the skin labels of the input labelmap to ease the visualization/usability of the bones and the skin that often have different labels in the input 'raw' labelmap. Some labelmaps can have different labels for representing bones (e.g. bone marrow, bone cancellous, skull...). The Bender workflow handles only 1 label for the bones and 1 label for the skin. It is important to merge those similar labels into a unique label (1 for the bones, 1 for the skin).

Simple workflow

  • Output Labelmap: Select the output labelmap that will contain all the labels of the input labelmap and the merged labels.
  • Merge labels: Merge the Bone Label(s) and Skin Label(s) from Input Labelmap (into respectively Bone Label and Skin Label) and outputs the result in Output Labelmap. This process simplifies the extraction and visualization of the Bone Model and the Skin Model (see 2) Extract Bone and Skin).

Advanced workflow

  • Input Labelmap: Select the input labelmap that needs labels to be merged together. By default, it is Volume in A) Labelmap.
  • Bone label(s): Choose the label(s) that will be merged into Bone Label. They are automatically selected from the input volume color table (set in A) Labelmap) by looking for color names containing the strings "bone" or "vertebrae".
  • Bone label: Select the new label value of Bone Label(s).
  • Skin label(s): Choose the label(s) that will be merged into Skin Label. They are automatically selected from the input volume color table (set in A) Labelmap) by looking for color names containing the string "skin".
  • Bone label: Select the new label value of Skin Label(s).
  • Go To Change Label: Open the Change Label module to merge other labels together or simply change label values.
Adjust labelmap panel

2) Extract bone and skin

The 2) Extract bone and skin page creates the bone and skin surface models to interactively control the posing.

A) Bone model maker

This section extracts the surface of the bone label in the input labelmap volume. If there is more than 1 bone label, you can use Merge labels to merge them into a unique label.

Simple workflow

  • Output model hierarchy: Select the output model hierarchy under which the bone model will be stored.
  • Generate bone model: Generate the bone model using the Model Maker module. The extracted bone surface is used when placing or adjusting the armature by ensuring the armature bones are on top of the labelmap bones.

Advanced workflow

  • Input Labelmap: Select the labelmap to extract the bone label from.
  • Label(s): Select the label of the input labelmap to create the bone model surface. By default, it is the Bone Label value in Merge labels.
  • Go To Models: Open the Models module to change the created model properties such as name, opacity, color...
  • Go To Model Maker: Open the Models Maker module to access more controls over the model extraction parameters such as smoothing or normal computation. The Models Maker generates models corresponding to any (or all) label(s) of a given labelmap using marching cubes.

B) Skin model maker

This section extracts the surface of the skin label in the input labelmap volume. The algorithm is different than Bone model maker because it solely needs the information of the background label, it creates an outer surface of the Foreground labels (all the labels that are not "Background").

Simple workflow

  • Output: Select the output model for the skin model.
  • Toggle skin visibility: Toggle the visibility of the generated model in Output.
  • Generate skin model: Using the Grayscale Model Maker, extract the outer surface of the Input Labelmap. As posing a surface is computationally faster than posing a labelmap, the skin surface model is interactively transformed when posing the armature to quickly have visual feedback of the pose and make sure there is no flesh collision in 5) Pose Armature(posing).

Advanced workflow

  • Input Labelmap: Select the labelmap volume to extract the skin model from.
  • Threshold: Select the threshold used to differentiate the body in the labelmap (foreground) from the outside air (background). Default is 0.1 (= 0.0 + epsilon).
  • Go To Models: Open the Models module to change the created model properties such as name, opacity, color...
  • Go To Grayscale Model Maker: Open the Grayscale Model Maker module to access more controls over the model extraction parameters such as smoothing, normal computation.
Extract bone and skin panel

3) Create armature (rigging)

This section creates the rig of the volume to pose. Note: When opening this page, the view will automatically switch to 3D Only to help creating/visualizing the armature.

A) Armatures

Manually create or load an existing armature to fit on the bones of the volume to pose. The user is redirected to the Armatures module for manually editing (e.g. create/edit/remove a bone segment). The armature (either created or loaded) is the interface between the user and the transformations needed to pose the volume models. Note: Once completed, the armature rest positions should not be changed since it would require all the following computations to be updated as well. It is therefore highly encouraged to save the created armature in order to be able to restore it with Load armature from model.

Simple workflow

  • Toggle Skin visibility: Same as Toggle Skin Visibility in [[#B.29_Skin_model_maker]|Skin model maker]]. When dropping bones, bones are placed in 3D where the user click (X,Y) and at the depth (Z) of the closest surface model under the mouse cursor. It is advised to hide skin model when placing armature bones because you want them on the bones surface and not the skin surface .
  • Load armature from model: Open a dialog window to load an armature from a model file. See Armatures module for further details.
  • Go To Armature Module: Open the Armatures module to manually edit the armature by adding, moving, deleting bones in Rest mode. Armature display properties such as X-Ray mode, opacity, color or shape can also be modified.
Rig armature panel

4) Compute weights (skinning)

The Compute weights section assigns a weight for each voxel of the input volume. The weights represent how much a voxel is influenced by a bone. It is later used when posing the volume and computing the unique transform to apply at a voxel (by interpolating the influencing bones transforms).

Note: When opening this page, the view switches to Four Up.

A) Volume skinning

Before computing the weights, the skinning volume must first be extracted. The skinning volume represents what bones influence the most a given voxel. For each voxel a unique bone index is assigned. This means that if we were to use binary weights (see Compute Armature Weight) , a given voxel would rotate similarly to its associated bone in the skinned volume. Because the skinning might not produces perfect results (some voxels might be assigned the wrong bones), and because the skinned volume drives the weight computation, it can be useful to tweak the output skinned volume, most notably in joints area. The [Editor module can be used to edit the labelmap.

Simple workflow

  • Volume: Select the labelmap volume to use for skinning.
  • Armature: Select the armature to skin Volume.
  • Output skinned volume: Select the volume that will contain the output skinned volume.
  • Skin volume: Compute the skinned volume. The output skinned volume is a labelmap where each voxel of the input Volume is associated with a bone of the input Armature (voronoi style algorithm).

Advanced workflow

  • Go To Volume Skinning Module: Open the Volume Skinning module for advanced properties.

B) Compute armature weight

Smooth the Skinned volume by computing weights in order to consider the influence of every bone on a given voxel.

Simple workflow

  • Output weight image folder: Select the folder where the weight images will be saved. You need to have user write access.
  • Compute weights: Compute the weight images. For each bone of the Armature, a weight image is created. A weight image stores by how much a given voxel of the Volume will be influenced when the associated bone moves. This computation is done by solving a heat-diffusion equation in which the bones of the volume represent the hot source. To increase computation speed, the input images are first downsampled by a scale factor. The resulting weight image is then upsampled back to the original image spacing.

Advanced workflow

  • Volume: Select the volume that will be used for weight computation. It should be the same as in A) Volume Skinning.
  • Armature: Select the armature associated with Volume. It should be the same as in A) Volume Skinning.
  • Input skinned volume: Select the skinned volume to use for its bone regions. It should be the (possibly edited) volume associated with the Volume and the Armature generated in A) Volume Skinning.
  • Go To Compute Armature Weights module: Open the Compute Armature Weight module to further refine the computation of the weights by, for example, restricting it to a given bone or changing the downsampling ratio.
Skin volume panel

5) Pose armature (posing)

The Pose armature section guides the user into posing the armature for the final Pose labelmap resampling.

Note: When opening this page, the current armature automatically switches to Pose mode.

A) Evaluate surface weight

To speed up Pose surface, weights at each vertices can be pre-computed.

Simple workflow

  • Output surface: Select the output surface that will contain the evaluated weights at each point of Input surface.
  • Evaluate surface weight: For each point of the Input Surface, evaluate the influence (weight) of each bone and add the weights into field arrays (one point data array per bone). This improves the computational time of the Pose Surface.

Advanced workflow

  • Input surface: Select the input surface that will have the weight evaluated on.
  • Weight images folder: Select the folder containing the weight image files.
  • Go To Evaluate Surface Weight module: Open the Evaluate Weight module to access further parameters.

B) Armatures

Pose the armature by applying rotations to armature bones. You can directly pose the armature from the 3D view, if needed the Armatures module can provide more controls.

Note: At this point only the Pose of the armature can be edited, if the "Rest" mode of the armature is changed, the skinned volume and bone weights must be recomputed.

Simple workflow

  • Go Armature module: Open the Armatures module to further control the armature and its posing (e.g. reset the current pose to its originals rest value).

C) Pose surface

Transform a surface model according to the armature pose. Posing the skin (or bone) surface model gives a fairly good idea of what the result of the 6) Pose labelmap will look like.

Simple workflow

  • Output surface: Select the output surface that will store the posed Input Surface.
  • Pose surface: Pose the Input Surface according to the posed Armature and the weight images from the given Weight images folder. If the surface was first evaluated in A) Evaluate Surface Weight, this automatically uses the evaluated weights to compute the posed surface. Otherwise it reads the weights from the Weight images folder to compute the point weights (slower computation). If the checkbox is toggled, the module will automatically run anytime any input parameter is modified. If unchecked, the module run only once. Posing the skin surface and/or the bone surface is a way to assess the quality of the weights as well as to fine tune the pose interactively. Once the armature is posed and the surface looks fine, the pose can then be applied to the labelmap (longer process).

Advanced workflow

  • Armature: Select the posed input armature.
  • Input surface: Select the input surface to transform with the armature pose.
  • Weight images folder: Select the folder where the weight image files are.
  • Go To Pose Surface module: Open the Pose Surface module to choose the weight blending mode or decide whether to use the evaluated weights or not.
Pose armature panel

6) Pose labelmap

The 6) Pose labelmap section is the final step of the workflow, it uses the posed armature and the weights associated with the volume to compute the posed labelmap.

A) Resample labelmap with pose

Pose a labelmap volume given an armature and its weights.

Simple workflow

  • Output posed labeldmap: Select the output labelmap that will store the transformed Input labelmap.
  • Apply: Pose the Input labelmap according to the posed Armature and the weight images from the given Weight images folder. As this step may take quite some time in fine resolution (i.e. 1mm or 2mm), it is highly encouraged to first try to pose the bone surface model first to make sure that the pose does not create any anatomical error. The skin surface model should also be posed to verify that there is no overlap (to make sure for example that the hand does not go through the thigh).

Advanced workflow

  • Input labelmap: Select the input labelmap to pose.
  • Armature: Select the posed input armature.
  • Weight images folder: Select the folder where the weight image files are.
  • Go To Pose Labelmap Module: Open the Pose Labelmap module to tweak some parameters such as the Maximum radius to speed up the computation.
Pose labelmap panel

Similar Modules

Developer Information

This module is a Python script that can be manually edited for custom behavior (even in the installed version of Bender).