Segmentation automatique des organes respiratoires

La segmentation manuelle des poumons prend environ 10 minutes et nécessite une certaine habileté pour obtenir le même résultat de haute qualité qu'avec la segmentation automatique. La segmentation automatique prend environ 15 secondes.


J'ai supposé que sans réseau neuronal, il serait possible d'obtenir une précision ne dépassant pas 70%. J'ai également supposé que les opérations morphologiques ne sont que la préparation d'une image pour des algorithmes plus complexes. Mais à la suite du traitement de ces 40 échantillons de données tomographiques, bien que peu nombreux, l'algorithme a segmenté les poumons sans erreur. De plus, après avoir testé dans les cinq premiers cas, l'algorithme n'a pas changé de manière significative et a correctement fonctionné sur les 35 autres études sans modifier les paramètres.


De plus, les réseaux de neurones ont un inconvénient - pour leur entraînement, nous avons besoin de centaines d'échantillons d'entraînement de poumons, qui doivent être balisés manuellement.



Le contenu



Structure du système respiratoire


Le système respiratoire comprend les voies respiratoires et les poumons. Les voies respiratoires sont divisées en voies aériennes supérieures et inférieures. Le point de séparation entre les voies respiratoires inférieures et supérieures est le point d'intersection de l'œsophage et des voies respiratoires. Tous les organes qui sont au-dessus du larynx sont les voies supérieures et le larynx et les organes en dessous sont les voies inférieures.


Liste des organes respiratoires:


La cavité nasale est une cavité remplie d'air entre le nez et le pharynx.
Le pharynx est un canal par lequel la nourriture et l'air voyagent.
La trachée est un tube relié au larynx et aux bronches.
Le larynx est responsable de la formation de la voix. C'est au niveau des vertèbres cervicales C4-C6.
Les bronches sont les canaux respiratoires, dont la partie principale est située à l'intérieur des poumons.
Les poumons sont le principal organe respiratoire.



Échelle de Haunsfield


Godfrey Hounsfield était un ingénieur électricien anglais qui, avec le théoricien américain Allan Cormack, a développé la tomodensitométrie, pour laquelle il a partagé le prix Nobel en 1979.



L'échelle de Hounsfield - est une échelle quantitative pour décrire la radiodensibilité, qui est mesurée en unités de Hounsfield, notée HU.


La radiodensité est calculée sur la base du coefficient d'atténuation du rayonnement. Le coefficient d'atténuation caractérise la facilité avec laquelle un volume de matériau peut être pénétré par le rayonnement.


La radiodensité est calculée par la formule:


$$ afficher $$ {μ_ {X} -μ_ {eau} \ sur μ_ {eau} -μ_ {air}} \ fois 1000 $$ afficher $$


μX,μeau,μairsont des coefficients d'atténuation linéaires pour le matériau mesuré, l'eau et l'air.


