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: Kreiranje grafičkog sučelja
- Korak 5: Video demo
Video: MatLab Segmentacija pluća: 5 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:04
Napisali: Phuc Lam, Paul Yeung, Eric Reyes
Shvativši da će greške u segmentaciji pluća proizvesti lažne informacije o identifikaciji područja bolesti i mogu izravno utjecati na proces dijagnoze. Savremene tehnike računalne pomoći nisu dale tač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 MatLab projekta je stvoriti interaktivnu aplikaciju za segmentaciju pluća prilagođenu korisniku za otkrivanje patoloških stanja rendgenskih snimaka pluća. Naš cilj je stvoriti učinkovitiji način za ilustraciju i identifikaciju abnormalnih pluća kako bismo ljekarima i radiolozima dali pouzdaniji način dijagnosticiranja plućnih bolesti. Pomoću alata za dizajniranje aplikacija u MatLabu, program je dizajniran za rad s rendgenskim snimkama prsnog koša i računalnom tomografijom (CT), ali je također testiran za rad sa MRI skeniranjem.
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 koristeći morfološki gradijent (razlika između proširenja i erozije slike) do identifikovati region od 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". Koje se mogu pronaći ovde
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 pokretanja koda: trebate promijeniti Dir stazu (u retku 34) u direktorij datoteke i vrstu slike (red 35) (analiziramo *.png).
Korak 1: Korak 1: Učitavanje slike
Ovaj korak će vam pokazati originalnu sliku u sivoj ljestvici. Promijenite 'name_of_picture.png' u naziv slike
jasan; clc; zatvori sve;
%% Učitavanje slika
raw_x_ray = 'ime_slike.png';
I = imread (raw_x_ray);
broj (101);
imshow (I);
karta boja (siva);
naslov ('Rentgen sivih tonova');
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. Pročitajte više ovdje
I = wiener2 (I, [5 5]);
broj (102);
podcrt (2, 1, 1);
imshow (I);
podcrt (2, 1, 2);
imhist (I, 256);
Korak 3: Korak 3: Postavljanje pragova
Ovaj korak vam omogućuje postavljanje praga prema histogramu. morphologicalGradient će crvenom bojom označiti područje interesa, a granice granica funkcije prekrivaju ocrtanu i filtriranu sliku pluća crvenom bojom.
Koristeći regionprops, možemo precizirati nizove solidilnosti i sortirati ih u opadajućem redoslijedu. Zatim binarizujem 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 koristeći bwbwboundaries i maskirajući sliku filtra i granice.
a_thresh = I> = 172; % je postavilo ovaj prag
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekviziti = regionprops (a_thresh, 'sve');
sortSolidity = sort ([props. Solidity], 'silazni');
SB = sortiranoSolidity (1);
ako je SB == 1 % SB prihvaća samo čvrstoću == 1 filtrirajte kosti
binaryImage = imbinarize (I); broj (103);
imshow (binaryImage); karta boja (siva);
SE = strel ('kvadrat', 3);
morphologicalGradient = imisubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
maska = imbinarizirati (morfološki gradijent, 0,03);
SE = strel ('kvadrat', 2);
maska = zatvorena (maska, SE);
maska = neispunjavanje (maska, 'rupe');
maska = bwareafilt (maska, 2); % kontrolni broj prikazane površine
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;
new_image (~ mask) = 0; % obrnuti pozadinu i rupe
B = granične granice (nova_slika); % može prihvatiti samo 2 dimenzije
broj (104);
imshow (new_image);
Čekaj
visboundaries (B);
kraj
Korak 4: Kreiranje grafičkog sučelja
Sada integriramo prethodni kôd u aplikaciju MATLAB. Otvorite App Designer u MATLAB -u (Novo> Aplikacija). Prvo, sučelje dizajniramo tako da pritisnemo i držimo i povučemo u tri osi u središnji radni prostor. Zatim kliknemo i držimo i povučemo dva gumba, jedno polje za uređivanje (tekst), jedno polje za uređivanje (numeričko), jedan klizač i jedan padajući izbornik. Po dvije osi prikazat će pregled i analizirati sliku, a treće osi prikazat će histogram piksela za pregled odabrane slike. Polje za uređivanje (tekst) prikazat će putanju datoteke odabrane slike, a polje za uređivanje (numeričko) prikazat će otkrivenu površinu piksela pluća.
Sada se u dizajneru aplikacija prebacite s prikaza dizajna na prikaz koda. Unesite kod za svojstva klikom na crveno dugme „Svojstva“sa znakom plus. Inicijalizirajte svojstva I, prag i regijeToExtract kao u donjem kodu. Zatim desnom tipkom miša kliknite gumb u gornjem desnom dijelu 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 vam omogućava da izaberete sliku za analizu sa svog računara koristeći uigetfile. Nakon odabira slike, ispod osi će se pojaviti slika za pregled uz histogram. Zatim desnom tipkom miša kliknite drugo dugme i ponovite isti postupak za stvaranje funkcije povratnog poziva.
Dodajte kôd ispod "funkcija 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 da kliknete desnim tasterom miša za ovaj kôd). Nakon programiranja tipki, sada ćemo programirati klizač i padajući izbornik. Desnom tipkom miša kliknite klizač, stvorite funkciju povratnog poziva i dodajte kôd ispod „funkcija FilterThresholdSliderValueChanged (aplikacija, događaj)“do kraja. Ovo omogućava klizaču da podesi prag intenziteta sive boje.
Napravite funkciju povratnog poziva za padajući izbornik i dodajte kôd ispod „funkcija 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, kao što je promjena imena entiteta, uklanjanje osi i mijenjanje razmjera. 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 promenljivi deo imena 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); %prikazuje sliku
app. FilePathEditField. Value = path; %prikaz putanje datoteke odakle je izvorna slika
kraj
funkcija AnalyzeImageButtonPushed (aplikacija, događaj)
originalna slika = app. I;
originalImage = wiener2 (app. I, [5 5]); %filter za uklanjanje tačaka
histogram (app. AxesHistogram, app. I, 256); %prikazuje histogram slike
a_thresh = originalna slika> = app.threshold; % je postavilo ovaj prag
labelImage = bwlabel (a_thresh);
rekviziti = regionprops (a_thresh, 'sve');
sortSolidity = sort ([props. Solidity], 'silazni');
SB = sortiranoSolidity (1);
ako je SB == 1 % SB prihvata samo čvrstoću == 1 filtrirajte kosti
SE = strel ('kvadrat', 3);
morphologicalGradient = imisubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maska = imbinarizirati (morfološki gradijent, 0,03);
SE = strel ('kvadrat', 2);
maska = zatvorena (maska, SE);
maska = neispunjavanje (maska, 'rupe');
mask = bwareafilt (maska, app.regionsToExtract);
% kontrolni broj prikazane površine
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = ispuna (labelImage, 'rupe');
nova_slika = BW2;
new_image (~ mask) = 0;
B = granične granice (nova_slika); % može prihvatiti samo 2 dimenzije imshow (new_image, 'parent', app. UIAxes2);
hold (app. UIAxes2, 'on');
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čuje se:
MATLAB Jednostavno otkrivanje lica: 4 koraka
MATLAB Easy Face Detection: 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 uraditi
Kako kodirati i objaviti Matlab 2016b u Wordu (Vodič za početnike): 4 koraka
Kako kodirati i objaviti Matlab 2016b u Word (Vodič za početnike): Matlab je jezički 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
Poboljšanja programiranja vlakova u MATLAB -u: 6 koraka
Poboljšanja programiranja vlakova u MATLAB -u: Cilj: Cilj ovog programiranog sistema je pogledati Arduino male veličine i primijeniti kodiranje u većoj mjeri kako bi potencijalno poboljšao određene sigurnosne karakteristike Amtrak željezničkih sistema. Da bismo to učinili, dodali smo senzor vlažnosti tla
Korištenje MATLAB dizajnera aplikacija s Arduinom: 5 koraka
Korištenje MATLAB App Designera s Arduinom: MATLAB App Designer je moćan alat koji vam omogućuje da dizajnirate grafička korisnička sučelja (GUI) sa svim MATLAB funkcionalnostima. U ovom ćemo vodiču napraviti grafički korisnički interfejs za kontrolu svjetline LED diode kroz koraci koje je lako slijediti.N
Vodič za uzorkovanje analognog signala - MATLAB: 8 koraka
Vodič za uzorkovanje analognog signala | MATLAB: U ovom vodiču pokazujemo šta je Sampling? i Kako uzorkovati analogni signal pomoću softvera MATLAB