March 10, 2017 — Jeffrey Bryant, Scientific Information Group
In Mathematica 10, we introduced support for anatomical structures in EntityValue, which included, among many other things, a “Graphics3D” property that returns a 3D model of the anatomical structure in question. We also styled the models and aligned them with the concepts in the Unified Medical Language System (UMLS).
This means each model knows what lower-level structures it’s made of.
Computation versus Appearance
I should note that the models being used are not just eye candy. If that were the intent, we might explore low polygon count models and use textures for a more realistic appearance. But these models are not just good for looking at—you can also use them for computation. For meaningful results, you need accurate models, which may be large, so you may need to be patient when downloading and/or rendering them. Keep in mind that some entities, like the brain, have lots of internal structures. So the model may be larger than you expect, although you may not see this internal structure from the outside.
One example of using these models for computation would be calculating the eigenfrequencies of an air-filled transverse colon (let the jokes fly). Finite element mesh (FEM) calculations are common in medical research today. By retrieving the mesh from AnatomyData, we can perform computations on the model.
Now we can obtain the resonant frequencies of the transverse colon.
You can use Sound to listen to the resonant frequencies of the transverse colon.
We can find the surface area of the model by directly operating on the MeshRegion. Units are in square millimeters.
To compute the volume, we need to convert the MeshRegion into a BoundaryMeshRegion first. Units are in cubic millimeters.
You can even compute the distance between the transverse colon and the region centroid of the large intestine. Units are in millimeters.
Lower-resolution models will give lower-quality results.
Structure and Style
To make it easy to render anatomical structures, we introduced AnatomyPlot3D.
AnatomyPlot3D allows directives to modify its “primitives,” similar in syntax to Graphics3D.
The output of AnatomyPlot3D doesn’t contain the original Entity objects. They get resolved at evaluation time to 3D graphics primitives, and the normal rules of the graphics language apply to them. The output of AnatomyPlot3D is a Graphics3D object.
Because AnatomyPlot3D can be thought of as an extension to the Graphics3D language, you can mix anatomical structures with normal Graphics3D primitives.
In AnatomyPlot3D, the Graphics3D language has been extended at multiple levels to make use of anatomical structures. Within AnatomyPlot3D, anatomical entities work just like graphics primitives do in Graphics3D. But they can also be used in place of coordinates in Graphics3D primitives like Point and Line. In that context, the entity represents the region centroid of the structure. This allows you, for example, to draw a line from one entity to another.
This concept can be applied to annotate a 3D model using arrows and labels.
You can refer to the subparts of structures and apply styles to them using AnatomyForm. It applies only to anatomical structures (not Graphics3D primitives) and supports a couple of different forms. The following example behaves similar to a standalone directive, except that it applies only to the anatomical structure, not the Cuboid.
A more useful form can be used to style subparts.
AnatomyForm works by allowing you to associate specified directives with specified entities that may or may not exist in the structure you are visualizing. Any Directive supported by Graphics3D is supported, including Lighting, Opacity, EdgeForm, FaceForm, ClipPlanes and any combination thereof. In addition to supporting styles for specific entities, AnatomyForm also supports a default case via the use of an underscore. The following example shows the left humerus in red and everything else transparent and backlit, giving an X-ray-like appearance.
PlotRange can make use of entities to constrain what would otherwise include all of the referenced entities. The following example includes several bones of the left lower limb, but the PlotRange is centered on the left patella and padded out from there by a fixed amount.
SkinStyle is a convenient way to include any enclosing skin that can be found around the specified entities.
The default styling can be overridden.
You can use ClipPlanes to peel away layers of skin.
Use multiple clip planes to peel away successive anatomical layers.
Apply geometric transformations to anatomical structures to rotate them. The following example includes many bones in the skull, but applies a rotation to just the elements of the lower jaw around the temporomandibular joint.
A mix of styles can be useful for highlighting different tissue types in the head.
A similar approach can be used in the torso for different organs.
Here is an advanced example showing the use of ClipPlanes to remove muscles below a specific cutting plane.
Inner structures can be differentiated using styles, in this case within the brain.
Here are links to some animations rendered using AnatomyPlot3D:
As time goes on, we will continue to add additional models and tools allowing you to explore human anatomy more deeply.