La radiodensité peut être négative car une radiodensibilité nulle correspond à l'eau. Cela signifie que tous les matériaux ayant un coefficient d'atténuation plus faible que le coefficient d'atténuation de l'eau (par exemple, le tissu pulmonaire, l'air) auront une radiodensibilité négative.


Les radiodensités approximatives pour divers tissus sont énumérées ci-dessous:


  • Air: -1000 HU.
  • Organes respiratoires: de -950 à -300 HU.
  • Sang (sans contraste des vaisseaux): de 0 à 100 HU.
  • Os: 100 à 1000 HU.


Liens vers Wikipedia: échelle de Hounsfield , Godfrey Hounsfield , coefficient d'atténuation .


Morphologie mathématique


Les opérations morphologiques sont les principaux outils qui ont été utilisés dans l'algorithme.
Dans le domaine de la vision par ordinateur, les opérations morphologiques sont appelées un groupe d'algorithmes pour la transformation de la forme des objets. Le plus souvent, les opérations morphologiques sont appliquées aux images binarisées où les unités correspondent aux voxels d'objets et les zéros à vider.
Les principales opérations morphologiques comprennent:


La dilatation morphologique est l'ajout de nouveaux voxels à tous les voxels de bord des objets. En d'autres termes, l'algorithme scanne tous les voxels correspondant au bord de l'objet et les agrandit en utilisant un noyau avec une forme donnée (sphère, cube, croix etc). Le noyau a son propre rayon (pour la sphère), ou la largeur du côté (pour le cube). Cette opération est souvent utilisée pour fusionner plusieurs objets voisins en un seul objet.


L'érosion morphologique est la coupure de tous les voxels se trouvant à la frontière (limite) des objets. Cette opération est inverse à la dilatation. Cette opération est utile pour éliminer le bruit qui a la forme de nombreux petits objets interconnectés. Cependant, cette méthode d'élimination du bruit ne doit être utilisée que si l'objet d'intérêt a une épaisseur bien supérieure au rayon d'érosion. Sinon, les informations utiles seront perdues.


La fermeture morphologique est une dilatation suivie d'une érosion. Il est utilisé pour fermer les trous à l'intérieur des objets et pour fusionner les objets voisins.


L'ouverture morphologique est une érosion suivie d'une dilatation. Il est utilisé pour supprimer les petits objets bruyants et pour séparer les objets en plusieurs objets.



Algorithme de Lee et compression RLE


Pour sélectionner des objets dans un volume de voxel binarisé, l'algorithme de Lie est utilisé. À l'origine, cet algorithme a été inventé pour trouver le moyen le plus court de sortir du labyrinthe. Nous l'utilisons pour sélectionner l'objet et le déplacer d'un tableau tridimensionnel de voxels à un autre. L'idée de base de l'algorithme consiste en un mouvement parallèle dans toutes les directions possibles à partir du point de départ. Pour un cas tridimensionnel, il est possible de se déplacer dans 26 ou 6 directions à partir d'un voxel.


Pour optimiser les performances, l'algorithme de codage de longueur d'exécution a été appliqué. L'idée principale de l'algorithme est que la séquence de uns et de zéros est remplacée par un chiffre égal au nombre d'éléments dans la séquence. Par exemple, la chaîne «00110111» peut être remplacée par: «2; 2; 1; 3 ". Cela réduit le nombre d'accès à la mémoire.



Liens Wikipedia: algorithme Lee, algorithme RLE .


Transformation de seuil du volume de base


En utilisant le tomographe, on a obtenu les données sur une radiodensibilité à chaque point de l'espace balayé. Les voxels aériens ont une radio-densité dans la plage de -1100 à -900 HU, et les voxels des organes respiratoires ont une radio-densité de -900 à -300 HU. Par conséquent, nous pouvons supprimer tous les voxels inutiles avec une radiodensibilité supérieure à -300 HU. En conséquence, nous obtenons un volume de voxel binarisé contenant uniquement les organes respiratoires et l'air.



Élimination de l'air extérieur


Pour segmenter l'air interne du corps, nous supprimons tous les objets adjacents aux coins du volume 3D. Ainsi, nous éliminons l'air extérieur.



Cependant, dans tous les cas, l'air à l'intérieur de la table du tomographe ne sera pas supprimé, car il peut ne pas avoir de connexion avec les coins du volume 3D.



Par conséquent, nous scannerons non seulement les coins, mais également tous les voxels se trouvant sur l'un des plans de bord du f. Mais, comme nous pouvons le voir sur l'image ci-dessous, les poumons ont également été retirés. Il s'avère que la trachée avait également une connexion avec le plan supérieur du volume 3D.



Nous devrons exclure le plan supérieur de la zone de numérisation. Il existe également des études dans lesquelles les poumons n'ont pas été entièrement capturés et le plan inférieur est connecté aux poumons.
Donc, si vous le souhaitez, vous pouvez également exclure le plan inférieur.



Mais cette méthode n'affecte que les études thoraciques. Dans le cas de la capture de tout le volume du corps, la connexion de l'air interne et externe à travers la cavité nasale apparaîtra Par conséquent, il est nécessaire d'appliquer une érosion morphologique pour séparer l'air interne et externe.



Après avoir appliqué l'érosion, nous pouvons revenir à la méthode de segmentation de l'air extérieur précédemment obtenue qui est basée sur la connectivité de l'air extérieur avec les plans latéraux du volume 3D.



Après la segmentation de l'air externe, nous pourrions immédiatement soustraire l'air externe de tout le volume de l'air et des poumons et obtenir l'air interne du corps et des poumons. Mais il y a un problème. Après l'érosion, certaines informations sur l'air extérieur ont été perdues. Pour le restaurer, nous appliquons une dilatation de l'air extérieur.



Ensuite, nous soustrayons l'air extérieur de l'air entier et des organes respiratoires et obtenons l'air intérieur et les organes respiratoires.




Segmentation de l'objet volume maximum


Ensuite, nous segmentons les organes respiratoires en tant qu'objet maximal en volume. Les organes respiratoires n'ont aucun lien avec l'air à l'intérieur du tractus gastro-intestinal.



Il convient de noter que le choix correct du seuil de radiodensibilité à l'étape initiale est important. Sinon, dans certains cas, il peut n'y avoir aucun lien entre les deux poumons en raison d'une faible résolution. Par exemple, si nous supposons que les voxels des organes respiratoires ont une radio-densité de -500 HU et moins, alors dans le cas ci-dessous, la segmentation des organes respiratoires en tant que plus grand objet en volume entraînera une erreur, car il n'y a aucun lien entre les deux poumons. Par conséquent, le seuil devrait être augmenté à -300 HU.



Fermer les vaisseaux à l'intérieur des poumons


Pour capturer les vaisseaux à l'intérieur des poumons, nous utiliserons une fermeture morphologique, c'est-à-dire une dilatation suivie d'une érosion de même rayon. La radiodensité des vaisseaux (sans contraste) est d'environ 0..100 HU.



Sur l'image, nous pouvons voir que les grands canaux sanguins ne sont pas fermés. Mais ce n'est pas nécessaire. Le but de cette opération était de détruire les nombreux petits trous à l'intérieur des poumons pour simplifier le processus de segmentation pulmonaire dans les étapes suivantes.


Algorithme de segmentation des organes respiratoires


En conséquence, nous obtenons l'algorithme de segmentation des organes respiratoires suivant:


  1. Transformation de seuil du volume de base avec le seuil "<-300 HU".
  2. Érosion morphologique avec un rayon de 3 mm pour la séparation de l'air extérieur et intérieur.
  3. Segmentation de l'air extérieur basée sur la connectivité de l'air extérieur avec les plans latéraux limites du volume 3D.
  4. Dilatation morphologique de l'air extérieur pour restituer les informations perdues après l'érosion.
  5. Soustraction de l'air extérieur de l'air entier et des organes respiratoires pour obtenir l'air intérieur et les organes respiratoires.
  6. Segmentation de l'objet de volume maximum.
  7. Fermeture morphologique des vaisseaux à l'intérieur des poumons.


Implémentation d'algorithmes dans MATLAB


Fonction "getRespiratoryOrgans"


% Returns the whole respiratory organs volume (lung and airway volume) % without separating of the left and right lung. % V = base volume with radiodensity data in Hounsfield units. % cr = radius of vessels morphological closing. % ci = iteration count of vessels morphological closing (fe 3-times % make dilation and after that 3-times make erosion. function RO = getRespiratoryOrgans(V,cr,ci) % Threshold transform of the base volume with the threshold level "<-300 HU". AL=~imbinarize(V,-300); % Morphological erosion with the 3 mm radius for the separation of external % and internal air. SE=strel('sphere',3); EAL=imerode(AL,SE); % Segmentation of external air based on external air connectivity with the % boundary side planes of the 3D volume. EA=getExternalAir(EAL); % Morphological dilation of the external air to restore the information lost % after the erosion. DEA=EA; for i=1:4 DEA=imdilate(DEA,SE); DEA=DEA&AL; end % Subtraction of the external air from the whole air and respiratory organs to % obtain the internal air and respiratory organs. IAL=AL-DEA; % Segmentation of the maximum volume object. RO=getMaxObject(IAL); Morphological closing of the vessels inside the lungs. RO=closeVoxelVolume(RO,3,2); 

Fonction "getExternalAir"


 % Returns the volume which is connected with the edge surfaces of % the voxel scene (except the top surface, because lungs can have % a connection with the top surface). % EAL = eroded lung-and-air binarized volume. function EA = getExternalAir(EAL) % The “bwlabeln” function segments objects: voxels of a one object % equates to 1, and of another one - to 2, etc. V=bwlabeln(EAL); % We request such characteristics of the objects as bounding box and % list of all object voxels. R=regionprops3(V,'BoundingBox','VoxelList'); n=height(R); % Create a 3D matrix for storing external air voxels. s=size(EAL); EA=zeros(s,'logical'); % Scan all the objects to find objects belonging to the external air. for i=1:n % Define the minimum and maximum x and y coordinates of the object. x0=R(i,1).BoundingBox(1); y0=R(i,1).BoundingBox(2); x1=x0+R(i,1).BoundingBox(4); y1=y0+R(i,1).BoundingBox(5); % If the edge voxels of the object are in contact with the side planes of % the 3D volume, then copy all the voxels of this object into the matrix EA. if (x0 < 1 || x1 > s(1)-1 || y0 < 1 || y1 > s(2)-1) % Convert the object voxel coordinates data to the matrix type: % [[x1 y1 z1] [x2 y2 z3] ... [xn yn zn]]. mat=cell2mat(R(i,2).VoxelList); ms=size(mat); % Fill the matrix containing the voxels of the external air. for j=1:ms(1) x=mat(j,2); y=mat(j,1); z=mat(j,3); EA(x,y,z)=1; end end end 

Fonction "getMaxObject"


 % Returns the largest object in the voxel volume V. % O = the voxels of the largest object. % m = the volume of the largest object. function [O,m] = getMaxObject(V) % Segment the objects. V=bwlabeln(V); % Reqiest the information about the objects volume and objects voxel coordinates. R=regionprops3(V,'Volume','VoxelList'); % Determine the index of the maximum volume object. v=R(:,1).Volume; [m,i]=max(v); % Create the 3D matrix for storing the largest object voxels. s=size(V); O=zeros(s,'logical'); % Copy the largest object voxels to the new matrix. mat=cell2mat(R(i,2).VoxelList); ms=size(mat); for j=1:ms(1) x=mat(j,2); y=mat(j,1); z=mat(j,3); O(x,y,z)=1; end 

Le code source peut être téléchargé par la référence .


Conclusion


Les articles suivants vont être:


  1. segmentation de la trachée et des bronches;
  2. segmentation pulmonaire;
  3. segmentation des lobes pulmonaires.

Les algorithmes suivants seront considérés:


  1. transformation de distance;
  2. la transformation du plus proche voisin, également appelée transformation d'entité;
  3. calcul des valeurs propres de la matrice de Hesse pour la segmentation d'objets 3D plats;
  4. segmentation des bassins versants.

Source: https://habr.com/ru/post/fr461329/


All Articles