Procesarea imaginilor Moyamoya: 8 pași
Procesarea imaginilor Moyamoya: 8 pași
Anonim
Procesarea imaginilor Moyamoya
Procesarea imaginilor Moyamoya

Moyamoya, „puful de fum”, este o boală rară care este cauzată de blocarea arterelor la nivelul ganglionilor bazali, care este o zonă de la baza creierului. Boala este o boală cerebrovasculară progresivă care afectează în cea mai mare parte copiii. Simptomele moyamoya includ un accident vascular cerebral inițial, mini-accident vascular cerebral constant, slăbiciune musculară, paralizie sau convulsii ca urmare a îngustării progresive a arterelor. Fără tratament, moyamoya va provoca probleme cu vorbirea, tulburări senzoriale și conștiința deteriorată. În proiectul nostru, vom utiliza MATLAB pentru a preprocesa o imagine MRI sau MRA folosind diverse filtre pentru a reduce zgomotul din imagine pentru a localiza zona afectată. În plus, vom folosi o îmbunătățire a caracteristicilor pentru a localiza zonele afectate mai precis. Mai mult, vom efectua apoi un test independent de eșantioane pentru a determina dacă există o diferență semnificativă între cantitatea de vase de sânge dintr-un creier normal comparativ cu creierul afectat de moyamoya.

Pasul 1: Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya

Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya
Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya
Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya
Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya
Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya
Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya
Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya
Găsiți scanări RMN și MRA ale unui creier normal și al unui creier afectat de Moyamoya

Aceste imagini sunt scanările pe care le-am folosit pentru proiectul pe care l-am găsit online. Cele două imagini cu vasele de sânge situate în mijloc sunt scanări MRA, în timp ce celelalte două imagini sunt scanări RMN.

Următoarele legături sunt locul unde se găsesc aceste imagini:

static.cambridge.org/resource/id/urn:cambr…

static.cambridge.org/resource/id/urn:cambr…

Pasul 2: Încărcați imagini pe MATLAB și atribuiți imagini unei variabile pentru a afișa imagini

Încărcați imagini pe MATLAB și atribuiți imagini unei variabile pentru a afișa imagini
Încărcați imagini pe MATLAB și atribuiți imagini unei variabile pentru a afișa imagini

Pentru a începe procesul, începeți prin ștergerea ferestrei de comandă, închideți toate cifrele și graficele posibile care pot fi deja deschise și ștergeți variabilele deja atribuite în spațiul dvs. de lucru.

După aceea, creați o buclă for de la 1 la 2 folosind comanda i = [1: 2]

După aceea, încărcați imaginile MRA folosind comanda imread (sprintf ('filename%.filetype', i)) pentru a citi imaginile din fișierele specificate de numele fișierului urmat de numărul utilizat pentru buclă folosind sprintf pentru încărcarea în lot și atribuiți la o variabilă.

Apoi pentru a afișa imaginea într-o figură, utilizați comanda imshow (I).

Pentru a atribui o colormap gri, utilizați comanda colormap (gri).

Pentru a elimina complet culoarea și a converti matricea 3D pentru imagini în 2D, utilizați comanda rgb2gray (I) și atribuiți-o unei variabile separate.

Apoi încărcați imaginile RMN utilizând comanda menționată anterior sau imread (sprintf ('filename%.filetype', i)) și atribuiți-o unei noi variabile

Repetați comanda rgb2gray cu noua variabilă utilizată pentru imaginile RMN.

Dacă este necesar, puteți redimensiona o imagine utilizând comanda imresize (A, scala) și atribui unei variabile separate.

Pasul 3: Îmbunătățiți structurile alungite în imaginea de intensitate cu filtrare pe mai multe scale

Îmbunătățiți structurile alungite în imaginea de intensitate cu filtrare pe mai multe scale
Îmbunătățiți structurile alungite în imaginea de intensitate cu filtrare pe mai multe scale

Folosind o nouă variabilă, utilizați comanda fibermetrică (A) pentru a îmbunătăți structurile tubulare din imagini

Cu variabila anterioară, utilizați comanda histeq (B) pentru a îmbunătăți egalizările histogramei transformând intensitatea imaginilor și atribuiți-o unei noi variabile.

Afișați histograma folosind comanda imhist (B)

Creați o nouă variabilă pentru a crea un prag pentru filtru. În acest caz, atribuiți variabila anterioară> 0,875, filtrând intensitatea pixelilor sub valoarea de 0,875

