Cortical Thickness Mapping

Stradview can estimate various parameters, including thickness, of the cortex of a bone surface and display these as colour washes mapped to the surface in 3D, using the techniques described in the publications list. This is only possible with data which has been loaded from a DICOM or image file.

This measurement can either be performed interactively at user-controlled locations in the data set, or automatically on a previously defined 3D surface within the data. The best values are achieved with a prior estimate of what the expected HU value of the cortex would be if the imaging process had not blurred the data at all. This estimate can either be manually entered (for instance by looking at values for very thick cortices), or automatically estimated from the data. Having made these cortical measurements, it is also possible to create a new object which precisely defines the bone edges.

Alternatively, this page also allows the measurement of distances and underlying data values by direct comparison between two surfaces, or a surface with itself.

Otherwise each cortical thickness estimate is calculated by looking at values along a line through the data. The first slider on this task page controls the length of this line: it should be approximately three times the thickness of the thickest cortex you wish to measure. The second slider determines the 'width' of this line: if this is set to anything other than zero, then the data will be averaged in a direction orthogonal to the line before anything is estimated. This can be useful for very high resolution data, since it preserves the resolution through the cortex, whilst averaging data over the cortical surface. The outer cortical edge is automatically aligned before this averaging takes place, in order to preserve as much resolution as possible through the cortex.

The technique used to estimate cortical thickness is determined by the following 'technique' option. This selection over-rides the settings for many of the following controls. The various options are:

Note that, whilst all the above techniques will work with the line 'width' set to larger values than zero, the HRTC technique requires a non-zero line width to operate correctly.

During thickness estimation, the thickness visualisation page displays the results of the estimation procedure at each location.

Manual thickness estimation

For most purposes, the 'technique' option is all that needs to be set, however, if it is switched to 'manual', then the following controls will retain their previous values, but be enabled and can then be altered to affect the cortical thickness estimation in more subtle ways, as detailed below.

The 'inner' and 'outer' checkboxes should be ticked if you want to allow for an additional bone surface either just outside or just inside the cortex you wish to measure. The 'outer' checkbox also enables the measurement of joint space (between the outer cortical surface and a nearby outer bone surface). The 'metal' checkbox allows the process to take account of the presence of metal in CT data.

The 'Use thresholding' checkbox forces the use of simple thresholds on the CT data, rather than model-based deconvolution techniques. This may be a better option for very high resolution data. The 'Use local peak as density' checkbox can be used to force Stradview to use the less accurate Full-Width Half-Maximum technique, by assuming that the peak CT data along a line actually represents the cortical density at that point.

'Use globally smoothed density' affects the estimation of cortical density, and is what is used for the SSC-CBM technique. Rather than estimating a single global density value (as in CBM v1 and CBM v2), the density is allowed to vary over the surface.

'Post correct density for blur' is the technique used by CBM v2 to adjust this initial estimate of density later on in the process.

'Use endocortical model' indicates that the endocortical thickness should also be measured, either by including an endocortical transition region in the model-based optimisation, or (if 'use threshold' is ticked) by using the HRTC technique.

The following boxes can be used to control what gets optimised by Stradview, and what is fixed before the optimisation. If you enter a number in any of these boxes and press the return key (or move to another control), the boxes will become white and this number will be fixed. If you delete the contents of any box, the boxes will become grey and the value will be calculated dynamically by the cortical thickness algorithm. In CBM v1, the cortical density will be set to a constant, once 'estimate cortical density' has been pressed. For CBM v2, the in-plane and out-of-plane FWHM values will also be set at that point.

It can also be useful to set the 'outer density' to a fixed value: for instance, if you have cadaveric data scanned partially in tissue and partially in air, setting this to zero may improve the subsequent measurement.

Interactive thickness estimation

If the thickness task page is visible, the measure tool can be used to define the location for which a cortical thickness estimate is desired. This can either be done in the image window or in the 3D window.

In the image (top-left) window, zoom the image to an appropriate level, then click at the outer bone surface and drag the mouse away from the bone so that the line passes through the cortex orthogonal to the outer bone surface. Cortical thickness estimates will be displayed dynamically as the line is moved, and will also update if any of the model or line parameters are changed.

In the 3D window, simply click on a pre-existing 3D surface, and a measurement will be made at that point in the surface, with a direction corresponding to the surface normal.

This provides an easy method for performing a spot-check thickness measurement. See the thickness visualisation page for details of what is displayed for each thickness estimate.

Thickness mapping over a surface

To map cortical thickness over a surface or to automatically calculate an appropriate cortical CT value, the bone surface must first be defined. This can be done using the draw task page. Define each bone you wish to map the cortex over as an individual object in this task page, give them appropriate names, and ensure you have created the surface using the 'Update all' button on this task page. The surface resolution will control how many cortical thickness estimates are made: there is one estimate for every vertex in the constructed surface (you can see these by pressing 'L' in the 3d window). A good way to start the definition of the surface is to make use of the 'every frame' slider in the 'threshold' section, which will allow automatic thresholding of the entire data set. However, it is likely the result of this will need manual editing.

If you want to calculate thicknesses from just a part of a surface, for instance for looking at cartilage rather than bone, then you can first create a new surface patch using the procedure outlined in the draw task page. If you then save this patch, you can in future import it as a new surface as described below.

