Table des matières:

Projet bac à sable BME 60B : 6 étapes
Projet bac à sable BME 60B : 6 étapes

Vidéo: Projet bac à sable BME 60B : 6 étapes

Vidéo: Projet bac à sable BME 60B : 6 étapes
Vidéo: Mon RS3 avait une petite faim 😈 2024, Juillet
Anonim
Projet bac à sable BME 60B
Projet bac à sable BME 60B

Notre projet Sandbox vise à aider les chercheurs dans le domaine biologique à analyser des échantillons de cellules et à découvrir les conditions de leurs cellules. Une fois que l'utilisateur a saisi une image de son échantillon de cellules, notre code traite l'image pour la préparer au comptage de cellules en convertissant l'image en niveaux de gris et en binaire. Le code utilise le seuillage pour supprimer les informations en excès ne se rapportant pas aux cellules réelles afin de trouver avec précision les masses cellulaires. Après avoir compté le nombre de cellules dans l'image, notre code donne la taille en pixels de l'image, puis trouve la distribution de la surface des cellules en traçant le nombre de cellules en fonction de la surface des cellules afin de donner à l'utilisateur la confluence, qui est la pourcentage de la surface d'une boîte de culture qui est recouverte par les cellules d'intérêt. Sur la base de la confluence, le chercheur peut déterminer si oui ou non les cellules doivent être repiquées; le passage des cellules fait référence à l'extension de la durée de vie ou du nombre de cellules ou de micro-organismes en transférant une partie de la culture dans un milieu de croissance frais, et il est utile lorsque les cellules deviennent trop grosses ou à court de nourriture. Après avoir exécuté le code et traité l'image, l'utilisateur peut décider d'accepter ou de rejeter les résultats, et procéder à l'ajustement du seuil pour une meilleure récupération des données si nécessaire.

Étape 1: Sélectionnez et configurez l'image pour l'analyse

Sélectionner et configurer l'image pour l'analyse
Sélectionner et configurer l'image pour l'analyse

La première étape de notre code consiste à sélectionner l'image appropriée et à la configurer pour l'analyse dans Matlab. Nous pouvons sélectionner l'image à l'aide de la fonction uigetfile qui nous permet de récupérer n'importe quel fichier et de l'insérer dans le programme. Ensuite, en utilisant imread, nous lisons l'image et la configurons pour l'analyse dans Matlab. L'image sélectionnée est ensuite affichée sur une sous-intrigue.

Étape 2: Seuil et interface graphique

Seuil et interface graphique
Seuil et interface graphique
Seuil et interface graphique
Seuil et interface graphique

Au tout début du code, une image est choisie en utilisant "uigetfile" puis en définissant cette image avec une variable. La variable sera ensuite utilisée pour identifier le code lors de l'exécution de différentes analyses. Une sous-parcelle 2x2 est créée dans la figure. En position 1, l'image originale sera affichée. La section suivante du code est l'endroit où les ajustements des seuils ont lieu. Initialement, une valeur par défaut d'un seuil de 0,6 est utilisée et est affichée en position 2 du sous-parcelle. Une instruction if est ensuite utilisée pour déterminer si l'utilisateur souhaite conserver le seuil ou l'ajuster. L'utilisateur peut ajuster le seuil à l'aide d'une interface graphique qui comprend l'image à différentes conditions de seuil, le curseur et un bouton d'enregistrement. Une fois le seuil défini, l'utilisateur cliquera sur le bouton Enregistrer pour enregistrer l'image et elle sera stockée dans les fichiers MATLAB des utilisateurs sous forme de-p.webp

Étape 3: Tracer les contours et la distribution des cellules

Tracer les contours et la distribution des cellules
Tracer les contours et la distribution des cellules
Tracer les contours et la distribution des cellules
Tracer les contours et la distribution des cellules

La partie suivante du code trace les contours. Il y a une boucle dans laquelle les cellules sont entourées d'un périmètre rouge, et les cellules qui se trouvent au-dessus d'une autre cellule sont entourées de vert. L'image encadrée est alors affichée en position 3 avec une ligne de distance interactive. Cette ligne déterminera le nombre de pixels dans la ligne ajusté par l'utilisateur pour un convertisseur de pixel en millimètre. Le facteur de distance est ensuite multiplié par la surface déterminée par les regionprops et la surface est maintenant exprimée en millimètres carrés. Les données sont ensuite tracées à l'aide d'un histogramme pour voir la répartition des cellules par zone. Cet histogramme sera alors affiché en position 4.