După aceea, creați o nouă figură și utilizați comanda imshow (A) pentru a afișa noua imagine filtrată.

Pasul 4: Rulați un filtru mediu 2D

Rulați un filtru mediu 2D
Rulați un filtru mediu 2D

Folosind comanda medfilt2 (A, [m n]), rulați un filtru median 2D, unde fiecare pixel de ieșire conține valoarea mediană în limita mxn din jurul pixelului respectiv din imaginea de intrare.

Creați o nouă figură și utilizați imshow (A) pentru a afișa imaginea filtrată mediană.

Pasul 5: Mascați imaginea

Mascați imaginea
Mascați imaginea

Utilizând imaginea filtrată mediană, utilizați comanda [labeledImage, numberOfBlots] = bwlabel (A) pentru a număra numărul de pete albe din imagine

Apoi, utilizați regiunea funcții de recuzită stări = regionprops (etichetatImage, „Area”) pentru a calcula suprafețele fiecărei pete sau vas de sânge

Alocați toate zonele într-o singură variabilă

Apoi, folosind o altă variabilă, numărați numărul de pete care depășesc 50 de pixeli

După aceea, sortați orice pete care sunt sub 50 de pixeli în ordine descrescătoare folosind comanda [sortedAreas, sortedIndicies] = sort (Areas, 'descend')

Apoi, folosind o altă variabilă, utilizați comanda ismember (etichetatăImage, sortedIndicies (1: numberToExtract)) pentru a returna o matrice cu elemente de etichetă Image se găsesc în sortedIndicies de la numărul 1 la numărul de vase de sânge pentru a returna un 1 logic (adevărat) sau un 0 logic (fals).

Cu variabila din pasul anterior, găsiți punctele adevărate (valori> 0) și creați o matrice logică pentru a crea o imagine binară și atribuiți-o unei noi variabile.

Creați o nouă figură și utilizați imshow (A) noua imagine binară.

Apoi, inversați imaginea utilizând comanda imcomplement (A) și atribuiți-o unei alte variabile.

Pentru a crea o imagine mascată, utilizați o nouă variabilă cu comanda resizedimage. * Uint8 (imaginea inversată)

Creați o nouă figură și utilizați imshow (A) pentru a afișa imaginea maschată.

Pentru a termina întregul cod, asigurați-vă că utilizați comanda „sfârșit” pentru a termina întregul ciclu for

Pasul 6: Selectați scanările MRA pentru testarea statistică

Selectați scanările MRA pentru testarea statistică
Selectați scanările MRA pentru testarea statistică
Selectați scanările MRA pentru testarea statistică
Selectați scanările MRA pentru testarea statistică
Selectați scanările MRA pentru testarea statistică
Selectați scanările MRA pentru testarea statistică

Pentru a vă pregăti pentru testarea statistică, selectați scanările MRA care urmează să fie utilizate pentru testele independente de testare t. Deoarece cele două eșantioane ale noastre vor fi creierele afectate de Moyamoya și creierele normale, selectați o cantitate decentă de scanări MRA din fiecare grup.

Pasul 7: Calculați aria vaselor de sânge în pregătirea pentru testarea statistică

Calculați aria vaselor de sânge în pregătirea pentru testarea statistică
Calculați aria vaselor de sânge în pregătirea pentru testarea statistică

Testul statistic se va concentra pe lungimea sau cantitatea de vase de sânge prezentate pe scanările MRA. Astfel, trebuie să calculăm aria vaselor de sânge înainte de comparație.

Începeți prin filtrarea MRA-urilor creierului normal și calcularea cantității de vase de sânge. Pentru a face acest lucru, rulați o buclă for. Deoarece există trei imagini, condiția va fi i = [1: 3].

Deschideți imaginea cu comanda imread și atribuiți-o unei variabile.

Apoi, creați o instrucțiune if / else cu comanda if, else. Pentru instrucțiunea if, utilizați dimensiunea comenzii (A, 3) == 3, unde A este variabila utilizată pentru a deschide imaginea, pentru a crea o instrucțiune if pentru când a treia dimensiune a matricei este 3. Apoi convertiți imaginea la 2D și scăpați de culoare folosind comanda rgb2gray (A) și atribuiți-o unei noi variabile. Utilizați comanda imresize (A, [m n]) pentru a redimensiona imaginea. În acest caz, am redimensionat imaginile la 1024 x 1024 matrice. Pentru a îmbunătăți structurile tubulare ale imaginii, utilizați din nou comanda fibermetrică și atribuiți-o unei noi variabile.

