HarryHeres / SlicerBoneMorphing

Extension for 3D Slicer for bone mesh morphing.
MIT License
1 stars 1 forks source link

SlicerBoneMorphing

Extension for 3D Slicer for bone mesh morphing.

At the moment, this module specializes for the humerus bone, but the use case is not limited to it.

Special thanks

Special thanks goes to my wonderful colleagues Eva C. Herbst (@evaherbst) and Arthur Porto (@agporto) for creating the initial idea and their huge help during the development of this module! Also, I would like to thank O. Hirose (@ohirose) for the research on BCPD/GBCPD and it's implementation (can be found here)

Installation

Supported platforms:

Steps:

DISCLAIMER! After restarting, the installation process will begin. If there are any Python modules not available in Slicer, they will be installed, so the startup will take SIGNIFICANTLY MORE amount of time. Do not be scared, this is intended behaviour.

Usage

After a successful install, the module will be available in the Morphing section. When switching to the module, you should be greeted with the following UI:

The UI consists of 4 main sections

Architecture

Module sections

Input section

This section is self-explanatory. Here, you choose two input models:

Preprocessing section

Before the generation process, we want to preprocess the model. First of all is the option of downsampling. For this, you can configure the threshold for downsampling by the following parameter:

After the downsampling, we compute the normals of the point cloud. The computation needs a radius for which the normals are calculated and maximum number of neighbours. These can be adjusted with the following parameters:

Also, we need to calculate a (Fast) point feature histogram in order to encode the local geometric properties of the models. This method uses the following parameters:

Registration

At this moment we have our models preprocessed and ready for the next step, which is the registration. Here we calculate the rigid alignment of the models in order to pre-align them. The concrete method we use is called RANSAC (random sample consensus). The behaviour of this algorithm can be adjusted by the following parameters:

The computed fit by the RANSAC algorithm is a bit "raw". To improve it further, we perform the ICP (Iterative closest points) algorithm. This can be tuned by the following parameter:

Reconstruction section

Since we now have a preprocessed meshes and with defined transformations from the source to the target, we can proceed to the reconstruction section. For the reconstruction we use the BCPD (Bayesian coherent point drift) algorithm. Now, the BCPD allows for very fine adjustments of its behaviour using lots of different parameters. For the exact description of their effects, please refer to the official documentation here.

Note: You do NOT have to perform any kind of installation process, the BCPD and its geodesic variant are already pre-built and preconfigured for immediate use in this module.

Not implemented options:

Postprocessing section

After the model is reconstructed, we include a postprocessing section to slightly modify the result, if necessary. For these, we let you modify the following parameters:

After the whole process is done, both the generated mesh (source transformed into target, standalone) and the merged mesh (generated meshes merged with the target; "combined model") are import back into the current Slicer scene.

Contributors

A huge thank you to all of the contributors!