Sisukord:
- 1. samm: 1. samm: pildi laadimine
- 2. samm: 2. samm: müra filtreerimine ja histogramm
- 3. samm: 3. samm: künniste seadmine
- 4. samm: GUI loomine
- 5. samm: video demo
Video: MatLabi kopsude segmenteerimine: 5 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
Autor: Phuc Lam, Paul Yeung, Eric Reyes
Tunnistades, et vead kopsude segmenteerimisel annavad valeandmeid haiguspiirkonna tuvastamise kohta ja võivad otseselt mõjutada diagnoosimisprotsessi. Kaasaegsed arvuti abitehnikad ei andnud täpseid tulemusi, kui kopsuhaigused on väljakutsuva kujuga. Need ebanormaalsed kujud võivad olla põhjustatud pleuraefusioonidest, konsolideerumistest jne. Kasutades kopsude segmenteerimise tehnikat, mille puhul kopsu piirid on eraldatud ümbritsevast rindkere koest, saab meie rakendus tuvastada piirid kasutaja sisendlävedega, et anda täielikult kohandatavaid vaateid kopsude kuju, Selle MatLabi projekti eesmärk on luua kasutajasõbralik interaktiivne kopsude segmenteerimisrakendus kopsude röntgenipiltide patoloogiliste seisundite tuvastamiseks. Meie eesmärk on luua tõhusam viis ebanormaalsete kopsude illustreerimiseks ja tuvastamiseks, et anda arstidele ja radioloogidele usaldusväärsem viis kopsuhaiguste diagnoosimiseks. Kasutades MatLabi rakenduste kujundaja tööriista, on programm loodud töötama spetsiaalselt rindkere röntgen- ja kompuutertomograafia (CT) skaneeringutega, kuid seda testitakse ka töötamiseks MRI-skaneeringutega.
Allpool olevad juhised sisaldavad meie mürafiltreerimise tehnikat (madalpäästeklaasiga Wieneri filter), samuti pildiläve (kasutades halltoonide kujutise intensiivsuse histogrammi) ja kasutades morfoloogilist gradienti (pildi laienemise ja erosiooni erinevus). leida huvipakkuv piirkond. Seejärel selgitab juhend, kuidas me kõik elemendid graafilisse kasutajaliidesesse (GUI) integreerime.
Märge:
1). See projekt on inspireeritud uurimistööst: "Ebanormaalsete kopsude segmenteerimine ja pildianalüüs CT -s: praegused lähenemisviisid, väljakutsed ja tulevikutrendid". Mis on leitav siit
2). Kasutame röntgenpilte firmalt NIH: Clinical Center. Link on leitav siit
3). Rakendusdisaineri abi leiate siit
4). Enne koodi käivitamist: peate muutma Dir tee (real 34) failikataloogiks ja pildi tüübiks (rida 35) (analüüsime *.png).
1. samm: 1. samm: pildi laadimine
See samm näitab originaalpilti halliskaalas. Muutke „name_of_picture.png” oma pildi nimeks
selge; clc; sulgege kõik;
%% piltide laadimine
raw_x_ray = 'pildi_pildi nimi.png';
I = imread (raw_x_ray);
joonis (101);
imshow (I);
värvipilt (hall);
pealkiri ('Halltoonide röntgenikiirgus');
2. samm: 2. samm: müra filtreerimine ja histogramm
Halli skaala pildi läve leidmiseks vaatame histogrammi, et näha, kas erinevad režiimid. Loe lähemalt siit
I = viiner2 (I, [5 5]);
joonis (102);
alajoon (2, 1, 1);
imshow (I);
alajoon (2, 1, 2);
imhist (I, 256);
3. samm: 3. samm: künniste seadmine
See samm võimaldab määrata läve vastavalt histogrammile. morfoloogiline gradient toob punase esile huvipakkuva piirkonna ja funktsioon visboundaries katab punasega kopsu visandatud ja filtreeritud kujutise.
Kasutades regiooniprope, saame täpsuse massiivsuse massiive täpsustada ja sortida kahanevas järjekorras. Järgmisena binariseerin halli sclae kujutise ja rakendan huvipakkuva piirkonna (ROI) esiletõstmiseks morfoloogilise gradiendi meetodit ja mLoren Shuraskingi. Järgmine samm on pildi ümberpööramine nii, et kopsu ROI on mustal taustal valge. 2 maski kuvamiseks kasutan funktsiooni showMaskAsOverlay. Märkus: kood on inspireeritud Loren Shure'ist, link.
Lasly, loon punase kontuuri, kasutades bwbwboundaries ja maskeerides filtri kujutist ja piire.
a_thresh = I> = 172; % määras selle läve
[etikett, numberOfBlobs] = bwlabel (a_thresh);
rekvisiidid = regionprops (a_thresh, 'kõik');
sortedSolidity = sort ([props. Solidity], 'laskuma');
SB = sortedSolidity (1);
kui SB == 1 % SB aktsepteerib ainult tugevust == 1 filtreerige luud välja
binaryImage = imbinarize (I); joonis (103);
imshow (binaryImage); värvipilt (hall);
SE = strel ('ruut', 3);
morfoloogiline gradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
mask = imbinariseerima (morfoloogiline gradient, 0,03);
SE = strel ('ruut', 2);
mask = imclose (mask, SE);
mask = imfill (mask, 'augud');
mask = bwareafilt (mask, 2); % näituse kontrollnumber
notMask = ~ mask;
mask = mask | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, mask, 'r'); % peate alla laadima rakenduse/funktsiooni showMaskAsOverlay
BW2 = imfill (binaryImage, 'augud');
uus_pilt = BW2;
uus_pilt (~ mask) = 0; % ümberpööratud taust ja augud
B = piiri piirid (uus_pilt); % aktsepteerib ainult 2 dimensiooni
joonis (104);
imshow (uus pilt);
oota
piirid (B);
lõpp
4. samm: GUI loomine
Nüüd integreerime eelneva koodi MATLAB -i rakendusse. Avage rakenduse kujundaja rakenduses MATLAB (uus> rakendus). Esiteks kujundame liidese, hoides all ja lohistades kolme telge keset tööruumi. Järgmisena klõpsame ja hoiame all kaks nuppu, üks redigeerimisväli (tekst), üks redigeerimisväli (numbriline), üks liugur ja üks rippmenüü. Kaks telge kuvavad eelvaate ja analüüsivad pilti ning kolmandad teljed kuvavad eelvaate „valitud” pildi pikslite histogrammi. Redigeerimisvälja (teksti) kast kuvab valitud pildi failitee ja redigeerimisväli (numbriline) kopsude tuvastatud pikslite ala.
Nüüd lülitage rakenduse kujundaja kujundusvaadelt koodivaatele. Sisestage koodi kood atribuutide jaoks, klõpsates punasel nupul „Atribuudid”, millel on plussmärk. Vormindage atribuudid I, lävi ja piirkonnadToExtract nagu allpool toodud koodis. Seejärel paremklõpsake tööruumi (komponendibrauser) paremas ülanurgas olevat nuppu ja minge jaotisest Tagasihelistamised> Mine tagasi … Lisage kood „funktsiooni SelectImageButtonPushed (rakendus, sündmus)” jaoks. See kood võimaldab teil valida arvutist uigetfile abil analüüsitava pildi. Pärast pildi valimist ilmub telgede alla eelvaade koos histogrammiga. Seejärel paremklõpsake teist nuppu ja korrake sama protseduuri tagasihelistamisfunktsiooni loomiseks.
Lisage kood „funktsiooni AnalyzeImageButtonPushed (rakendus, sündmus)” alla. See kood teeb pikslite loendamise ja plekituvastuse eelvaatepildil pildi analüüsimise nupul (olenemata sellest, millisel sellel koodil paremklõpsasite). Pärast nuppude programmeerimist programmeerime nüüd liuguri ja rippmenüü. Paremklõpsake liugurit, looge tagasihelistamisfunktsioon ja lisage lõpuni kood „function FilterThresholdSliderValueChanged (rakendus, sündmus)”. See võimaldab liuguril halli intensiivsuse läve reguleerida.
Looge rippmenüü jaoks tagasihelistamisfunktsioon ja lisage koodi „function AreastoExtractDropDownValueChanged (rakendus, sündmus)” alla kood, et rippmenüü saaks muuta analüüsitud pilditelgedel kuvatavate plekide arvu. Nüüd klõpsake komponendibrauseris iga üksust ja muutke nende omadusi oma maitse järgi, näiteks muutke olemite nimesid, eemaldage telgi ja muutke skaleerimist. Lohistage disainivaates komponendibrauseri olemid funktsionaalsele ja hõlpsasti mõistetavale paigutusele. Nüüd on teil MATLABis rakendus, mis võimaldab analüüsida pikslipiirkonna kopsu pilte!
atribuudid (juurdepääs = privaatne) I = ; % pildifail
lävi = 257; %lävi halli intensiivsuse binariseerimiseks
regionalToExtract = 2;
lõpp
funktsioon SelectImageButtonPushed (rakendus, sündmus)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %define muutmata faili "eesliide"
[imageExt, path] = uigetfile ('*. png'); %haarab pildi nime muutuvast osast
imageName = [Suuna failipilt imageExt]; Muutumatute ja muutuvate sidemete liitmine %
app. I = imread (pildiNimi); %loeb pilti
imshow (app. I, 'parent', app. UIAxes); %kuvab pildi
app. FilePathEditField. Value = tee; %kuvab algse pildi pärit faili faili tee
lõpp
funktsioon AnalyzeImageButtonPushed (rakendus, sündmus)
originalImage = app. I;
originalImage = viiner2 (umbes I, [5 5]); %punktide eemaldamise filter
histogramm (app. AxesHistogram, app. I, 256); %kuvab pildi histogrammi
a_thresh = originalImage> = app.threshold; % määras selle läve
labelImage = bwlabel (a_thresh);
rekvisiidid = regionprops (a_thresh, 'kõik');
sortedSolidity = sort ([props. Solidity], 'laskuma');
SB = sortedSolidity (1);
kui SB == 1 % SB aktsepteerib ainult tugevust == 1 filtreerige luud välja
SE = strel ('ruut', 3);
morfoloogiline gradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
mask = imbinariseerima (morfoloogiline gradient, 0,03);
SE = strel ('ruut', 2);
mask = imclose (mask, SE);
mask = imfill (mask, 'augud');
mask = bwareafilt (mask, app.regionsToExtract);
% näituse kontrollnumber
notMask = ~ mask;
mask = mask | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'augud');
uus_pilt = BW2;
uus_pilt (~ mask) = 0;
B = piiri piirid (uus_pilt); % saab kuvada ainult kahte mõõdet (uus_pilt, 'vanem', rakendus. UIAxes2);
hoidke (app. UIAxes2, 'on');
piirid (B);
set (gca, 'YDir', 'reverse');
lungArea = bwarea (uus pilt);
app. PixelAreaEditField. Value = lungArea;
lõpp
lõpp
funktsioon FilterThresholdSliderValueChanged (rakendus, sündmus)
app.threshold = app. FilterThresholdSlider. Value;
lõpp
function AreastoExtractDropDownValueChanged (rakendus, sündmus) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
lõpp
lõpp
Soovitan:
Raspberry Pi juhtimine Matlabi abil: 5 sammu
Raspberry Pi juhtimine Matlabi abil: Hei, see õpetus käsitleb peata vaarika pi juhtimist matlabi abil. Võimalik, et peate uuema vaarika pi plaadi toetamiseks installima matlabi uusimale versioonile
MATLABi juhitav Roomba: 5 sammu
MATLAB -i juhitav Roomba: Selle projekti eesmärk on kasutada MATLAB -i ja modifitseeritud programmeeritavat iRoboti robotit. Meie rühm ühendas meie kodeerimisoskused, et luua MATLAB -skript, mis kasutab paljusid iRoboti funktsioone, sealhulgas kaljuandureid, kaitseraua sensorit
Täiskasvanute kuulmistesti tegemine MATLABi abil: 6 sammu
Täiskasvanute kuulmiskatse tegemine MATLABi abil: TÄHELEPANU: Meie test EI OLE meditsiiniline diagnostika ja seda ei tohiks sellisena kasutada. Kuulmise täpseks mõõtmiseks pöörduge arsti poole. Kasutades juba olemasolevaid materjale, tegi meie rühm kuulmistesti. Meie test on mõeldud ainult täiskasvanutele ja teismelistele
Ajukasvaja MRI tuvastamine Matlabi abil: 6 sammu
Ajukasvaja MRI tuvastamine Matlabi abil: Autor: Madhumita Kannan, Henry Nguyen, Ashley Urrutia Avila, Mei Jin See programm on loodud töötama algselt kasvajate avastamisega
Diabeetilise retinopaatia automaatne diagnoosimine MATLABi kaudu: 33 sammu
Diabeetilise retinopaatia automaatne diagnoosimine MATLABi kaudu: (Vt ülaltoodud koodi ülevaade) Diabeetiline retinopaatia on diabeediga seotud silmahaigus, mis on põhjustatud kõrgest veresuhkru tasemest. Kõrge veresuhkru tase põhjustab võrkkesta veresoonte turset, mis põhjustab veresoonte laienemist ja isegi veresoonte