Următorul este pentru declarația else. Dacă imaginea nu este o matrice 3D, vrem să omitem conversia. Faceți la fel ca instrucțiunea if, dar fără comanda rgb2gray (A).

Creați o nouă variabilă, setând-o egală cu variabila din pasul fibermetric mai mare de 0,15. Aceasta pragul imaginii pentru intensități mai mari de 0,15.

Vom repeta liniile de coduri de la pașii 4 și 5 din instructabil de la linia de filtrare mediană până la linia imshow (I). După aceea, utilizați comanda sum (I (:)) pentru a aduna toți pixelii care formează vasele de sânge și atribuiți-o unei variabile separate. Denumiți o nouă variabilă NormalBloodVessels (i) și setați-o egală cu variabila din comanda sum (I (:)). Aceasta adaugă datele la matrice.

Încheiați bucla și repetați, dar pentru MRA-urile creierelor afectate de Moyamoya. Denumiți variabila la final MoyaMoyaBloodVessels (i) pentru a nu o confunda cu ARM-urile normale ale creierului.

Pasul 8: Rulați un test T pentru eșantioane independente

Rulați un test T pentru eșantioane independente
Rulați un test T pentru eșantioane independente

Deoarece există două eșantioane independente și o populație mică, efectuați un e-test de eșantioane independente.

Creați și numiți o funcție care rulează un test independent de eșantioane pentru a determina dacă cantitatea de vase de sânge din ARM ale creierului normal sunt semnificativ egale sau nu cu cea a ARM ale creierelor afectate de Moyamoya.

Afișați ipoteza setată pentru test utilizând comanda disp ('X'). Pe prima linie, afișați „Ipoteze pentru două eșantioane de test t”. Pe a doua linie, afișați „H0 = Cantitatea de vase de sânge ale unui creier normal este egală cu cantitatea de vase de sânge ale unui creier cu boala Moyamoya”, pentru a enunța ipoteza nulă. Pe a treia linie, afișați: "HA = Cantitatea de vase de sânge ale unui creier normal nu este egală cu cantitatea de vase de sânge ale unui creier cu boala Moyamoya." pentru a afirma ipoteza alternativă.

Folosind un interval de încredere de 95% și o dimensiune a eșantionului de 3, calculați scorul t utilizând comanda tinv ([0,025 0,975], 2) și atribuiți variabilei t. Utilizați comanda var (NormalBloodVessels) și var (MoyaMoyaBloodVessels) și atribuiți-le variabilelor pentru a calcula varianțele ambelor seturi de date.

Verificați dacă variațiile sunt aproape de egale sau nu. Faceți acest lucru creând o instrucțiune if / else cu comanda if, else. Pentru starea din enunțul if, scrieți A / B == [0.25: 4], unde A este variabila care ia în considerare varianța vaselor de sânge normale și B este variabila care explică varianța vaselor de sânge Moyamoya. 0,25 și 4 provin dintr-o estimare generală pentru a determina dacă varianțele sunt egale sau nu. Apoi rulați cele două probe t test cu [h, p] = ttest2 (A, B, 0,05, „ambele”, „egale”), A și B fiind aceleași variabile menționate anterior. Pentru instrucțiunea else, utilizați [h, p] = ttest2 (A, B, 0,05, „ambele”, „inegale”) pentru a rula un test t cu două eșantioane în cazul în care varianțele nu sunt egale. Încheiați declarația if / else. Aceasta va calcula p.

Creați o declarație if / else care va afișa o concluzie pe baza valorii lui p. Condiția pentru instrucțiunea if va fi p> 0,05. Deoarece în mod obișnuit nu reușim să respingem ipoteza nulă atunci când valoarea lui p este mai mare de 0,05, utilizați comanda disp ('X') pentru a afișa „Deoarece valoarea p este mai mare de 0,05 nu reușim să respingem ipoteza nulă” și „ Prin urmare, nu reușim să respingem faptul că cantitatea de vase de sânge dintr-un creier normal este egală cu cea a unui creier cu boala Moyamoya. " În afirmația else, deoarece de obicei respingem ipoteza nulă atunci când valoarea lui p este sub 0,05, utilizați comanda disp ('X') pentru a afișa „Deoarece valoarea p este mai mică de 0,05 respingem ipoteza nulă” și „ Prin urmare, nu reușim să respingem faptul că cantitatea de vase de sânge dintr-un creier normal nu este egală cu cea a unui creier cu boala Moyamoya. " Încheiați declarația if / else.