Traitement d'images pour nombre de globules blancs

Interactions utilisateurs

A noter que la liste déroulante ne fonctionne pas en local pour des raisons d'accès Cross Origine au disque. Elle fonctionne sur le site internet mis à disposition : an.fridez.dev.

Si ce mini-projet est utilisé en local; veuillez utiliser le petit formulaire (le champ input file ci-dessous) avec les images dans le répertoire img de l'archive envoyée.

Minimum : 180
Maximum : 220
Maximum pour graph : 240

Image Processing options

Image 1 Image 2 Image 3 Image 4

1. Image originale

2. Image niveaux de gris

3. Spectre d'intensité noir

4. Image noir & blanc

5. Erosion/Dilatation

6. Globules blancs (nombre = )

1. Introduction

Ce présent projet traite d'une détection de cellules au sein d'une image. Le nombre de globules blancs dans le sang est un indice important de santé pour toutes personnes.

En effet, un surplus de globules blancs peut indiquer :

Et un manque de globules blancs peut indiquer :

Il est donc important de pouvoir compter précisément le nombre de globules blancs d'une personne au sein d'un échantillon. Cela permet d'estimer correctement le nombre de cellules et de définir si la personne est en bonne santé ou non.

Pour un être humain, il est facile mais lent de dénombrer des cellules sur une image. Pour un ordinateur, c'est l'inverse. Il ne reconnaît en rien l'apparence d'une cellule. Un bon algorithme permet à un ordinateur de reconnâitre des cellules (formes). Une fois ce dernier implémenté, le dénombrement sera bien plus rapide qu'un humain grâce à la rapidité d'un ordinateur.

2. Solution proposée

La démarche pour dénombrer les globules blancs sur une image est la suivante :

  1. Récupérer l'image originale
  2. Transformer l'image en niveau de gris
  3. Dessiner un graphique du spectre d'intensité de l'image en niveaux de gris (de 0 à 255)
  4. Créer une image en noir et blanc (binaire, 0 ou 1)
  5. Effectuer un Image Processing
  6. Entourer les globules trouvés

2.1 Idée en lien avec le/les chapitres d'Algo num.

L'Image Processing est un lien direct avec le chapitre 3, Systèmes linéaires. En effet, beaucoup d'algorithmes utilisent des matrices pour travailler sur des images.

De plus, le calcul pour trouver le seuil limite [min; max] se réfère plus au chapitre 2, Résolution d'Equation.

2.2 Modèle développé

2.2.1 Calcul du seuil

Calcul seuil

Si i' est plus grand que la valeur de a, on garde a comme valeur maximale. L'intervalle s obtenu permet de transformer les pixels compris en valeur noir. Les autres seront définis en tant que pixels blanc pour l'image binaire.

2.2.2 Détecter des cercles

Détection de cellules

Ici, l'image est parcourue avec une fenêtre de taille fixe a. Cette dernière comprend un cercle permettant de tester si l'image dans la fenêtre contient une cellule. A chaque itération, l'algorithme contrôle si la fenêtre contient une cellule (tester les pixels du cercle de la fenêtre avec la matrice cercle créée). Si elle ne contient pas de cercle; la fenêtre est déplacée sur la droite d'un pixel. Si la fenêtre contient une cellule, la fenêtre est décallée sur la droite de la taille de cellule.

En cas de double détections ou plus, un test est effectuée pour ne pas compter à double des cellules. Leur centre doit être espacée de la taille d'une cellule pour que ces dernières soient comptées comme cellules différentes.

3. Résultats

Les résultats sont concluants. Ci-dessous se trouve la table des résultats avec les 4 images proposées :

Résultats pour les 4 images proposées
Image numéro Taille cellule Cellules trouvées
1 23 15/15 (cellules entières)
2 40 15/15 (cellules entières)
3 17 22/23 (cellules entières)
4 25 28/29 (cellules entières)
Note : les cellules non trouvées sont plus petites que les autres. L'algorithme implémenté cherche des cellules de même taille.

Pour des images trop grandes (ici l'image 2), il se peut qu'une erreur "RangeError: Maximum call stack size exceeded" soit retournée. Il s'agit de la pile d'appels de méthodes JavaScript qui est limitée. Cela provient des appels récursifs pour l'érosion et la dilatation. Une alerte s'affiche mais le résultat apparaît correct suite à l'Image Processing.

3.1 Code source

Le mini projet est scanné à l'aide d'un outil de qualité de code source. Les résultats sont les suivants :

Sonarscan

3.2 Documentation

Une documentation type TypeDoc est également générée. Voir la documentation

4. Conclusion

L'algorithme de détection des cellules fonctionne bien. En somme, la presque totalité des cellules est détectée.

Les faiblesses de la solution proposée sont les suivantes :

Les forces de la solution sont les suivantes :

Les perspectives d'améliorations sont les suivantes :

5. Références