Modélisation d'un fémur pour déterminer la probabilité de fracture
Par Jeanne GUILBAUD et Julie BOUSSARD, le 8 décembre 2022.
Introduction
Les fractures ostéoporotiques de la hanche provoquent une perte de la qualité de vie et peuvent même être mortelles chez les personnes âgées. Il est donc nécessaire de pouvoir analyser le fémur afin d'en déterminer le risque de fracture.
Pour atteindre cet objectif nous avons dans un premier temps segmenter un fémur, avant de le mailler avec un maillage d'abord surfacique puis volumique. En superposant le fémur segmenté avec des images issues de CT-scan nous avons pu déterminer le module d'Young de l'os dans les différents points du maillage. Par méthode des éléments finis nous avons pu déterminer la déformation élastique au sein du fémur. A partir de la valeur de cette déformation élastique, nous pouvons déterminer la probabilité de fracture du fémur étudié.
Import des bibliothèques nécessaires au projet
Séparation surfacique du fémur en trois parties: head, body et base
Dans cette partie, nous souhaitons séparer la surface du fémur segmenté en 3 parties limites afin d'appliquer sur chacune d'entre elles les meilleures conditions limites possibles. On considèrera que la tête subira l'entièreté du poids de l'individu tandis que la base sera fixe.
On lit le fichier .stl et on affiche les coordonnées limites pour pouvoir ensuite séparer la surface en trois.
On sépare ensuite dans un premier temps la tête du reste. Puis, on coupe le reste en deux : le corps et la base.
Il y a deux manière de faire le premier découpage en fonction de latéralité du fémur. En effet si il s'agit d'un fémur droit ou d'un fémur gauche, le plan de séparation ne sera pas le même (il fera soit un angle de 20° soit de -20° avec la verticale). Pour pouvoir choisir quelle méthode utiliser, on ajoute un argument d'entrée: latéralité.
Calcul des différentes surfaces
Affichage des trois parties
Enregistrement des trois surfaces dans trois fichiers stl différents
Génération d'un maillage 3D
Cartographie des propriétés matériaux
Nous avons construit un model surfacique 3D du fémur, il nous faut désormais modéliser les propriétés matériaux de l'os, notamment son module d'Young aux différents points du maillage. Pour déterminer le module d'Young, nous nous appuyons sur des images médicales réalisées par CT-scan que nous superposons au fémur. Nous relevons les valeurs de l'Hounsfield Unit pour chaque pixel de l'image. Grâce à une relation déjà existant, nous sommes alors capables de relier l'Hounsfield Unit avec la densité minérale osseuse. En utilisant une relation élasticité/densité nous pouvons dès lors remonter à la valeur du module d'Young.
Affichage de l'image médical et du fémur segmenté
Nous remarquons que le fémur et les images ne sont pas superposés. Ceci s'explique par le fait que les deux objets ne sont pas représentés dans le même système de coordonnées. Les images médicales sont dans un système de coordonnées (i,j,k) où i et j vont de 1 au nombre de pixel de l'image et k va de 1 au nombre d'image, tandis que le fémur segmenté utilise les coordonnées physiques. Pour permettre la superposition et des deux objets et donc le calcul du module d'Young, nous allons utiliser le format DICOM.
Le Format DICOM
Le format DICOM (Digital Imaging and Communications in Medicine) est le format principalement utilisé pour traiter des images médicales et leurs données. Pour superposer les images médicales avec notre fémur, nous allons calculer les coordonnées de chaque voxel des fichiers dicom grâce à la formule ci-dessous.
Où:
Toutes ces variables sont contenues dans les informations de l'image, il suffit d'utiliser le bon argument pour obtenir leur valeur.
Calcul des coordonnées des voxels de chaque image
Nous allons utiliser pydicom pour manipuler la série d'images enregistrées au format dicom.
Nous allons désormais appliquer la formule décrite ci-dessus afin de calculer les coordonnées des voxels.
Maintenant que nous disposons des coordonnées des voxels nous pouvons interpoler l'intensité des images médicales directement sur notre maillage en utilisant des fonctions d'interpolation de Scipy.
On interpole ensuite l'Hounsfield Unit sur le fémur uniquement pour ne garder que la partie qui nous intéresse.
Nous devons désormais échantillonner l'Hounsfield Unit sur un nuage de points.
Conversion de l'Hounsfield Unit en module d'Young
Grâce aux deux articles suivants, nous avons pu identifier une relation entre HU et E. Il s'agit d'une relation linéaire élasticité/densité que l'on corrige à cause des incertitudes de mesure.
Pour vérifier la cohérence de nos résultats on affiche le maximum des valeurs de E on obtient un maximum de 18408 MPa, ce qui correspond bien à l'ordre de grandeur du module d'Young de l'os.
Nous avons donc jusqu'ici réussi à segmenter, délimiter les surfaces puis mailler le fémur que nous avons superposer avec les images médicales. En interpolant la valeur de HU sur le fémur segmenté nous avons alors pu en déterminer le module d'Young. Toutes ces étapes sont pour le moment uniquement appliquées à la surface du fémur. Dans la suite du projet, nous allons considérer le fémur dans son volume entier affin de pouvoir en déterminer la probabilité de fracture.
Obtention de la probabilité de fracture
Dans cette dernière partie, nous cherchons à obtenir la probabilité de fracture. Pour cela, nous allons générer un nouveau maillage en volume sur lequel nous appliquerons les différentes contraintes auxquelles l'os est soumis. Une fois ces contraintes définies, nous utiliserons la contrainte maximale pour en déduire la probabilité de fracture maximale.
Initialisation et mise en place des éléments nécessaires à la création du maillage .msh
Création du maillage
Calcul du module d'Young E et des différentes variables
Dans cette partie, il a été vérifié que tous les fichiers .stl et toutes les distances considérées sont en mm.
La force qui s'exerce sur le fémur est le poids du corps, on suppose qu'elle s'applique uniquement sur la tête du fémur, sur sa surface. On considère une personne appliquant 55kg sur son fémur.
On redéfinit maintenant différentes variables variables présentes dans notre maillage comme étant les parties ou caractéristique du fémur.
Pour calculer la force surfacique, il nous faut calculer la surface : celle de la tête du fémur. L'aire est en mm*mm. Enfin, on peut calculer la force surfacique appliquée.
Ainsi, la tête de notre fémur est soumise au poids du corps.
Reste maintenant à exploiter notre deuxième condition aux limites, la base fixée :
Nous pouvons maintenant définir les contraintes et tensions qui s'appliquent sur notre fémur. Puis calculer le module d'Young, comme nous l'avons fait précédemment.
Ci dessus, nous pouvons visualiser HU réparti sur le maillage de notre fémur. Les valeurs de HU nous servent maintenant à en déduire E grâce à la fonction calcul_E . Les autres variables et constantes sont calculées telles que :
On peut maintenant calculer la solution.
Calcul des contraintes et de la déformation
Par soucis de simplification, on considère une contrainte de Von Mises s'appliquant sur notre fémur.
Calcul de la probabilité maximale à partir de la déformation
La probabilité de fracture étant proportionnelle à la déformation subie par l'os, nous n'utilisons que la valeur max de epsilon pour calculer une probabilité maximale de fracture. Nous avons :
Finalement, nous obtenons une probabilité de fracture de 0,484.
Conclusion
Pour conclure ce projet, les différentes étapes nous ont permis d'évaluer les contraintes s'appliquant sur le fémur à partir de sa segmentation. Il s'agit ici d'un exemple d'application de modélisation au service de la santé, la donnée en entrée étant un fémur et un jeu de données d'imagerie médicale en sortie une probabilité de risque de fracture.
Toutefois, la probabilité maximale est d'autant plus utile qu'elle est accompagnée de sa localisation et il serait même encore mieux d'établir une carte des probabilité. Cela permettrait de pouvoir détailler les zones à risque et ainsi d'aider au mieux le patient à prévenir une potentielle fracture.
Critiques
Plus précisément, la probabilité finale trouvée n'est pas en accord avec la probabilité attendue, même si elle reste physiquement possible. En effet, la probabilité de fracture devrait être proche de 0 pour un fémur de cette taille subissant un poids de 55kg. Il doit donc il y avoir une erreur d'ordre de grandeur sur l'une de nos variables : nous n'avons pas réussi à l'identifier.