Spisu treści:
- Krok 1: Znajdź skany MRI i MRA zdrowego mózgu i mózgu dotkniętego Moyamoya
- Krok 2: Załaduj obrazy do MATLAB i przypisz obrazy do zmiennej, aby wyświetlić obrazy
- Krok 3: Ulepsz wydłużone struktury w intensywnym obrazie dzięki filtrowaniu wieloskalowemu
- Krok 4: Uruchom filtr mediany 2D
- Krok 5: Maskuj obraz
- Krok 6: Wybierz skany MRA do testów statystycznych
- Krok 7: Oblicz powierzchnię naczyń krwionośnych w ramach przygotowań do badań statystycznych
- Krok 8: Przeprowadź test t dla niezależnych próbek
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-13 06:58
Moyamoya, „podmuch dymu”, jest rzadką chorobą spowodowaną zablokowaniem tętnic w zwojach podstawy mózgu, które są obszarem u podstawy mózgu. Choroba jest postępującą chorobą naczyń mózgowych, która dotyka głównie dzieci. Objawy moyamoya obejmują początkowy udar, ciągłe mini udary, osłabienie mięśni, paraliż lub drgawki w wyniku postępującego zwężenia tętnic. Bez leczenia moyamoya spowoduje problemy z mową, zaburzenia czucia i uszkodzoną świadomość. W naszym projekcie wykorzystamy MATLAB do wstępnego przetworzenia obrazu MRI lub MRA przy użyciu różnych filtrów, aby zredukować szum w obrazie, aby zlokalizować dotknięty obszar. Ponadto użyjemy ulepszenia funkcji, aby dokładniej zlokalizować dotknięte obszary. Ponadto przeprowadzimy niezależny test t dla próbek, aby określić, czy istnieje znacząca różnica między ilością naczyń krwionośnych w normalnym mózgu w porównaniu z mózgiem dotkniętym moyamoya.
Krok 1: Znajdź skany MRI i MRA zdrowego mózgu i mózgu dotkniętego Moyamoya
Te obrazy to skany, których użyliśmy do projektu, które znaleźliśmy w Internecie. Dwa obrazy z naczyniami krwionośnymi znajdującymi się pośrodku to skany MRA, podczas gdy pozostałe dwa obrazy to skany MRI.
Poniższe linki są miejscem, w którym znajdują się te obrazy:
static.cambridge.org/resource/id/urn:cambr…
static.cambridge.org/resource/id/urn:cambr…
Krok 2: Załaduj obrazy do MATLAB i przypisz obrazy do zmiennej, aby wyświetlić obrazy
Aby rozpocząć proces, zacznij od wyczyszczenia okna poleceń, zamknij wszystkie możliwe rysunki i wykresy, które mogą być już otwarte, oraz wyczyść zmienne już przypisane w obszarze roboczym.
Następnie utwórz pętlę for od 1 do 2 za pomocą polecenia i = [1:2]
Następnie załaduj obrazy MRA za pomocą polecenia imread(sprintf('nazwa_pliku%.filetype', i)) w celu odczytania obrazów z plików określonych przez nazwę pliku, po której następuje numer użyty do pętli za pomocą sprintf do ładowania wsadowego i przypisania do zmiennej.
Następnie, aby wyświetlić obraz na rysunku, użyj polecenia imshow(I).
Aby przypisać szarą mapę kolorów, użyj polecenia colormap(gray).
Aby całkowicie wyeliminować kolor i przekonwertować macierz 3D dla obrazów na 2D, użyj polecenia rgb2gray(I) i przypisz go do osobnej zmiennej.
Następnie załaduj obrazy MRI za pomocą wcześniej podanego polecenia lub imread(sprintf('filename%.filetype', i)) i przypisz je do nowej zmiennej
Powtórz polecenie rgb2gray z nową zmienną używaną do obrazów MRI.
W razie potrzeby możesz zmienić rozmiar obrazu za pomocą polecenia imresize(A, skala) i przypisać go do osobnej zmiennej.
Krok 3: Ulepsz wydłużone struktury w intensywnym obrazie dzięki filtrowaniu wieloskalowemu
Używając nowej zmiennej, użyj polecenia fibermetric(A), aby uwydatnić struktury rurowe na obrazach
W przypadku poprzedniej zmiennej użyj polecenia histeq(B), aby wzmocnić wyrównania histogramu poprzez przekształcenie intensywności obrazów i przypisanie go do nowej zmiennej.
Wyświetl histogram za pomocą polecenia imhist(B)
Utwórz nową zmienną, aby utworzyć próg dla filtra. W tym przypadku przypisz poprzednią zmienną > 0,875, odfiltrowując intensywność pikseli poniżej wartości 0,875
Następnie utwórz nową figurę i użyj polecenia imshow(A), aby wyświetlić nowy filtrowany obraz.
Krok 4: Uruchom filtr mediany 2D
Używając polecenia medfilt2(A, [m n]), uruchom filtr medianowy 2D, w którym każdy piksel wyjściowy zawiera wartość mediany w granicy mxn wokół odpowiedniego piksela w obrazie wejściowym.
Utwórz nową figurę i użyj imshow(A), aby wyświetlić medianę filtrowanego obrazu.
Krok 5: Maskuj obraz
Używając mediany filtrowanego obrazu, użyj polecenia [labeledImage, numberOfBlots] = bwlabel(A), aby policzyć liczbę białych plam na obrazie
Następnie użyj funkcji region props state = regionprops(labeledImage, 'Area'), aby obliczyć obszary każdego kleksa lub naczynia krwionośnego
Przypisz wszystkie obszary do jednej zmiennej
Następnie za pomocą innej zmiennej policz liczbę kleksów, które przekraczają 50 pikseli
Następnie posortuj wszystkie plamy poniżej 50 pikseli w kolejności malejącej za pomocą polecenia [sortedAreas, sortedIndicies] = sort(Areas, 'descend')
Następnie, używając innej zmiennej, użyj polecenia ismember(labeledImage, sortedIndicies(1:numberToExtract)) aby zwrócić tablicę z elementami labeledImage znajdują się w sortedIndicies od liczby 1 do liczby naczyń krwionośnych, aby zwrócić logiczną 1 (prawda) lub logiczne 0 (fałsz).
Za pomocą zmiennej w poprzednim kroku znajdź punkty, które są prawdziwe (wartości > 0) i utwórz tablicę logiczną, aby utworzyć obraz binarny i przypisać go do nowej zmiennej.
Utwórz nową figurę i użyj imshow(A) nowego obrazu binarnego.
Następnie odwróć obraz za pomocą polecenia immplement(A) i przypisz go do innej zmiennej.
Aby utworzyć zamaskowany obraz, użyj nowej zmiennej za pomocą polecenia resizedimage.*uint8(invertedimage)
Utwórz nową figurę i użyj imshow(A), aby wyświetlić zamaskowany obraz.
Aby zakończyć cały kod, użyj polecenia 'end', aby zakończyć całą pętlę for
Krok 6: Wybierz skany MRA do testów statystycznych
Aby przygotować się do testów statystycznych, wybierz skany MRA, które mają być użyte w teście t dla próbek niezależnych. Ponieważ nasze dwie próbki będą mózgami dotkniętymi Moyamoyą i normalnymi mózgami, wybierz przyzwoitą liczbę skanów MRA z każdej grupy.
Krok 7: Oblicz powierzchnię naczyń krwionośnych w ramach przygotowań do badań statystycznych
Test statystyczny skupi się na długości lub ilości naczyń krwionośnych pokazanych na skanach MRA. Dlatego przed porównaniem musimy obliczyć powierzchnię naczyń krwionośnych.
Zacznij od przefiltrowania MRA normalnego mózgu i obliczenia ilości naczyń krwionośnych. Aby to zrobić, uruchom pętlę for. Ponieważ są trzy obrazy, warunkiem będzie i = [1:3].
Otwórz obraz za pomocą polecenia imread i przypisz go do zmiennej.
Następnie utwórz instrukcję if/else za pomocą polecenia if, else. W przypadku instrukcji if użyj polecenia size(A, 3)==3, gdzie A jest zmienną używaną do otwierania obrazu, aby utworzyć instrukcję if dla trzeciego wymiaru tablicy. Następnie przekonwertuj obraz do 2D i pozbądź się koloru za pomocą polecenia rgb2gray(A) i przypisz go do nowej zmiennej. Użyj polecenia imresize(A, [m n]), aby zmienić rozmiar obrazu. W tym przypadku zmieniliśmy rozmiar obrazów do matrycy 1024 x 1024. Aby wzmocnić struktury rurowe obrazu, ponownie użyj polecenia fibermetric i przypisz je do nowej zmiennej.
Poniżej znajduje się instrukcja else. Jeśli obraz nie jest matrycą 3D, chcemy pominąć konwersję. Wykonaj to samo, co instrukcja if, ale bez komendy rgb2gray(A).
Utwórz nową zmienną, ustawiając ją na równą zmiennej z kroku fibermetric większej niż 0,15. Powoduje to progowanie obrazu dla intensywności większych niż 0,15.
Powtórzymy linie kodów z kroków 4 i 5 instrukcji od linii filtru mediany do linii imshow(I). Następnie użyj polecenia sum(I(:)), aby dodać wszystkie piksele, które tworzą naczynia krwionośne, i przypisz je do oddzielnej zmiennej. Nazwij nową zmienną NormalBloodVessels(i) i ustaw ją na równą zmiennej z polecenia sum(I(:)). To dodaje dane do macierzy.
Zakończ pętlę i powtórz, ale dla MRA mózgów dotkniętych Moyamoyą. Na koniec nazwij zmienną MoyaMoyaBloodVessels(i), aby nie mylić jej z normalnymi MRA mózgu.
Krok 8: Przeprowadź test t dla niezależnych próbek
Ponieważ istnieją dwie niezależne próbki i mała populacja, należy przeprowadzić test t dla niezależnych próbek.
Utwórz i nazwij funkcję, która uruchamia niezależny test t dla próbek, aby określić, czy ilość naczyń krwionośnych w MRA normalnych mózgów jest istotnie równa lub nie MRA mózgów dotkniętych Moyamoya.
Wyświetl hipotezę postawioną dla testu za pomocą polecenia disp('X'). W pierwszym wierszu wyświetl „Hipotezy dla testu t dla dwóch próbek”. W drugim wierszu wyświetl „H0 = Ilość naczyń krwionośnych w normalnym mózgu równa się ilości naczyń krwionośnych w mózgu z chorobą Moyamoya”, aby postawić hipotezę zerową. W trzecim wierszu wyświetl: „HA = Ilość naczyń krwionośnych w normalnym mózgu nie jest równa ilości naczyń krwionośnych w mózgu z chorobą Moyamoya”. postawić alternatywną hipotezę.
Stosując 95% przedział ufności i wielkość próby 3, oblicz wynik t za pomocą polecenia tinv([0,025 0,975], 2) i przypisz do zmiennej t. Użyj poleceń var(NormalBloodVessels) i var(MoyaMoyaBloodVessels) i przypisz je do zmiennych, aby obliczyć wariancje obu zestawów danych.
Sprawdź, czy wariancje są zbliżone do równych, czy nie. Zrób to, tworząc instrukcję if/else za pomocą polecenia if, else. Dla warunku w instrukcji if napisz A / B == [0.25:4], gdzie A jest zmienną, która odpowiada za wariancję normalnych naczyń krwionośnych, a B jest zmienną, która odpowiada za wariancję naczyń krwionośnych Moyamoya. 0,25 i 4 pochodzą z ogólnego oszacowania w celu określenia, czy wariancje są równe, czy nie. Następnie uruchom test t dla dwóch próbek z [h, p] = ttest2(A, B, 0,05, „oba”, „równe”), przy czym A i B są tymi samymi zmiennymi, jak wspomniano wcześniej. W przypadku instrukcji else użyj [h, p] = ttest2(A, B, 0,05, „oba”, „nierówne”), aby uruchomić dwupróbkowy test t w przypadku, gdy wariancje nie są równe. Zakończ instrukcję if/else. To obliczy p.
Utwórz instrukcję if/else, która wyświetli wniosek na podstawie wartości p. Warunkiem instrukcji if będzie p > 0,05. Ponieważ zazwyczaj nie odrzucamy hipotezy zerowej, gdy wartość p jest większa niż 0,05, użyj polecenia disp('X'), aby wyświetlić „Ponieważ wartość p jest większa niż 0,05, nie możemy odrzucić hipotezy zerowej” i „ Dlatego nie możemy odrzucić tego, że ilość naczyń krwionośnych w normalnym mózgu jest równa liczbie mózgu z chorobą Moyamoya”. W instrukcji else, ponieważ zazwyczaj odrzucamy hipotezę zerową, gdy wartość p jest mniejsza niż 0,05, użyj polecenia disp('X'), aby wyświetlić „Ponieważ wartość p jest mniejsza niż 0,05, odrzucamy hipotezę zerową” i „ Dlatego nie możemy odrzucić tego, że ilość naczyń krwionośnych w normalnym mózgu nie jest równa liczbie mózgu z chorobą Moyamoya”. Zakończ instrukcję if/else.