|
a |
|
b/Docs/Scaling/lesson3.md |
|
|
1 |
# Lesson 3: Scaling using segmental scaling vectors |
|
|
2 |
|
|
|
3 |
This tutorial presumes that you have completed {doc}`Scaling tutorial |
|
|
4 |
Lesson 1: Joint to joint scaling methods <lesson1>` and {doc}`Scaling tutorial |
|
|
5 |
Lesson 2: Scaling based on External Body Measurements <lesson2>`. It |
|
|
6 |
covered all the methods based on distance measurements and estimations. |
|
|
7 |
|
|
|
8 |
This lesson introduces the last scaling method, which differs from the previous |
|
|
9 |
ones by the input parameterse and, therefore, allows another set of |
|
|
10 |
solutions when it comes to anthropometric scaling |
|
|
11 |
|
|
|
12 |
## Scaling XYZ |
|
|
13 |
|
|
|
14 |
The scaling laws discussed in the previous measurements rely on standard |
|
|
15 |
measurements and distance estimates such as joint-to-joint distances or |
|
|
16 |
predefined external measurements, e.g. manual palpations and so on. This is a |
|
|
17 |
good approach, when a corresponding measurement study can be designed in |
|
|
18 |
advance, or a particular measurement protocol can be adjusted to fit the model |
|
|
19 |
requirements. However, sometimes this is not feasible and the modeller needs to |
|
|
20 |
rely on available data, such as an anthopometric database, or data coming from |
|
|
21 |
an old study with measurements different to the standard ones. In this case |
|
|
22 |
individual segmental scaling can be constructed by establishing a correspondence |
|
|
23 |
between available data and virtual measurements on the model. Let us consider |
|
|
24 |
the following example: For `_SCALING_UNIFORM_` the head is scaled by a single |
|
|
25 |
factor (`HeadHeight`), and in case of the `_SCALING_LENGTHMASSFAT_` it would |
|
|
26 |
also depend on the corresponding mass of the head segment. But we could actually |
|
|
27 |
know even more accurate dimensions of our subject's head. And these measurements |
|
|
28 |
should be used by the model. Let's say that our subject corresponds to the 50th |
|
|
29 |
percentile male and the measurements will be taken from DIN 1986 (Deutsches |
|
|
30 |
Institut fur Normung) anthropometric dataset. |
|
|
31 |
|
|
|
32 |
| HEAD HEIGHT, mm | HEAD LENGTH, mm | HEAD BREADTH, mm | |
|
|
33 |
| --------------- | --------------- | ---------------- | |
|
|
34 |
| 228 | 193 | 156 | |
|
|
35 |
|
|
|
36 |
The head height represent the vertical size of the head, measured from the |
|
|
37 |
chin to the top of the head, head length represents the depth of the skull |
|
|
38 |
from the most anterior point on the forehead to the most posterior point on |
|
|
39 |
the back of the head, and, finally, head breadth correspond to the width of |
|
|
40 |
the head. |
|
|
41 |
|
|
|
42 |
We have prepared some code to visualize points used to measure these distances. |
|
|
43 |
As well as that a couple of measures were added to see the result of scaling. |
|
|
44 |
Please enable this code by uncommenting the following code: |
|
|
45 |
|
|
|
46 |
```AnyScriptDoc |
|
|
47 |
// Head scaling visualization and measurements |
|
|
48 |
§#define HEAD_SCALING_XYZ§ |
|
|
49 |
#ifdef HEAD_SCALING_XYZ |
|
|
50 |
#include "Model\HeadScalingXYZ.any" |
|
|
51 |
#endif |
|
|
52 |
``` |
|
|
53 |
|
|
|
54 |
```{image} _static/lesson3/HeadMarkersFrontView.jpg |
|
|
55 |
:width: 49% |
|
|
56 |
``` |
|
|
57 |
|
|
|
58 |
```{image} _static/lesson3/HeadMarkersLateralView.jpg |
|
|
59 |
:width: 49% |
|
|
60 |
``` |
|
|
61 |
|
|
|
62 |
Let us use the last scaling law: `_SCALING_XYZ_`. For this purpose please |
|
|
63 |
switch it on like shown below: |
|
|
64 |
|
|
|
65 |
```AnyScriptDoc |
|
|
66 |
// Scaling laws using joint to joint measures |
|
|
67 |
// #define BM_SCALING _SCALING_UNIFORM_ |
|
|
68 |
// #define BM_SCALING _SCALING_LENGTHMASS_ |
|
|
69 |
// #define BM_SCALING _SCALING_LENGTHMASSFAT_ |
|
|
70 |
§ #define BM_SCALING _SCALING_XYZ_§ |
|
|
71 |
``` |
|
|
72 |
|
|
|
73 |
Let us inspect what segment dimension are available for this scaling law. Go to |
|
|
74 |
`Main.HumanModel.Anthropometrics.SegmentDimensions` in the model tree: |
|
|
75 |
|
|
|
76 |
```{image} _static/lesson3/XYZ_segment_dimensions.jpg |
|
|
77 |
``` |
|
|
78 |
|
|
|
79 |
We could see that the first section containing overall body parameters and the |
|
|
80 |
SegmentMasses folder are identical to any other scaling law. But instead of only |
|
|
81 |
having a folder called SegmentDimensions, we now have another called |
|
|
82 |
SegmentScaleFactors. Looking at the content it is clear that this folder |
|
|
83 |
contains invidual scaling factors along main axes. By default all values are set |
|
|
84 |
to be 1, meaning that the cadaveric data will not scale and the law will behave |
|
|
85 |
similarly to the `_SCALING_NONE_`. |
|
|
86 |
|
|
|
87 |
Let us define the head scaling factors as expected lengths divided by unscaled |
|
|
88 |
head dimensions. In HeadScalingXYZ.any we have already prepared the |
|
|
89 |
computation of these distances and we just need to check these values in the Model |
|
|
90 |
Tree: |
|
|
91 |
|
|
|
92 |
:::{tip} |
|
|
93 |
Right-click on the object and use "Locate in Model Tree" to find it in the Model Tree. |
|
|
94 |
::: |
|
|
95 |
|
|
|
96 |
```{image} _static/lesson3/HeadDimensionsModelTree.jpg |
|
|
97 |
``` |
|
|
98 |
|
|
|
99 |
Now that we know original and desired dimensions the scale factors can be defined as |
|
|
100 |
the following block of code inside the `AnyManXYZ.any`. Please apply this changes and |
|
|
101 |
reload the model: |
|
|
102 |
|
|
|
103 |
```AnyScriptDoc |
|
|
104 |
Main.HumanModel.Anthropometrics.SegmentScaleFactors.Head = { |
|
|
105 |
§// Standard unscaled values |
|
|
106 |
AnyVar HEAD_BREADTH = 0.19; |
|
|
107 |
AnyVar HEAD_LENGTH = 0.239; |
|
|
108 |
AnyVar HEAD_HEIGHT = 0.26; |
|
|
109 |
|
|
|
110 |
// Scale factor computation |
|
|
111 |
LengthScale = 0.228/HEAD_HEIGHT;///< 228mm, DIN 1986 |
|
|
112 |
DepthScale = 0.193/HEAD_LENGTH; ///< 193mm, DIN 1986 |
|
|
113 |
WidthScale = 0.156/HEAD_BREADTH;///< 156mm, DIN 1986 § |
|
|
114 |
}; |
|
|
115 |
``` |
|
|
116 |
|
|
|
117 |
```{image} _static/lesson3/HeadMarkersFrontView.jpg |
|
|
118 |
:width: 49% |
|
|
119 |
``` |
|
|
120 |
|
|
|
121 |
```{image} _static/lesson3/HeadMarkersAppliedFrontView.jpg |
|
|
122 |
:width: 49% |
|
|
123 |
``` |
|
|
124 |
|
|
|
125 |
We have succesfully personalized our model to have a head that corresponds to |
|
|
126 |
the German 50th percentile man. We can see that it is slightly smaller than |
|
|
127 |
the default one coming with model. However, we still see that the body does not |
|
|
128 |
match the head size. The same anthropometric dataset suggests that the height |
|
|
129 |
of the 50th percentile man should be 173.3mm. We could mimic `_SCALING_UNIFORM_` |
|
|
130 |
by defining a common scaling factor and applying it to all dimensions like this: |
|
|
131 |
|
|
|
132 |
```AnyScriptDoc |
|
|
133 |
Main.HumanModel.Anthropometrics.BodyMass = 75 ; |
|
|
134 |
Main.HumanModel.Anthropometrics.BodyHeight = 180 /100; |
|
|
135 |
|
|
|
136 |
§#define STATURE_SCALE_FACTOR 1.733/1.75§ |
|
|
137 |
|
|
|
138 |
... |
|
|
139 |
|
|
|
140 |
Main.HumanModel.Anthropometrics.SegmentScaleFactors.Pelvis = { |
|
|
141 |
LengthScale = §STATURE_SCALE_FACTOR§; |
|
|
142 |
DepthScale = §STATURE_SCALE_FACTOR§; |
|
|
143 |
WidthScale = §STATURE_SCALE_FACTOR§; |
|
|
144 |
}; |
|
|
145 |
Main.HumanModel.Anthropometrics.SegmentScaleFactors.Thorax = { |
|
|
146 |
LengthScale = §STATURE_SCALE_FACTOR§; |
|
|
147 |
DepthScale = §STATURE_SCALE_FACTOR§; |
|
|
148 |
WidthScale = §STATURE_SCALE_FACTOR§; |
|
|
149 |
}; |
|
|
150 |
|
|
|
151 |
... |
|
|
152 |
``` |
|
|
153 |
|
|
|
154 |
```{image} _static/lesson3/ScalingXYZFinal.jpg |
|
|
155 |
``` |
|
|
156 |
|
|
|
157 |
By applying these changes we complete this tutorial. Our model looks more natural |
|
|
158 |
and corresponds to the 50th percentile German male as suggested by DIN in 1986. |
|
|
159 |
|
|
|
160 |
If you want to learn about more advanced patient specific scaling, take a look at the |
|
|
161 |
AnyBody tutorials. The tutorial on Scaling covers how to do patient-specific scaling based on |
|
|
162 |
geometry data from MRI and CT scans. |