Turinys:
- 1 veiksmas: 1 veiksmas: vaizdo įkėlimas
- 2 veiksmas: 2 veiksmas: triukšmo filtravimas ir histograma
- 3 žingsnis: 3 žingsnis: slenksčių nustatymas
- 4 veiksmas: sukurkite GUI
- 5 veiksmas: vaizdo įrašo demonstracija
Video: „MatLab“plaučių segmentavimas: 5 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:44
Autoriai: Phuc Lam, Paul Yeung, Eric Reyes
Pripažinus, kad plaučių segmentavimo klaidos sukels klaidingą informaciją apie ligos srities nustatymą ir gali tiesiogiai paveikti diagnozės procesą. Šiuolaikinės kompiuterinės pagalbos metodai nepateikė tikslių rezultatų, kai plaučių ligos yra sudėtingos formos. Šios nenormalios formos gali atsirasti dėl pleuros išsiliejimo, susiliejimo ir pan. Taikant plaučių segmentavimo metodą, kai plaučių ribos yra izoliuotos nuo aplinkinio krūtinės ląstos audinio, mūsų programa gali nustatyti ribas su vartotojo įvesties slenksčiais, kad būtų galima visiškai pritaikyti vaizdus plaučių formos, Šio „MatLab“projekto tikslas yra sukurti patogią interaktyvią plaučių segmentavimo programą, leidžiančią aptikti plaučių rentgeno vaizdų patologines sąlygas. Mūsų tikslas yra sukurti veiksmingesnį būdą parodyti ir nustatyti nenormalius plaučius, kad gydytojai ir radiologai galėtų patikimiau diagnozuoti plaučių ligas. Naudojant „MatLab“programėlių kūrimo įrankį, programa sukurta specialiai dirbti su krūtinės ląstos rentgeno ir kompiuterinės tomografijos (KT) skenavimais, tačiau ji taip pat išbandyta, ar veikia MRT.
Toliau pateiktose instrukcijose pateikiama mūsų triukšmo filtravimo technika (žemo dažnio Wiener filtras), taip pat vaizdo slenkstis (naudojant pilkos spalvos vaizdo intensyvumo histogramą) ir morfologinis gradientas (skirtumas tarp vaizdo išsiplėtimo ir erozijos) iki nustatyti dominantį regioną. Tada instrukcijoje bus paaiškinta, kaip mes integruojame visus elementus į grafinę vartotojo sąsają (GUI).
Pastaba:
1). Šį projektą įkvėpė mokslinis darbas: „Nenormalių plaučių segmentavimas ir vaizdo analizė CT: dabartiniai metodai, iššūkiai ir ateities tendencijos“. Kurį galima rasti čia
2). Mes naudojame rentgeno nuotraukas iš NIH: klinikinio centro. Nuorodą rasite čia
3). Programų kūrėjo pagalbą rasite čia
4). Prieš paleisdami kodą: turite pakeisti „Dir“kelią (34 eilutėje) į failų katalogą ir vaizdo tipą (35 eilutė) (mes analizuojame *.png).
1 veiksmas: 1 veiksmas: vaizdo įkėlimas
Šis žingsnis parodys originalų vaizdą pilkos spalvos skalėje. Pakeiskite „name_of_picture.png“į savo vaizdo pavadinimą
skaidrus; clc; uždaryti viską;
%% įkeliami vaizdai
raw_x_ray = 'paveikslėlio pavadinimas.png';
I = imread (raw_x_ray);
figūra (101);
imshow (I);
spalvota (pilka);
pavadinimas („Pilkų atspalvių rentgeno spinduliai“);
2 veiksmas: 2 veiksmas: triukšmo filtravimas ir histograma
Norėdami rasti pilkosios skalės vaizdo slenkstį, žiūrime į histogramą, kad pamatytume, ar yra skirtingų režimų. Daugiau skaitykite čia
I = wiener2 (I, [5 5]);
paveikslas (102);
papildomas sklypas (2, 1, 1);
imshow (I);
papildomas sklypas (2, 1, 2);
imhist (I, 256);
3 žingsnis: 3 žingsnis: slenksčių nustatymas
Šis žingsnis leidžia nustatyti slenkstį pagal histogramą. morfologinisGradientas raudonai paryškins dominančią sritį, o funkcija „visboundaries“raudonai padengs kontūrinį ir filtruotą plaučių vaizdą.
Naudodami regionprops, galime patikslinti tvirtumo masyvus ir surūšiuoti juos mažėjančia tvarka. Toliau binarizuoju pilką skliauto vaizdą ir pritaikau morfologinio gradiento metodą ir mLoren Shurasking, kad paryškintumėte dominančią sritį (IG). Kitas žingsnis yra apversti vaizdą taip, kad plaučių ROI būtų balta juodame fone. Aš naudoju funkciją showMaskAsOverlay, kad būtų rodoma 2 kaukė. Pastaba: kodą įkvėpė Loren Shure, nuoroda.
Lasly, aš sukuriu raudoną kontūrą naudodamas bwbwboundaries ir užmaskuodamas filtro vaizdą bei ribas.
a_thresh = I> = 172; % nustatė šią ribą
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekvizitai = regionprops (a_thresh, 'all');
sortedSolidity = rūšiuoti ([props. Solidity], 'nusileisti');
SB = surūšiuotas (1);
jei SB == 1 % SB priima tik tvirtumą == 1 išfiltruokite kaulus
binaryImage = imbinarize (I); paveikslas (103);
imshow (binaryImage); spalvota (pilka);
SE = strel ('kvadratas', 3);
morfologinisGradientas = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
kaukė = imbinarize (morfologinisGradientas, 0,03);
SE = strel ('kvadratas', 2);
kaukė = uždėti (kaukė, SE);
kaukė = imfill (kaukė, 'skylės');
kaukė = bwareafilt (kaukė, 2); % kontrolinis ploto rodymo skaičius
notMask = ~ kaukė;
kaukė = kaukė | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, kaukė, „r“); % turite atsisiųsti programą/funkciją showMaskAsOverlay
BW2 = imfill (binaryImage, 'skylės');
new_image = BW2;
new_image (~ kaukė) = 0; % apverstas fonas ir skylės
B = ribinės ribos (naujas vaizdas); % gali priimti tik 2 matmenis
paveikslas (104);
parodyti (naujas vaizdas);
palauk
ribos (B);
galas
4 veiksmas: sukurkite GUI
Dabar mes integruojame ankstesnį kodą į MATLAB programą. Atidarykite programų kūrėją programoje MATLAB (Nauja> Programa). Pirma, mes kuriame sąsają spustelėdami ir laikydami nuspaudę bei trimis ašimis tempdami į centrinę darbo sritį. Tada spustelėkite ir laikykite nuspaudę du mygtukus, vieną redagavimo lauką (tekstą), vieną redagavimo lauką (skaitinį), vieną slankiklį ir vieną išskleidžiamąjį meniu. Kiekvienoje iš dviejų ašių bus rodoma peržiūra ir išanalizuotas vaizdas, o trečiosiose ašyse bus rodoma peržiūros „pasirinkto“vaizdo taškų histograma. Redagavimo lauko (teksto) laukelyje bus rodomas pasirinkto vaizdo failo kelias, o redagavimo lauke (skaitinis) - aptikta plaučių pikselių sritis.
Dabar perjunkite iš dizaino rodinio į kodo rodinį „App Designer“. Įveskite nuosavybės kodo kodą spustelėdami raudoną mygtuką „Ypatybės“su pliuso ženklu. Inicijuokite ypatybes I, slenkstį ir regionusToExtract, kaip nurodyta toliau pateiktame kode. Tada dešiniuoju pelės mygtuku spustelėkite mygtuką, esantį viršutiniame dešiniajame darbo srities kampe (komponentų naršyklė), ir eikite iš Skambinimas atgal> Atgal. Pridėkite kodą „funkcija SelectImageButtonPushed (programa, įvykis)“. Šis kodas leidžia iš kompiuterio pasirinkti vaizdą, kurį norite analizuoti, naudodami uigetfile. Pasirinkus vaizdą, po ašimis pasirodys peržiūros vaizdas kartu su histograma. Tada dešiniuoju pelės mygtuku spustelėkite kitą mygtuką ir pakartokite tą pačią procedūrą, kad sukurtumėte atgalinio ryšio funkciją.
Įtraukite kodą po „funkcija AnalyzeImageButtonPushed (programa, įvykis)“. Šis kodas atliks vaizdo taškų skaičiavimą ir BLOB aptikimą peržiūros vaizde, paspaudęs vaizdo analizės mygtuką (bet kurį, kurį dešiniuoju pelės klavišu spustelėjote, kad gautumėte šį kodą). Užprogramavę mygtukus, dabar užprogramuosime slankiklį ir išskleidžiamąjį meniu. Dešiniuoju pelės mygtuku spustelėkite slankiklį, sukurkite atgalinio ryšio funkciją ir iki pabaigos pridėkite kodą po „function FilterThresholdSliderValueChanged (programa, įvykis)“. Tai leidžia slankikliui reguliuoti pilkos spalvos intensyvumo slenkstį.
Išskleidžiamajame meniu sukurkite atgalinio ryšio funkciją ir pridėkite kodą po „function AreastoExtractDropDownValueChanged (programa, įvykis)“, kad išskleidžiamasis meniu galėtų pakeisti analizuojamų vaizdo ašių rodomų BLOB skaičių. Dabar komponentų naršyklėje spustelėkite kiekvieną objektą ir pakeiskite jų savybes pagal savo skonį, pvz., Pakeiskite objektų pavadinimus, pašalinkite ašis ir pakeiskite mastelį. Vilkite ir numeskite komponentų naršyklės objektus dizaino rodinyje į funkcionalų ir lengvai suprantamą išdėstymą. Dabar MATLAB turite programą, kuri gali analizuoti pikselių ploto plaučių vaizdus!
ypatybės (Prieiga = privatus) I = ; % vaizdo failas
slenkstis = 257; %slenkstis binarizuojant pilką intensyvumą
regionToExtract = 2;
galas
funkcija SelectImageButtonPushed (programa, įvykis)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %define invariate failas „priešdėlis“
[imageExt, path] = uigetfile ('*. png'); %patraukite kintamą vaizdo pavadinimo dalį
imageName = [Dir filesep imageExt]; %sujungtų nekintamų ir kintamų krypčių
app. I = imread (vaizdo pavadinimas); %perskaitė vaizdą
„imshow“(programa I, „tėvas“, programa. „UIAxes“); %rodyti vaizdą
app. FilePathEditField. Value = kelias; %rodomas failo kelias, iš kurio kilo originalus vaizdas
galas
funkcija AnalyzeImageButtonPushed (programa, įvykis)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); %taškų šalinimo filtras
histograma (app. AxesHistogram, app. I, 256); %rodoma vaizdo histograma
a_thresh = originalImage> = app.threshold; % nustatė šią ribą
labelImage = bwlabel (a_thresh);
rekvizitai = regionprops (a_thresh, 'all');
sortedSolidity = rūšiuoti ([props. Solidity], 'nusileisti');
SB = surūšiuotas (1);
jei SB == 1 % SB priima tik tvirtumą == 1 išfiltruokite kaulus
SE = strel ('kvadratas', 3);
morfologinisGradientas = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
kaukė = imbinarize (morfologinisGradientas, 0,03);
SE = strel ('kvadratas', 2);
kaukė = uždėti (kaukė, SE);
kaukė = imfill (kaukė, 'skylės');
kaukė = bwareafilt (kaukė, app.regionsToExtract);
% kontrolinis ploto rodymo skaičius
notMask = ~ kaukė;
kaukė = kaukė | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'skylės');
new_image = BW2;
new_image (~ kaukė) = 0;
B = ribinės ribos (naujas vaizdas); % gali priimti tik 2 matmenis (nauja_paveikslėlis, 'tėvų', app. UIAxes2);
palaikykite (app. UIAxes2, 'on');
ribos (B);
rinkinys (gca, 'YDir', 'reverse');
lungArea = bwarea (new_image);
app. PixelAreaEditField. Value = lungArea;
galas
galas
funkcija FilterThresholdSliderValueChanged (programa, įvykis)
app.threshold = app. FilterThresholdSlider. Value;
galas
function AreastoExtractDropDownValueChanged (programa, įvykis) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
galas
galas
Rekomenduojamas:
„MATLAB“paprastas veido aptikimas: 4 žingsniai
„MATLAB Easy Face Detection“: pagrindinis šios instrukcijos tikslas yra parodyti, kaip lengva bus apdoroti vaizdus. „MATLABFace“veido aptikimas ir stebėjimas buvo svarbi ir aktyvi tyrimų sritis, todėl aš paaiškinsiu kaip tai galima padaryti
Kaip koduoti ir paskelbti „Matlab 2016b“į „Word“(vadovas pradedantiesiems): 4 žingsniai
Kaip koduoti ir publikuoti „Matlab 2016b“į „Word“(vadovas pradedantiesiems): „Matlab“yra didelio našumo kalbų programa, naudojama techniniams rezultatams apskaičiuoti. Jis turi galimybę patogiai integruoti vaizdus, skaičiavimus ir programavimą. Naudodamas šią programą vartotojas gali paskelbti problemas ir sprendimus
„Raspberry Pi“valdymas naudojant „Matlab“: 5 žingsniai
„Raspberry Pi“valdymas naudojant „Matlab“: Ei, ši pamoka skirta kontroliuoti savo avietę be galvos naudojant „Matlab“. Jums gali tekti įdiegti „Matlab“į naujausią versiją, kad palaikytumėte naujesnę aviečių pi plokštę
„Matlab“pagrįstas ROS robotų valdiklis: 9 žingsniai
„Matlab“pagrįstas ROS robotų valdiklis: Nuo vaikystės visada svajojau būti geležinis žmogus ir vis dar tai darau. „Geležinis žmogus“yra vienas iš tų personažų, kuris yra realiai įmanomas ir, paprasčiau tariant, trokštu kada nors tapti geležiniu žmogumi, net jei žmonės iš manęs juokiasi ar sako, kad tai neįmanoma
Traukinių programavimo patobulinimai MATLAB: 6 žingsniai
Traukinių programavimo patobulinimai MATLAB: Tikslas: Šios užprogramuotos sistemos tikslas yra pažvelgti į nedidelio masto „Arduino“ir pritaikyti kodavimą didesniu mastu, kad būtų galima patobulinti tam tikras „Amtrak Railroad“sistemų saugos funkcijas. Norėdami tai padaryti, pridėjome dirvožemio drėgmės