Alternatively, you can use the 'Import surface' button on the draw task page to directly import a surface you have generated in some other application. Note, however, that if the distribution of mesh vertices is not homogeneous, you will not get evenly sampled thickness estimates, and any smoothing applied to the estimates will not be correct (the smoothing works by averaging over vertex neighbourhoods, so the kernel will be reasonably constant and isotropic only if the vertex distribution is homogeneous). In contrast, meshes created within Stradview are suitably homogeneous.

Once a surface has been created or imported, return to the thickness task page, and the 'Current surface' button should now be enabled, as well as possibly the 'Estimate cortical density' button, depending on what technique has been chosen.

If it is enabled, first press the 'Estimate cortical density' button. This will look at all the bone surfaces which have been defined and use these to provide an estimate of cortical density. Note that during this process, some of the previously mentioned controls will be set to specific values which are appropriate for estimating density: they will be returned to the user-defined values afterwards. At the end of this process, some graphical results may be shown to allow you to validate whether this estimate seems realistic. If the 'Current surface' box is set to 'none', a single cortical density estimate will be generated for all the available surfaces. If you want separate estimates for each surface, then set the 'Current surface' to the surface you want before pressing the 'Estimate cortical density' button.

Cortical mapping is usually performed along a direction normal to the original surface. However, when the surface is highly curved or otherwise complex, and the cortical layer is quite thick compared to the surface curvature, this can result in failed measurements or an overlapping inner surface. The 'Map direction' option is an experimental method to adjust the direction in which these estimates are performed in order to improve on this. Leaving this at 'normal' will just use the surface normal direction. In any case, the recorded thickness is always the equivalent value in the direction of the outer surface normal, even if the measurement is in an adjusted direction.

To start cortical thickness mapping, first select one of the defined bone surfaces in the 'Current surface' box, then press 'Map over current'. Having completed the estimation process, cortical thickness will be shown as a colour wash over the surface in the 3D window. A key for this colour wash is shown below this window. If the process was cancelled at some point, cortical thicknesses will still be shown for the parts of the surface which had already been processed.

Cortical thickness estimates, density estimates, joint space and endocortical thickness estimates, and measurement error at each location can all be saved to external files, by using the 'Save results for current' button. This will save a 3D file defining the cortical surface, and binary files with one measurement per surface vertex, each listed in the same order as the vertices appear in the main 3D file. The binary files are all stored using double-precision floating point. The _err files contain the estimated standard deviation of the error at each measurement recorded in the corresponding _dat file. If any measurement is not valid, it is set to zero, with the associated error set to the special value of 1e10.

Since Stradwin v5.2, the default format of these files contains an additional 256-byte header which indicates the range of the data values and includes a comment as to the time and stradview version used to create this file. This header is only in the _dat.bin files, NOT the _err.bin files. The file names are as follows, with the example root filename "this_femur":

The previous format can still be selected by manually setting "RES_DAT_THICKNESS_FILES=0" in the stradview.ini configuration file. This is the same, except for the omission of the 256-byte header, and slightly different file names as follows:

Not all of these files will be written in all circumstances. The endocortical thickness file will only be written if either the HRTC or SSC-CBM techniques were used. The cortical surfaces and outer surface files will only be written if the 'outer' checkbox had been ticked, and the estimation was not done by the FWHM technique.

Files can also be loaded so long as they exactly match the number of vertices in the currently selected surface.

Creating the entire cortical or joint surface

The cortical thickness mapping process above starts with an approximate definition of the outer (periosteal) surface, but in the process of calculating cortical thickness it estimates the exact locations of various outer and inner surfaces related to bone and joint space. It is possible to create a new object from these measurements which exactly defines both inner and outer surfaces of the cortex, or alternatively defines the boundaries of the joint space between outer surfaces and any surrounding bone.

Such an object can be created (once cortical mapping is complete) by using the 'create surface in alternate' button, having set the object (on the draw task page) which this should be assigned to with the 'alternate surface' list. It will define the cortical surface if the visualisation is set to 'thickness'. It will define a joint space object if this is set to 'joint space'.

You can control what is included in this object by using the 'Inc. inner', 'outer' and 'caps' checkboxes. If all these are ticked, the new object will be a watertight (solid) surface surrounding either the cortex or the joint space. If 'caps' is not ticked, then the surface will contain the inner and outer layers, with exactly the same number of vertices each, but no cap to cover the end of the cortex, if it is cut off by the extent of the CT data. Clicking only 'inner' or 'outer', with 'caps' ticked, will create a watertight surface defining either the entire bone, or the entire trabecular region.

This object is slightly unusual, in that it is derived from another object, i.e. the approximate cortical surface used to create the thickness values. This means that if the original cortical surface is deleted, the derived cortical layer object will also be deleted.

A slightly more complex form of smoothing is used when creating these objects:

Measuring thickness from a pre-defined surface

It is also possible to make measurements by comparing a surface either with itself or with another surface. First set 'current surface' to the surface you want to measure, then set the 'alternate surface' to either the same surface (for self-comparison) or a different surface. Then 'compare current to alternate' will perform this comparison.

The 'thickness' will then show the distance between each vertex on the original surface and the point on the alternate surface which is intersected by the surface normal from the original point. The 'density' will show the average underlying data value along this intersection line: this average is split into two, so that the density stored at each surface point is that from the half of the line closest to that surface.

If the same surface is selected in both 'current' and 'alternate', each vertex will contain a measurement if there is an intersection with some other part of the surface - this is useful, for instance, in calculating thickness for a dual layer surface, such as of the skull.

If the surface is a cortical or joint surface as defined above, then it will already contain two matching layers representing an inner and an outer surface. In this case, all the measurements will be made between the matching points in each of these layers.