Étape 4: Convertir l'image de la cellule

Convertir l'image de la cellule
Convertir l'image de la cellule

Dans cette étape, nous avons pris l'image en niveaux de gris et l'avons binarisée, filtrée et inversée. L'exécution de ces fonctions sur l'image a supprimé les pixels bruyants qui pouvaient être confondus avec des cellules et a rendu l'image plus lisse et plus douce autour des bords des cellules. Cela a été fait pour extraire les cellules de l'image en tant que "taches" distinctes qui différaient en intensité de l'arrière-plan. Les "Blobs" étaient des images blanches de haute intensité et le fond était noir. Si cela nous avait permis un peu plus de temps, nous aurions utilisé une conversion d'image Blob différente au lieu de la fonction imbinarize pour être plus précis et mieux adapté à nos images, mais nous avions besoin de plus de temps pour rechercher et implémenter la fonction.

Étape 5: compter les cellules et calculer la confluence des cellules

Compter les cellules et calculer la confluence des cellules
Compter les cellules et calculer la confluence des cellules

Dans cette étape du code, nous avons cherché à compter le nombre de cellules qui se trouvaient dans l'image. Nous avons principalement utilisé la fonction regionprops pour calculer les zones des blobs et si la zone était calculée pour être dans notre limite souhaitée, elle serait tracée sur une sous-parcelle. Les limites ont été fixées afin de supprimer les petits pixels bruyants ou les grandes intensités qui n'étaient pas des cellules. Le compteur de cellules compterait ensuite les centroïdes qui ont ensuite été tracés et les ajouterait au compteur dans la boucle for. Une fois les zones des cellules déterminées, nous avons pu calculer la confluence. L'importance principale de cette étape dans le code était de trouver la confluence des cellules et cela était essentiel pour notre objectif final du code. Pour ce faire, nous avons calculé en additionnant les pixels (sum(allAreas)) de chaque blob, puis en les divisant par la valeur totale des pixels de l'image (numel(img)). Ce rapport nous donnerait la confluence et s'il était déterminé à être supérieur à 80% alors il est temps que les cellules soient repiquées par le chercheur. Nous avons cherché à être aussi précis et exacts que possible, mais avec le temps limité, des inexactitudes se sont produites. Si le temps l'avait permis, nous aurions cherché des moyens de rendre le comptage des blobs plus précis, tels que davantage de techniques de filtrage et/ou une transformation de Hough, car il n'y avait pas encore assez de recherches pour essayer cette technique de filtrage.

Étape 6: Rondeur des cellules

Rondeur des cellules
Rondeur des cellules
Rondeur des cellules
Rondeur des cellules

Avant de pouvoir mesurer la rondeur du blob dans une image, nous devons convertir du RVB en niveaux de gris, binariser, inverser et filtrer l'image. Une technique de filtrage utilise la fonction bwareaopen, qui filtre l'image d'intérêt et supprime toutes les spécifications ou pixels trop petits qui ne représentent pas la taille d'une cellule. Un élément structurant est créé avec une forme de disque et de voisinage de 2 et il est utilisé pour combler les lacunes dans l'arrière-plan ou dans les cellules. Ensuite, nous utilisons la fonction bwboundaries qui trace les blobs et les stocke dans une matrice. Nous étiquetons ensuite l'image en utilisant différentes couleurs afin qu'elle devienne un visuel plus clair. Ensuite, à l'aide d'une boucle for qui s'exécute en fonction du nombre d'objets et de trous trouvés dans l'image, il définit une limite autour des blobs correspondant à ce tableau. Une fois cette boucle terminée, une autre boucle commence, toujours en fonction du nombre d'objets et de trous trouvés dans l'image. Cette fois, nous utilisons la fonction regionprops qui rassemble certaines propriétés comme la zone du tableau et stocke les informations contenant le nombre d'objets et de trous. À l'aide de ces informations, nous calculons l'aire et le périmètre de ces objets à l'aide de la forme centroïde. Un seuil est défini afin de comparer les résultats une fois que nous calculons l'unité métrique d'un objet circulaire et que nous traçons cette mesure sous forme de texte à côté des centroïdes calculés. Le code final affichera la rondeur des différentes cellules trouvées dans l'image et toutes les valeurs proches de la valeur une seront plus rondes que les autres. Une valeur de 1 implique que la cellule est parfaitement ronde et en bon état pour être repiquée.

Conseillé: