Diff of /Docs/Scaling/lesson3.md [000000] .. [38ba34]

Switch to unified view

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.