Bender/Documentation/1.1/Modules/Workflow: Difference between revisions
(19 intermediate revisions by 2 users not shown) | |||
Line 14: | Line 14: | ||
= Use Cases = | = Use Cases = | ||
<gallery widths=220px perrow=5> | <gallery widths=220px perrow=5> | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-1-LoadData.png|[[#A.29_Labelmap|1) Load data]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-2A-MergeLabels.png|[[#A.29_Merge_labels|2-A) Merge labels]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-2B-BoneModelMaker.png|[[#B.29_Bone_model_maker|2-B) Bone model maker]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-2C-SkinModelMaker.png|[[#C.29_Skin_model_maker|2-C) Skin model maker]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-3-Armatures.png|[[#A.29_Armatures|3) Armature/Rig]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-4-VolumeSkinning.png|[[#A.29_Volume_skinning|4) Volume skinning]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-5-ComputeWeights.png|[[#A.29_Compute_armature_weight|5) Bone weights]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-6-PoseArmature.png|[[#A.29_Armatures|6) Pose surface]] | ||
Image:BenderWorkflow- | Image:BenderWorkflow-v1.1-7-ResampleLabelmap.png|[[#A.29_Resample_labelmap_with_pose|7) Pose labelmap]] | ||
</gallery> | </gallery> | ||
Line 38: | Line 38: | ||
= Tutorials = | = Tutorials = | ||
{| | {| | ||
|[[Image:Bender-1. | |[[Image:Bender-1.1-preview-video.png|link=http://vimeo.com/73247670|400px|thumb|[[Bender/Documentation/1.1/Tutorial|Arm tutorial]]]] | ||
| | |||
[[ | |||
|} | |} | ||
Line 120: | Line 108: | ||
===A) Merge labels=== | ===A) Merge labels=== | ||
Some labelmaps can have multiple labels for representing bones (e.g. bone marrow, bone cancellous, skull...). This section provides the functionality of merging the bones labels and the skin labels of the input labelmap to simplify the visualization and usability of the bones and the skin. | |||
Some labelmaps can have | It is important to merge those similar labels into a unique label (1 for the bones, 1 for the skin) as the Bender workflow handles only 1 label for the bones and 1 label for the skin. . | ||
'''Simple workflow''' | '''Simple workflow''' | ||
Line 164: | Line 152: | ||
| valign="top"| | | valign="top"| | ||
[[Image:ExtractModelsPanel-1.0.png|thumb|550px|Extract bone and skin panel]] | [[Image:ExtractModelsPanel-1.0.png|thumb|550px|Extract bone and skin panel]] | ||
[[Image:BenderWorkflow- | [[Image:BenderWorkflow-v1.1-2A-MergeLabels.png|thumb|550px|2-A)Merge labels]] | ||
[[Image:BenderWorkflow- | [[Image:BenderWorkflow-v1.1-2B-BoneModelMaker.png|thumb|550px|2-B)Bone model maker]] | ||
[[Image:BenderWorkflow- | [[Image:BenderWorkflow-v1.1-2C-SkinModelMaker.png|thumb|550px|2-C)Skin model maker]] | ||
|} | |} | ||
Line 189: | Line 177: | ||
| valign="top"| | | valign="top"| | ||
[[Image:RigArmaturePanel-1.0.png|thumb|550px|Rig armature panel]][[Image:BenderWorkflow- | [[Image:RigArmaturePanel-1.0.png|thumb|550px|Rig armature panel]][[Image:BenderWorkflow-v1.1-3-Armatures.png|thumb|550px|3-A)Armatures]] | ||
|} | |} | ||
== 4) | == 4) Volume skinning == | ||
The [[ | |||
Before computing the weights, the skinning volume must first be extracted. The skinning volume represents what bone 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 [[../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. | |||
'''Note:''' When opening this page, the view switches to ''Four Up''. | '''Note:''' When opening this page, the view switches to ''Four Up''. | ||
Line 199: | Line 189: | ||
{| width="100%" | {| width="100%" | ||
| valign="top"| | | valign="top"| | ||
===A) Volume skinning=== | ===A) Volume skinning=== | ||
'''Simple workflow''' | |||
* '''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''' | ||
* '''Volume''': Select the labelmap volume to use for skinning. | * '''Volume''': Select the labelmap volume to use for skinning. | ||
* '''Armature''': Select the armature to skin '''Volume'''. | * '''Armature''': Select the armature to skin '''Volume'''. | ||
* '''Output skinned volume''': Select the volume that will contain the output skinned volume. | * '''Output skinned volume''': Select the volume that will contain the output skinned volume. | ||
* ''' | * '''Go To Volume Skinning Module''': Open the [[../VolumeSkinning|Volume Skinning]] module for advanced properties. | ||
===B) Edit volume skinning=== | |||
'''Simple workflow''' | |||
* '''Go To Editor Module''': Open the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/Editor Editor] module with the skinned volume obtained by the [[#A) Volume skinning| volume skinning]]. | |||
'''Advanced workflow''' | '''Advanced workflow''' | ||
* ''' | * '''Skinned volume''': Select the volume that will be modified in the editor. More information in the [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/Editor Editor] module documentation. | ||
| valign="top"| | |||
[[Image:SkinArmaturePanel-1.0.png|thumb|550px|Skin volume panel]] | |||
[[Image:BenderWorkflow-v1.1-4-VolumeSkinning.png|thumb|550px|4)Volume skinning]] | |||
|} | |||
== 4) Compute weights == | |||
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). | |||
{| width="100%" | |||
| valign="top"| | |||
=== | === A) Compute armature weight === | ||
Smooth the Skinned volume by computing weights 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. | ||
Line 219: | Line 227: | ||
* '''Output weight image folder''': Select the folder where the weight images will be saved. You need to have user write access. | * '''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. | * '''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 that will be used for weight computation. It should be the same as in [[#A.29_Volume_skinning|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 '''Volume'''. It should be the same as in [[#A.29_Volume_skinning|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 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]]. | * '''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]]. | ||
* '''Background label''': Treat the given pixel value as backgroung. It will not be part of the weight computation. | |||
* '''Bone label''': The bone label represents all the points of the labelmap which movement completely depend on one and only one bone of the armature. In the weights image, these points will either have the value 1 or 0 depending on their distance to the closest armature bone. In an anatomical study, this label should correspond to the bones of the patient. By default, the value is the same as the value used to [[#B) Bone model maker |extract the bones surface]]. | |||
* '''Padding''': Defines how far (in voxel units) outside the body the weight region will be computed. This can be useful in certain case where one wants to pose a surface that doesn't exactly lies on the body (for example, the skin obtained with a simple [http://wiki.slicer.org/slicerWiki/index.php/Documentation/4.1/Modules/GrayscaleModelMaker grayscale Model Maker]). However, padding can cause issue around joints (most notably the armpits) and isn't necessary when posing a labelmap. | |||
* '''Scale factor''': The scale factor is used to speed up the processing. The weights are computated on downsampled version of the input labelmap according to this factor. These images are then up-sampled back to make sure they match the input image well. With a big scale factor, the computation will be faster but the weight images will be coarser. | |||
* '''Go To Compute Armature Weights module''': Open the [[../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. | * '''Go To Compute Armature Weights module''': Open the [[../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. | ||
=== B) Evaluate surface weight === | |||
To speed up [[#C.29_Pose_surface|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 [[../EvalWeight|Evaluate Weight]] module to access further parameters. | |||
| valign="top"| | | valign="top"| | ||
[[Image:SkinArmaturePanel-1.0.png|thumb|550px|Skin volume panel]][[Image:BenderWorkflow- | [[Image:SkinArmaturePanel-1.0.png|thumb|550px|Skin volume panel]] | ||
[[Image:BenderWorkflow-v1.1-5-ComputeWeights.png|thumb|550px|5-B)Compute armature weights]] | |||
|} | |} | ||
Line 236: | Line 263: | ||
{| width="100%" | {| width="100%" | ||
| valign="top"| | | valign="top"| | ||
=== | ===A) Armatures=== | ||
Pose the armature by applying rotations to armature bones. You can directly pose the armature from the 3D view, if needed the [[../Armatures|Armatures]] module can provide more controls. | Pose the armature by applying rotations to armature bones. You can directly pose the armature from the 3D view, if needed the [[../Armatures|Armatures]] module can provide more controls. | ||
Line 257: | Line 273: | ||
* '''Go Armature module''': Open the [[../Armatures|Armatures]] module to further control the armature and its posing (e.g. reset the current pose to its originals rest value). | * '''Go Armature module''': Open the [[../Armatures|Armatures]] module to further control the armature and its posing (e.g. reset the current pose to its originals rest value). | ||
=== | ===B) 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.29_Pose_labelmap|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. | ||
Line 271: | Line 287: | ||
| valign="top"| | | valign="top"| | ||
[[Image:PoseArmaturePanel-1.0.png|thumb|550px|Pose armature panel]][[Image:BenderWorkflow- | [[Image:PoseArmaturePanel-1.0.png|thumb|550px|Pose armature panel]][[Image:BenderWorkflow-v1.1-6-PoseArmature.png|thumb|550px|5)Pose surface]] | ||
|} | |} | ||
Line 294: | Line 310: | ||
| valign="top"| | | valign="top"| | ||
[[Image:PoseLabelmapPanel-1.0.png|thumb|550px|Pose labelmap panel]][[Image:BenderWorkflow- | [[Image:PoseLabelmapPanel-1.0.png|thumb|550px|Pose labelmap panel]][[Image:BenderWorkflow-v1.1-7-ResampleLabelmap.png|thumb|550px|6-A)Resample labelmap with pose]] | ||
|} | |} | ||
Latest revision as of 23:39, 2 September 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
Tutorials
Parameters
Advanced properties
The Advanced properties can be shown or hidden by clicking on the expanding button.
Settings
|
Data
|
Volume Rendering
The Volume Rendering section can volume render intermediate or final volume/labelmap.
|
1) Adjust labelmap
The Adjust labelmap is the first step of the workflow. The user selects here the volume to pose and can optionally prepare the volume before any further computation is applied.
A) LabelmapThis section makes sure the input labelmap has the right color table associated with it and is in the right coordinate system. Simple workflow
Advanced workflow
|
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) Merge labelsSome labelmaps can have multiple labels for representing bones (e.g. bone marrow, bone cancellous, skull...). This section provides the functionality of merging the bones labels and the skin labels of the input labelmap to simplify the visualization and usability of the bones and the skin. It is important to merge those similar labels into a unique label (1 for the bones, 1 for the skin) as the Bender workflow handles only 1 label for the bones and 1 label for the skin. . Simple workflow
Advanced workflow
B) Bone model makerThis 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
Advanced workflow
C) Skin model makerThis 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
Advanced workflow
|
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) ArmaturesManually 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
|
4) Volume skinning
Before computing the weights, the skinning volume must first be extracted. The skinning volume represents what bone 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.
Note: When opening this page, the view switches to Four Up.
A) Volume skinningSimple workflow
Advanced workflow
B) Edit volume skinningSimple workflow
Advanced workflow
|
4) Compute weights
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).
A) Compute armature weightSmooth the Skinned volume by computing weights in order to consider the influence of every bone on a given voxel. Simple workflow
Advanced workflow
B) Evaluate surface weightTo speed up Pose surface, weights at each vertices can be pre-computed. Simple workflow
Advanced workflow
|
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) ArmaturesPose 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
B) Pose surfaceTransform 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
Advanced workflow
|
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 posePose a labelmap volume given an armature and its weights. Simple workflow
Advanced workflow
|
Similar Modules
- Used modules
- Bender modules: Armatures, Change Label, Compute Armature Weight, Model Quadric Clustering Decimation, Pose Surface, Pose Labelmap, Sample Data, Skin Model Maker, Volume Skinning
- Slicer modules: Grayscale Model Maker, Models, Model Maker, Volumes, Volume Rendering
Developer Information
This module is a Python script module that can be manually edited for custom behavior (even in the installed version of Bender).