Tartalomjegyzék:
- 1. lépés: 1. lépés: Kép betöltése
- 2. lépés: 2. lépés: Zajszűrés és hisztogram
- 3. lépés: 3. lépés: A küszöbértékek beállítása
- 4. lépés: GUI létrehozása
- 5. lépés: Videó bemutató
Videó: MatLab tüdőszegmentáció: 5 lépés
2024 Szerző: John Day | [email protected]. Utoljára módosítva: 2024-01-30 09:39
Szerző: Phuc Lam, Paul Yeung, Eric Reyes
Annak elismerése, hogy a tüdő szegmentációjában fellépő hibák hamis információkat eredményeznek a betegségterület azonosításával kapcsolatban, és közvetlenül befolyásolhatják a diagnózis folyamatát. A modern számítógépes segítő technikák nem tudtak pontos eredményeket elérni, ha a tüdőbetegségek kihívást jelentő formájúak. Ezeket a rendellenes formákat okozhatják mellhártya -effúziók, konszolidációk stb. A tüdő szegmentálási technikáját alkalmazva, amelyben a tüdő határait elkülönítik a környező mellkasi szövetektől, alkalmazásunk képes azonosítani a határokat a felhasználó beviteli küszöbével, hogy teljes mértékben testreszabható nézeteket biztosítson a tüdő alakjairól, Ennek a MatLab projektnek a célja egy felhasználóbarát interaktív tüdőszegmentációs alkalmazás létrehozása a tüdő röntgenfelvételeinek kóros állapotának kimutatására. Célunk, hogy hatékonyabb módszert hozzunk létre a kóros tüdő szemléltetésére és azonosítására annak érdekében, hogy az orvosok és a radiológusok megbízhatóbb módot kapjanak a tüdőbetegségek diagnosztizálására. A MatLab alkalmazás-tervező eszközét használva a program kifejezetten mellkasi röntgen- és számítógépes tomográfiás (CT) vizsgálatokkal való együttműködésre készült, de tesztelték, hogy működjön-e MRI-vel is.
Az alábbi utasítások tartalmazzák a zajszűrési technikánkat (aluláteresztő Wiener szűrő), valamint a képküszöböt (a szürkeárnyalatos kép intenzitási hisztogramjának használatával) és morfológiai gradienst (a kép tágulása és eróziója közötti különbség) alkalmazva azonosítson egy érdekes régiót. Az utasítás ezután elmagyarázza, hogyan integráljuk az összes elemet a grafikus felhasználói felületbe (GUI).
Jegyzet:
1). Ezt a projektet egy kutatási cikk ihlette: "A kóros tüdők szegmentálása és képelemzése a CT -n: jelenlegi megközelítések, kihívások és jövőbeli tendenciák". Ami itt található
2). Az NIH: Clinical Center röntgenfelvételeit használjuk. Link megtalálható itt
3). Az alkalmazástervező súgója itt található
4). A kód futtatása előtt: módosítania kell a Dir elérési utat (a 34. sorban) a fájlkönyvtárra és a kép típusára (35. sor) (a *-p.webp
1. lépés: 1. lépés: Kép betöltése
Ez a lépés szürke skálán mutatja az eredeti képet. Változtassa meg a "name_of_picture.png" fájlt a kép nevére
egyértelmű; clc; minden bezárása;
%% Képek betöltése
raw_x_ray = 'kép_neve.png';
I = imread (raw_x_ray);
ábra (101);
imshow (I);
színtérkép (szürke);
cím („Szürkeárnyalatos röntgen”);
2. lépés: 2. lépés: Zajszűrés és hisztogram
Annak érdekében, hogy megtaláljuk a szürkeárnyalatos kép küszöbértékét, megvizsgáljuk a hisztogramot, hogy lássuk, különálló módok vannak -e. Bővebben itt olvashat
I = wiener2 (I, [5 5]);
ábra (102);
részterület (2, 1, 1);
imshow (I);
részterület (2, 1, 2);
imhist (I, 256);
3. lépés: 3. lépés: A küszöbértékek beállítása
Ez a lépés lehetővé teszi a küszöb beállítását a hisztogramnak megfelelően. morfológiai A színátmenet vörös színnel fogja kiemelni az érdeklődési területet, és a függvény határai piros színnel borítják a tüdő körvonalazott és szűrt képét.
A regionprops használatával pontosíthatjuk a szilárdsági tömböket, és csökkenő sorrendbe rendezhetjük őket. Ezután binarizálom a szürke sclae képet, és alkalmazom a morfológiai gradiens módszert és mLoren Shurasking -ot, hogy kiemeljem az érdeklődési területet (ROI). A következő lépés a kép megfordítása, hogy a tüdő ROI fehér legyen a fekete háttérben. A showMaskAsOverlay funkciót használom a 2 maszk megjelenítésére. Megjegyzés: a kódot Loren Shure ihlette, link.
Lasly, piros körvonalat hozok létre a bwbwboundaries segítségével, és elfedem a szűrőképet és a határokat.
a_thresh = I> = 172; % beállította ezt a küszöböt
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
kellékek = regionprops (a_thresh, 'all');
sortedSolidity = rendezés ([props. Solidity], 'descend');
SB = sortedSolidity (1);
ha SB == 1 % SB csak szilárdságot fogad el == 1 szűrje ki a csontokat
binaryImage = imbinarize (I); ábra (103);
imshow (binaryImage); színtérkép (szürke);
SE = strel ('négyzet', 3);
morfológiaiGradiens = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
maszk = imbinarize (morfológiaiGradiens, 0,03);
SE = strel ('négyzet', 2);
maszk = imclose (maszk, SE);
maszk = imfill (maszk, 'lyukak');
maszk = bwareafilt (maszk, 2); A terület megjelenítésének % ellenőrző száma
notMask = ~ maszk;
maszk = maszk | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, maszk, 'r'); % le kell töltenie a showMaskAsOverlay alkalmazást/funkciót
BW2 = imfill (bináris kép, 'lyukak');
új_kép = BW2;
új_kép (~ maszk) = 0; % fordított háttér és lyukak
B = határvonalak (új_kép); A % csak 2 dimenziót tud elfogadni
ábra (104);
imshow (új_kép);
kitartás
határterületek (B);
vége
4. lépés: GUI létrehozása
Most integráljuk a korábbi kódot egy MATLAB alkalmazásba. Nyissa meg az App Designer alkalmazást a MATLAB -ban (Új> Alkalmazás). Először úgy tervezzük meg az interfészt, hogy kattintva tartjuk, és három tengelyt húzunk a középső munkaterületre. Ezután kattintsunk és tartsunk lenyomva két gombot, egy szerkesztési mezőt (szöveg), egy szerkesztési mezőt (numerikus), egy csúszkát és egy legördülő menüt. Mindkét tengely megjeleníti az előnézetet és elemzi a képet, a harmadik tengely pedig az előnézeti „kiválasztott” képhez tartozó képpontok hisztogramját. A szerkesztési mező (szöveg) mezőben a kiválasztott kép fájl elérési útja, a szerkesztési mezőben (numerikus) pedig a tüdő észlelt pixelterülete látható.
Most váltson tervezési nézetről kódnézetre az App Designer alkalmazásban. Írja be a kódot a tulajdonságok kódjához, kattintson a piros „Tulajdonságok” gombra, pluszjel mellett. Inicializálja az I tulajdonságokat, a küszöbértéket és a regionalToExtract tulajdonságokat az alábbi kód szerint. Ezután kattintson a jobb gombbal egy gombra a munkaterület jobb felső részén (az összetevő böngészőben), és lépjen a Visszahívások> Ugrás a… visszahívás menüpontra. Adja hozzá a kódot a „SelectImageButtonPushed funkcióhoz (alkalmazás, esemény)”. Ez a kód lehetővé teszi, hogy kiválasszon egy elemzendő képet a számítógépről az uigetfile használatával. A kép kiválasztása után egy előnézeti kép jelenik meg a tengelyek alatt hisztogram kíséretében. Ezután kattintson a jobb gombbal a másik gombra, és ismételje meg ugyanezt az eljárást a visszahívási funkció létrehozásához.
Adja hozzá a kódot az „AnalyzeImageButtonPushed (alkalmazás, esemény)” funkció alatt. Ez a kód elvégzi a képpontszámolást és a foltfelismerést az előnézeti képen a Kép elemzése gombon (attól függően, hogy melyikre kattintott a jobb gombbal). A gombok programozása után most a csúszkát és a legördülő menüt programozzuk. Kattintson a jobb gombbal a csúszkára, hozzon létre egy visszahívási funkciót, és a végéig írja be a „function FilterThresholdSliderValueChanged (app, event)” alatti kódot. Ez lehetővé teszi, hogy a csúszka beállítsa a szürke intenzitás küszöbértékét.
Hozzon létre egy visszahívási funkciót a legördülő menüben, és adja hozzá a kódot a „function AreastoExtractDropDownValueChanged (app, event)” alá, hogy a legördülő menü módosítsa az elemzett képtengelyeken megjelenő blobok számát. Most kattintson az egyes entitásokra a komponensböngészőben, és módosítsa tulajdonságait tetszés szerint, például módosítsa az entitások nevét, távolítsa el a tengelyeket és módosítsa a méretezést. Húzza át az elemeit a komponensböngészőben a Tervező nézetben egy funkcionális és könnyen érthető elrendezéshez. Most van egy alkalmazása a MATLAB -ban, amely elemezheti a tüdő képeit a pixelterület szempontjából!
tulajdonságok (Hozzáférés = privát) I = ; % Képfájl
küszöb = 257; %küszöb a szürke intenzitás binarizálásához
regionToExtract = 2;
vége
függvény SelectImageButtonPushed (alkalmazás, esemény)
clc; Dir = 'C: / Users / danie / Letöltések / images_004 / images'; %define invariate file "prefix"
[imageExt, elérési út] = uigetfile ('*. png'); %megragadja a képnév változó részét
imageName = [Fájlkezelés imageExt]; %összefűzött változatlan és változó szalagok
app. I = imread (képnév); %olvassa el a képet
imshow (kb. I., „szülő”, kb. UIAxes); %megjeleníti a képet
app. FilePathEditField. Value = elérési út; %eredeti fájl elérési útjának megjelenítése
vége
függvény AnalyzeImageButtonPushed (alkalmazás, esemény)
originalImage = kb. I;
originalImage = wiener2 (kb. I., [5 5]); %ponteltávolító szűrő
hisztogram (kb. tengelyekHistogram, kb. I, 256); %megjeleníti a kép hisztogramját
a_thresh = originalImage> = kb.küszöb; % beállította ezt a küszöböt
labelImage = bwlabel (a_thresh);
kellékek = regionprops (a_thresh, 'all');
sortedSolidity = rendezés ([props. Solidity], 'descend');
SB = sortedSolidity (1);
ha SB == 1 % SB csak szilárdságot fogad el == 1 szűrje ki a csontokat
SE = strel ('négyzet', 3);
morfológiaiGradiens = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maszk = imbinarize (morfológiaiGradiens, 0,03);
SE = strel ('négyzet', 2);
maszk = imclose (maszk, SE);
maszk = imfill (maszk, 'lyukak');
maszk = bwareafilt (maszk, app.regionsToExtract);
A terület megjelenítésének % ellenőrző száma
notMask = ~ maszk;
maszk = maszk | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'hole');
új_kép = BW2;
új_kép (~ maszk) = 0;
B = határvonalak (új_kép); % csak 2 dimenziót tud elfogadni (új_kép, 'szülő', app. UIAxes2);
hold (kb. UIAxes2, 'be');
határterületek (B);
set (gca, 'YDir', 'fordított');
tüdőterület = bwarea (új_kép);
app. PixelAreaEditField. Value = lungArea;
vége
vége
függvény FilterThresholdSliderValueChanged (alkalmazás, esemény)
app.threshold = app. FilterThresholdSlider. Value;
vége
function AreastoExtractDropDownValueChanged (app, event) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
vége
vége
Ajánlott:
MATLAB Egyszerű arcfelismerés: 4 lépés
MATLAB egyszerű arcfelismerés: Ennek az oktatóanyagnak a fő célja az, hogy megmutassa, mennyire egyszerű lesz a képfeldolgozás. A MATLAB segítségével az arcfelismerés és -követés fontos és aktív kutatási terület, ezért elmagyarázom hogyan lehet ezt megcsinálni
Hogyan kell kódolni és közzétenni a Matlab 2016b -t Word -be (Kezdő útmutató): 4 lépés
A Matlab 2016b kódolása és közzététele Word-be (Kezdő útmutató): A Matlab egy nagy teljesítményű nyelvi program, amelyet a technikai eredmények kiszámítására használnak. Képes vizuális elemeket, számításokat és programozást felhasználóbarát módon integrálni. Ezzel a programmal a felhasználó problémákat és megoldásokat tehet közzé
A Raspberry Pi vezérlése a Matlab használatával: 5 lépés
A Raspberry Pi vezérlése a Matlab használatával: Hé, ez az oktatóanyag a fejetlen málna pi szabályozásáról szól a matlab használatával. Lehet, hogy telepítenie kell a matlabot a legújabb verzióra az újabb málna pi tábla támogatásához
Matlab alapú ROS robotvezérlő: 9 lépés
Matlab-alapú ROS robotvezérlő: Gyermekkorom óta mindig arról álmodtam, hogy vasember leszek, és még mindig az vagyok. Az Iron Man egyike azoknak a karaktereknek, akik reálisan lehetségesek, és egyszerűen megfogalmazva vágyom arra, hogy egyszer vasember lehessek, még akkor is, ha az emberek nevetnek rajtam, vagy azt mondják, hogy ez lehetetlen
Vonatprogramozási fejlesztések a MATLAB -ban: 6 lépés
Vonatprogramozási fejlesztések a MATLAB -ban: Cél: Ennek a programozott rendszernek az a célja, hogy egy kis méretű Arduino -t nézzen meg, és a kódolást nagyobb léptékben alkalmazza az Amtrak Railroad rendszerek bizonyos biztonsági jellemzőinek potenciális javítása érdekében. Ennek érdekében hozzáadtunk egy talajnedvesség érzékelőt