Table des matières:
- Étape 1: Trouvez les IRM et ARM d'un cerveau normal et d'un cerveau affecté par Moyamoya
- Étape 2: chargez des images sur MATLAB et attribuez des images à une variable pour afficher des images
- Étape 3: Améliorez les structures allongées dans l'image d'intensité avec le filtrage multi-échelle
- Étape 4: Exécuter un filtre médian 2D
- Étape 5: masquer l'image
- Étape 6: sélectionnez les analyses MRA pour les tests statistiques
- Étape 7: Calculer la surface des vaisseaux sanguins en vue des tests statistiques
- Étape 8: Exécuter un test T pour échantillons indépendants
2025 Auteur: John Day | [email protected]. Dernière modifié: 2025-01-13 06:57
Moyamoya, "bouffée de fumée", est une maladie rare qui est causée par le blocage des artères au niveau des noyaux gris centraux, qui est une zone à la base du cerveau. La maladie est une maladie cérébrovasculaire progressive qui touche principalement les enfants. Les symptômes du moyamoya comprennent un AVC initial, des mini-AVC constants, une faiblesse musculaire, une paralysie ou des convulsions résultant du rétrécissement progressif des artères. Sans traitement, le moyamoya causera des problèmes d'élocution, des troubles sensoriels et des troubles de la conscience. Dans notre projet, nous utiliserons MATLAB afin de prétraiter une image IRM ou ARM à l'aide de divers filtres pour réduire le bruit dans l'image afin de localiser la zone affectée. De plus, nous utiliserons une amélioration des fonctionnalités pour localiser plus précisément les zones affectées. De plus, nous effectuerons ensuite un test t d'échantillons indépendants pour déterminer s'il existe une différence significative entre la quantité de vaisseaux sanguins dans un cerveau normal par rapport à un cerveau affecté par moyamoya.
Étape 1: Trouvez les IRM et ARM d'un cerveau normal et d'un cerveau affecté par Moyamoya
Ces images sont les scans que nous avons utilisés pour le projet que nous avons trouvés en ligne. Les deux images avec les vaisseaux sanguins situés au milieu sont des IRM, tandis que les deux autres images sont des IRM.
Les liens suivants sont où ces images se trouvent:
static.cambridge.org/resource/id/urn:cambr…
static.cambridge.org/resource/id/urn:cambr…
Étape 2: chargez des images sur MATLAB et attribuez des images à une variable pour afficher des images
Pour commencer le processus, commencez par effacer la fenêtre de commande, fermez toutes les figures et graphiques possibles qui peuvent être déjà ouverts et effacez les variables déjà affectées dans votre espace de travail.
Après, créez une boucle for de 1 à 2 en utilisant la commande i = [1:2]
Après, chargez les images MRA à l'aide de la commande imread(sprintf('filename%.filetype', i)) pour lire les images à partir des fichiers spécifiés par le nom de fichier suivi du numéro utilisé pour la boucle en utilisant sprintf pour le chargement par lots et attribuez en une variable.
Ensuite, pour afficher l'image dans une figure, utilisez la commande imshow(I).
Pour affecter une palette de couleurs grises, utilisez la commande colormap(gray).
Pour éliminer complètement la couleur et convertir la matrice 3D des images en 2D, utilisez la commande rgb2gray(I) et affectez-la à une variable distincte.
Chargez ensuite les images IRM en utilisant la commande précédemment indiquée ou imread(sprintf('filename%.filetype', i)) et affectez-la à une nouvelle variable
Répétez la commande rgb2gray avec la nouvelle variable utilisée pour les images IRM.
Si nécessaire, vous pouvez redimensionner une image à l'aide de la commande imresize(A, scale) et l'affecter à une variable distincte.
Étape 3: Améliorez les structures allongées dans l'image d'intensité avec le filtrage multi-échelle
En utilisant une nouvelle variable, utilisez la commande fibermetric(A) pour améliorer les structures tubulaires dans les images
Avec la variable précédente, utilisez la commande histeq(B) pour améliorer les égalisations d'histogramme en transformant l'intensité des images et l'affecter à une nouvelle variable.
Affichez l'histogramme à l'aide de la commande imhist(B)
Créez une nouvelle variable pour créer un seuil pour le filtre. Dans ce cas, attribuez la variable précédente> 0,875, en filtrant l'intensité des pixels sous la valeur de 0,875
Après, créez une nouvelle figure et utilisez la commande imshow(A) pour afficher la nouvelle image filtrée.
Étape 4: Exécuter un filtre médian 2D
À l'aide de la commande medfilt2(A, [m n]), exécutez un filtre médian 2D, où chaque pixel de sortie contient la valeur médiane dans la limite mxn autour du pixel respectif dans l'image d'entrée.
Créez une nouvelle figure et utilisez imshow(A) pour afficher l'image filtrée médiane.
Étape 5: masquer l'image
En utilisant l'image filtrée médiane, utilisez la commande [labeledImage, numberOfBlots] = bwlabel(A) pour compter le nombre de taches blanches dans l'image
Ensuite, utilisez la fonction d'accessoires de région states = regionprops(labeledImage, 'Area') pour calculer les surfaces de chaque tache ou vaisseau sanguin
Attribuer toutes les zones en une seule variable
Ensuite, en utilisant une autre variable, comptez le nombre de taches qui dépassent 50 pixels
Ensuite, triez toutes les taches inférieures à 50 pixels dans l'ordre décroissant à l'aide de la commande [sortedAreas, sortedIndicies] = sort(Areas, 'descend')
Ensuite, à l'aide d'une autre variable, utilisez la commande ismember(labeledImage, sortedIndicies(1:numberToExtract)) pour renvoyer un tableau dont les éléments de labeledImage se trouvent dans triésIndicies du numéro 1 au nombre de vaisseaux sanguins pour renvoyer un 1 logique (vrai) ou un 0 logique (faux).
Avec la variable de l'étape précédente, trouvez les points qui sont vrais (valeurs > 0) et créez un tableau logique pour créer une image binaire et l'affecter à une nouvelle variable.
Créez une nouvelle figure et utilisez imshow(A) la nouvelle image binaire.
Ensuite, inversez l'image à l'aide de la commande imcomplement(A) et affectez-la à une variable différente.
Pour créer une image masquée, utilisez une nouvelle variable avec la commande resizedimage.*uint8(invertedimage)
Créez une nouvelle figure et utilisez imshow (A) pour afficher l'image masquée.
Pour terminer l'intégralité du code, assurez-vous d'utiliser la commande 'end' pour terminer l'intégralité de la boucle for
Étape 6: sélectionnez les analyses MRA pour les tests statistiques
Pour préparer les tests statistiques, sélectionnez les analyses MRA qui doivent être utilisées pour le test t d'échantillons indépendants. Parce que nos deux échantillons seront des cerveaux atteints de Moyamoya et des cerveaux normaux, sélectionnez une quantité décente d'analyses ARM de chaque groupe.
Étape 7: Calculer la surface des vaisseaux sanguins en vue des tests statistiques
Le test statistique se concentrera sur la longueur ou la quantité de vaisseaux sanguins indiqués sur les IRM. Ainsi, il faut calculer l'aire des vaisseaux sanguins avant comparaison.
Commencez par filtrer les ARM de cerveaux normaux et calculez la quantité de vaisseaux sanguins. Pour ce faire, exécutez une boucle for. Comme il y a trois images, la condition sera i = [1:3].
Ouvrez l'image avec la commande imread et affectez-la à une variable.
Ensuite, créez une instruction if/else avec la commande if, else. Pour l'instruction if, utilisez la commande size(A, 3)==3, où A est la variable utilisée pour ouvrir l'image, pour créer une instruction if lorsque la troisième dimension du tableau est 3. Convertissez ensuite l'image en 2D et supprimez la couleur à l'aide de la commande rgb2gray(A) et affectez-la à une nouvelle variable. Utilisez la commande imresize(A, [m n]) pour redimensionner l'image. Dans ce cas, nous avons redimensionné les images en matrice 1024 x 1024. Pour améliorer les structures tubulaires de l'image, utilisez à nouveau la commande fibermetric et affectez-la à une nouvelle variable.
Ce qui suit est pour l'instruction else. Si l'image n'est pas une matrice 3D, nous voulons ignorer la conversion. Faites la même chose que l'instruction if, mais sans la commande rgb2gray(A).
Créez une nouvelle variable, en la définissant égale à la variable du pas de fibre métrique supérieur à 0,15. Cela seuille l'image pour des intensités supérieures à 0,15.
Nous allons répéter les lignes de codes des étapes 4 et 5 de l'instructable de la ligne de filtre médiane jusqu'à la ligne imshow (I). Ensuite, utilisez la commande sum(I(:)) pour additionner tous les pixels qui composent les vaisseaux sanguins et affectez-les à une variable distincte. Nommez une nouvelle variable NormalBloodVessels(i) et définissez-la comme égale à la variable de la commande sum(I(:)). Cela ajoute les données à la matrice.
Terminez la boucle et répétez mais pour les ARM de cerveaux affectés par Moyamoya. Nommez la variable à la fin MoyaMoyaBloodVessels(i) pour ne pas la confondre avec les ARM cérébrales normales.
Étape 8: Exécuter un test T pour échantillons indépendants
Puisqu'il y a deux échantillons indépendants et une petite population, exécutez un test t pour échantillons indépendants.
Créez et nommez une fonction qui exécute un test t d'échantillons indépendants pour déterminer si la quantité de vaisseaux sanguins dans les ARM de cerveaux normaux est significativement égale ou non à celle des ARM de cerveaux affectés par Moyamoya.
Affichez l'hypothèse définie pour le test en utilisant la commande disp('X'). Sur la première ligne, affichez « Hypothèses pour le test t à deux échantillons ». Sur la deuxième ligne, affichez « H0 = La quantité de vaisseaux sanguins d'un cerveau normal est égale à la quantité de vaisseaux sanguins d'un cerveau atteint de la maladie de Moyamoya », pour énoncer l'hypothèse nulle. Sur la troisième ligne, affichez « HA = La quantité de vaisseaux sanguins d'un cerveau normal n'est pas égale à la quantité de vaisseaux sanguins d'un cerveau atteint de la maladie de Moyamoya ». énoncer l'hypothèse alternative.
À l'aide d'un intervalle de confiance de 95 % et d'une taille d'échantillon de 3, calculez le score t à l'aide de la commande tinv([0,025 0,975], 2) et attribuez-le à la variable t. Utilisez la commande var(NormalBloodVessels) et var(MoyaMoyaBloodVessels) et affectez-les à des variables pour calculer les variances des deux ensembles de données.
Vérifiez si les écarts sont proches de l'égalité ou non. Pour ce faire, créez une instruction if/else avec la commande if, else. Pour la condition dans l'instruction if, écrivez A / B == [0.25:4], où A est la variable qui représente la variance des vaisseaux sanguins normaux et B est la variable qui représente la variance des vaisseaux sanguins de Moyamoya. 0,25 et 4 proviennent d'une estimation générale pour déterminer si les variances sont égales ou non. Exécutez ensuite le test t à deux échantillons avec [h, p] = ttest2(A, B, 0,05, 'both', 'equal'), avec A et B étant les mêmes variables que celles mentionnées précédemment. Pour l'instruction else, utilisez [h, p] = ttest2(A, B, 0,05, 'both', 'unequal') pour exécuter un test t à deux échantillons dans le cas où les variances ne sont pas égales. Terminez l'instruction if/else. Cela calculera p.
Créez une instruction if/else qui affichera une conclusion basée sur la valeur de p. La condition de l'instruction if sera p > 0,05. Étant donné que nous ne rejetons généralement pas l'hypothèse nulle lorsque la valeur de p est supérieure à 0,05, utilisez la commande disp('X') pour afficher "Parce que la valeur p est supérieure à 0,05, nous ne parvenons pas à rejeter l'hypothèse nulle", et " Par conséquent, nous ne rejetons pas le fait que la quantité de vaisseaux sanguins d'un cerveau normal soit égale à celle d'un cerveau atteint de la maladie de Moyamoya." Dans l'instruction else, puisque nous rejetons généralement l'hypothèse nulle lorsque la valeur de p est inférieure à 0,05, utilisez la commande disp('X') pour afficher "Parce que la valeur p est inférieure à 0,05, nous rejetons l'hypothèse nulle", et " Par conséquent, nous ne rejetons pas que la quantité de vaisseaux sanguins d'un cerveau normal n'est pas égale à celle d'un cerveau atteint de la maladie de Moyamoya." Terminez l'instruction if/else.