Sadržaj:
- Korak 1: Korak 1: Učitavanje slike
- Korak 2: Korak 2: Filtriranje šuma i histogram
- Korak 3: Korak 3: Postavljanje pragova
- Korak 4: Stvaranje GUI -ja
- Korak 5: Video demonstracija
Video: MatLab Segmentacija pluća: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:32
Napisali: Phuc Lam, Paul Yeung, Eric Reyes
Shvaćajući da će pogreške u segmentaciji pluća proizvesti lažne informacije o identifikaciji područja bolesti i mogu izravno utjecati na proces dijagnoze. Suvremene tehnike računalne pomoći nisu dale točne rezultate kada plućne bolesti imaju izazovan oblik. Ovi abnormalni oblici mogu biti uzrokovani pleuralnim izljevima, konsolidacijama itd. Primjenom tehnike segmentacije pluća, u kojoj su granice pluća izolirane od okolnog torakalnog tkiva, naša aplikacija može identificirati granice s korisničkim ulaznim pragovima kako bi se dobili potpuno prilagodljivi prikazi oblika pluća, Svrha ovog projekta MatLab je stvoriti interaktivnu aplikaciju za segmentaciju pluća prilagođenu korisniku za otkrivanje patoloških stanja rendgenskih snimaka pluća. Naš je cilj stvoriti učinkovitiji način za ilustraciju i identifikaciju abnormalnih pluća kako bismo liječnicima i radiolozima dali pouzdaniji način dijagnosticiranja plućnih bolesti. Pomoću alata za dizajner aplikacija u MatLabu, program je osmišljen za rad s rendgenskim snimkama prsnog koša i računalnom tomografijom (CT), ali je također testiran za rad s MRI snimkama.
Upute u nastavku sadrže našu tehniku filtriranja šuma (niskopropusni Wiener filter), kao i prag slike (pomoću histograma intenziteta slike u sivim tonovima) i pomoću morfološkog gradijenta (razlika između proširenja i erozije slike) do identificirati područje interesa. Uputa će zatim objasniti kako integriramo sve elemente u grafičko korisničko sučelje (GUI).
Bilješka:
1). Ovaj projekt inspiriran je istraživačkim radom: "Segmentacija i analiza slike abnormalnih pluća na CT -u: trenutni pristupi, izazovi i budući trendovi". Što se može pronaći ovdje
2). Koristimo rendgenske snimke iz NIH: Clinical Center. Link možete pronaći ovdje
3). Pomoć dizajnera aplikacija možete pronaći ovdje
4). Prije izvođenja koda: trebate promijeniti Dir stazu (u retku 34) u svoj imenik datoteka i vrstu slike (redak 35) (analiziramo *.png).
Korak 1: Korak 1: Učitavanje slike
Ovaj korak će vam pokazati izvornu sliku u sivoj ljestvici. Promijenite 'name_of_picture.png' u naziv svoje slike
čisto; clc; zatvori sve;
%% Učitavanje slika
raw_x_ray = 'naziv_slike.png';
I = imread (sirovi_x_ray);
slika (101);
imshow (I);
karta boja (siva);
naslov ('Rentgen u sivim tonovima');
Korak 2: Korak 2: Filtriranje šuma i histogram
Kako bismo pronašli prag za sliku sive ljestvice, gledamo histogram kako bismo vidjeli postoje li različiti načini. Više pročitajte ovdje
I = wiener2 (I, [5 5]);
slika (102);
podcrt (2, 1, 1);
imshow (I);
podcrt (2, 1, 2);
imhist (I, 256);
Korak 3: Korak 3: Postavljanje pragova
Ovaj vam korak omogućuje postavljanje praga prema histogramu. morphologicalGradient istaknut će područje od interesa crvenom bojom, a granice granica funkcije prekrivaju ocrtanu i filtriranu sliku pluća crvenom bojom.
Korištenjem regionovca možemo točno odrediti niz solidnosti i sortirati ih prema dolje. Zatim binarniziram sivu sclae sliku i primjenjujem metodu morfološkog gradijenta i mLoren Shurasking da istaknem područje od interesa (ROI). Sljedeći korak je obrnuti sliku tako da je ROI pluća bijel na crnoj pozadini. Koristim funkciju showMaskAsOverlay za prikaz 2 maske. Napomena: kôd je inspiriran Loren Shure, veza.
Lalyly, stvaram crveni obris pomoću bwbwboundaries i maskiranja slike filtra i granica.
a_thresh = I> = 172; % postavilo je ovaj prag
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekviziti = regijski rekviziti (a_thresh, 'sve');
sortSolidity = sort ([rekviziti. Solidity], 'silazni');
SB = sortiranoSolidity (1);
ako je SB == 1 % SB prihvaća samo čvrstoću == 1 filtrirajte kosti
binaryImage = imbinarize (I); slika (103);
imshow (binaryImage); karta boja (siva);
SE = strel ('kvadrat', 3);
morfološkiGradient = imisubtract (imdilat (binaryImage, SE), imerode (binaryImage, SE));
maska = imbinarizirati (morfološkiGradient, 0,03);
SE = strel ('kvadrat', 2);
maska = zatvorena (maska, SE);
maska = neispunjavanje (maska, 'rupe');
maska = bwareafilt (maska, 2); % kontrolni broj prikaza područja
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, maska, 'r'); % morate preuzeti aplikaciju/funkciju showMaskAsOverlay
BW2 = ispuna (binaryImage, 'rupe');
nova_slika = BW2;
nova_slika (~ maska) = 0; % obrnuti pozadinu i rupe
B = granične granice (nova_slika); % može prihvatiti samo 2 dimenzije
slika (104);
imshow (nova_slika);
drži se
visboundaries (B);
kraj
Korak 4: Stvaranje GUI -ja
Sada integriramo prethodni kôd u aplikaciju MATLAB. Otvorite App Designer u MATLAB -u (Novo> Aplikacija). Prvo, sučelje dizajniramo pritiskom i držanjem te povlačenjem u tri osi u središnji radni prostor. Zatim kliknite, držite i povucite dva gumba, jedno polje za uređivanje (tekst), jedno polje za uređivanje (numeričko), jedan klizač i jedan padajući izbornik. Dvije osi prikazat će pregled i analizirati sliku, a treće osi prikazat će histogram piksela za pregled odabrane slike. Okvir za polje za uređivanje (tekst) prikazat će putanju datoteke odabrane slike, a polje za uređivanje (numeričko) prikazat će otkriveno područje piksela pluća.
Sada prijeđite s prikaza dizajna na prikaz koda u App Designeru. Unesite kôd za svojstva klikom na crveni gumb "Svojstva" sa znakom plus. Inicijalizirajte svojstva I, prag i regijeToExtract kao u donjem kodu. Zatim desnom tipkom miša kliknite gumb u gornjem desnom kutu radnog prostora (preglednik komponenti) i idite iz Povratni pozivi> Idi na … povratni poziv. Dodajte kôd za "funkciju SelectImageButtonPushed (aplikacija, događaj)". Ovaj kôd omogućuje odabir slike za analizu s vašeg računala pomoću uigetfile. Nakon odabira slike, ispod osi će se pojaviti slika za pregled uz histogram. Zatim desnom tipkom miša kliknite drugi gumb i ponovite isti postupak za stvaranje funkcije povratnog poziva.
Dodajte kôd ispod "function AnalyzeImageButtonPushed (aplikacija, događaj)". Ovaj kôd će izvršiti prebrojavanje piksela i otkrivanje mrlja na slici za pregled nakon gumba za analizu slike (koji god kliknuli desnom tipkom miša za ovaj kôd). Nakon programiranja gumba, sada ćemo programirati klizač i padajući izbornik. Desnom tipkom miša kliknite klizač, stvorite funkciju povratnog poziva i dodajte kôd ispod "funkcije FilterThresholdSliderValueChanged (aplikacija, događaj)" do kraja. To omogućuje klizaču podešavanje praga intenziteta sive boje.
Izradite funkciju povratnog poziva za padajući izbornik i dodajte kôd ispod "function AreastoExtractDropDownValueChanged (aplikacija, događaj)" kako biste omogućili padajući izbornik da promijeni broj mrlja prikazanih na analiziranim osama slike. Sada kliknite svaki entitet u pregledniku komponenti i promijenite njihova svojstva po vašoj želji, poput promjene imena entiteta, uklanjanja osi i mijenjanja skale. Povucite i ispustite entitete preglednika komponenti u prikazu dizajna na funkcionalan i lako razumljiv izgled. Sada imate aplikaciju u MATLAB -u koja može analizirati slike pluća za područje piksela!
svojstva (Pristup = privatno) I = ; % slikovna datoteka
prag = 257; %prag za binarni intenzitet sive boje
regionToExtract = 2;
kraj
funkcija SelectImageButtonPushed (aplikacija, događaj)
clc; Dir = 'C: / Korisnici / danie / Preuzimanja / slike_004 / slike'; %definirati nepromjenjivu datoteku "prefiks"
[imageExt, path] = uigetfile ('*. png'); %zgrabite varijabilni dio naziva slike
imageName = [Dir filesep imageExt]; %ulančavanja nepromjenjivih i varijabilnih nizova
app. I = imread (imageName); %je pročitalo sliku
imshow (app. I, 'parent', app. UIAxes); %prikaz slike
app. FilePathEditField. Value = put; %prikaz putanje datoteke odakle je izvorna slika
kraj
funkcija AnalyzeImageButtonPushed (aplikacija, događaj)
originalna slika = app. I;
originalna slika = wiener2 (app. I, [5 5]); %filtar za uklanjanje točaka
histogram (app. AxesHistogram, app. I, 256); %prikaz histograma slike
a_thresh = originalna slika> = app.threshold; % postavilo je ovaj prag
labelImage = bwlabel (a_thresh);
rekviziti = regijski rekviziti (a_thresh, 'sve');
sortSolidity = sort ([rekviziti. Solidity], 'silazni');
SB = sortiranoSolidity (1);
ako je SB == 1 % SB prihvaća samo čvrstoću == 1 filtrirajte kosti
SE = strel ('kvadrat', 3);
morfološkiGradient = imisubtract (imdilat (labelImage, SE), imerode (labelImage, SE));
maska = imbinarizirati (morfološkiGradient, 0,03);
SE = strel ('kvadrat', 2);
maska = zatvorena (maska, SE);
maska = neispunjavanje (maska, 'rupe');
mask = bwareafilt (mask, app.regionsToExtract);
% kontrolni broj prikaza područja
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = ispuna (labelImage, 'rupe');
nova_slika = BW2;
nova_slika (~ maska) = 0;
B = granične granice (nova_slika); % može prihvatiti samo 2 dimenzije imshow (new_image, 'parent', app. UIAxes2);
držite (app. UIAxes2, 'uključeno');
visboundaries (B);
set (gca, 'YDir', 'reverse');
lungArea = bwarea (nova_slika);
app. PixelAreaEditField. Value = lungArea;
kraj
kraj
funkcija FilterThresholdSliderValueChanged (aplikacija, događaj)
app.threshold = app. FilterThresholdSlider. Value;
kraj
funkcija AreastoExtractDropDownValueChanged (aplikacija, događaj) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (broj niza);
kraj
kraj
Preporučeni:
MATLAB Jednostavno otkrivanje lica: 4 koraka
MATLAB Jednostavno otkrivanje lica: Glavni cilj ovih instrukcija je pokazati koliko će biti jednostavna obrada slike. Uz pomoć MATLABF -a otkrivanje i praćenje lica bilo je važno i aktivno polje istraživanja, pa ću vam objasniti kako se to može izvesti
Kako kodirati i objaviti Matlab 2016b u Wordu (Vodič za početnike): 4 koraka
Kako kodirati i objaviti Matlab 2016b u Wordu (Vodič za početnike): Matlab je jezični program visokih performansi koji se koristi za izračunavanje tehničkih rezultata. Ima mogućnost integriranja vizuala, računanja i programiranja na način prilagođen korisniku. Pomoću ovog programa korisnik može objaviti probleme i rješenja
ROS robotski upravljač sa sustavom Matlab: 9 koraka
ROS robotski kontroler sa sjedištem u Matlabu: Još od djetinjstva uvijek sam sanjao o tome da postanem Iron Man i to i dalje činim. Iron Man je jedan od onih likova koji su realno mogući i jednostavno rečeno, težim da jednog dana postanem Iron Man čak i ako mi se ljudi smiju ili kažu da je to nemoguće
Poboljšanja programiranja vlaka u MATLAB -u: 6 koraka
Poboljšanja programiranja vlakova u MATLAB -u: Cilj: Cilj ovog programiranog sustava je pogledati Arduino male veličine i primijeniti kodiranje u većoj mjeri kako bi potencijalno poboljšao određene sigurnosne značajke Amtrak željezničkih sustava. Da bismo to učinili, dodali smo senzor vlažnosti tla
Korištenje MATLAB App Designera s Arduinom: 5 koraka
Korištenje MATLAB App Designera s Arduinom: MATLAB App Designer moćan je alat koji vam omogućuje projektiranje grafičkih korisničkih sučelja (GUI) sa svim MATLAB funkcionalnostima. U ovom ćemo vodiču izraditi GUI za kontrolu svjetline LED dioda kroz korake koje je lako slijediti. N