Sisällysluettelo:
- Vaihe 1: Vaihe 1: Kuvan lataaminen
- Vaihe 2: Vaihe 2: Kohinan suodatus ja histogrammi
- Vaihe 3: Vaihe 3: Kynnysarvojen asettaminen
- Vaihe 4: Käyttöliittymän luominen
- Vaihe 5: Videoesittely
Video: MatLab -keuhkojen segmentointi: 5 vaihetta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 08:59
Kirjailija: Phuc Lam, Paul Yeung, Eric Reyes
Myönnetään, että keuhkojen segmentointivirheet tuottavat vääriä tietoja sairausalueen tunnistamisesta ja voivat vaikuttaa suoraan diagnoosiprosessiin. Nykyaikaiset tietokoneavustustekniikat eivät tuottaneet tarkkoja tuloksia, kun keuhkosairaudet ovat haastavia. Nämä epänormaalit muodot voivat johtua keuhkopussin effuusioista, lujittumisista jne. Sovellettaessa keuhkojen segmentointitekniikkaa, jossa keuhkojen rajat on eristetty ympäröivästä rintakudoksesta, sovelluksemme voi tunnistaa rajat käyttäjän syöttökynnyksillä, jotta saadaan täysin muokattavat näkymät keuhkojen muodoista, Tämän MatLab-projektin tarkoituksena on luoda käyttäjäystävällinen interaktiivinen keuhkojen segmentointisovellus keuhkojen röntgenkuvien patologisten tilojen havaitsemiseksi. Tavoitteenamme on luoda tehokkaampi tapa havaita ja tunnistaa epänormaaleja keuhkoja, jotta lääkäreille ja radiologeille olisi luotettavampi tapa diagnosoida keuhkosairaudet. Käyttämällä MatLabin sovellusten suunnittelutyökalua ohjelma on suunniteltu toimimaan erityisesti rintakehän röntgen- ja tietokonetomografian (CT) skannausten kanssa, mutta se on myös testattu toimimaan MRI-skannausten kanssa.
Alla olevat ohjeet sisältävät kohinan suodatustekniikkamme (alipäästösuodatin Wiener-suodatin) sekä kuvan kynnyksen (käyttämällä harmaasävyisen kuvan voimakkuushistogrammia) ja käyttämällä morfologista gradienttia (kuvan laajentumisen ja eroosion välinen ero) tunnistaa kiinnostavan alueen. Ohjeessa selitetään sitten, kuinka integroimme kaikki elementit graafiseen käyttöliittymään (GUI).
Huomautus:
1). Tämä projekti on saanut inspiraationsa tutkimuspaperista: "Segmentation and Image Analysis of Epnormal Lungs at CT: Current Approaches, Challenges, and Future Trends". Joka löytyy täältä
2). Käytämme röntgenkuvia NIH: Clinical Centeristä. Linkki löytyy täältä
3). Sovellussuunnittelijan ohje löytyy täältä
4). Ennen koodin suorittamista: sinun on muutettava Dir -polku (rivillä 34) tiedostohakemistoksi ja kuvan tyypiksi (rivi 35) (analysoimme *.png).
Vaihe 1: Vaihe 1: Kuvan lataaminen
Tämä vaihe näyttää alkuperäisen kuvan harmaasävyinä. Muuta 'name_of_picture.png' kuvan nimeksi
asia selvä; clc; sulje kaikki;
%% ladataan kuvia
raw_x_ray = 'kuvan_nimi_kuva';
I = imread (raw_x_ray);
kuva (101);
imshow (I);
värikartta (harmaa);
otsikko ('Harmaasävyinen röntgen');
Vaihe 2: Vaihe 2: Kohinan suodatus ja histogrammi
Harmaasävyisen kuvan kynnyksen löytämiseksi katsomme histogrammista, onko eri tiloissa. Lue lisää täältä
I = wiener2 (I, [5 5]);
kuva (102);
osakaavio (2, 1, 1);
imshow (I);
osakaavio (2, 1, 2);
imhist (I, 256);
Vaihe 3: Vaihe 3: Kynnysarvojen asettaminen
Tässä vaiheessa voit asettaa kynnyksen histogrammin mukaan. morfologinen Kaltevuus korostaa kiinnostavaa aluetta punaisella, ja toiminto visboundaries peittää kehyksen hahmotetun ja suodatetun kuvan punaisella.
Käyttämällä aluepropsia voimme tarkentaa vakausmatriiseja ja lajitella ne laskevasti. Seuraavaksi binarisoin harmaata sclae -kuvaa ja käytän morfologista gradienttimenetelmää ja mLoren Shuraskingia korostamaan kiinnostavaa aluetta (ROI). Seuraava askel on kääntää kuva niin, että keuhkojen ROI on valkoinen mustalla taustalla. Käytän showMaskAsOverlay -funktiota 2 -naamion näyttämiseen. Huomautus: koodi on saanut inspiraationsa Loren Shuresta, linkki.
Lasly, luon punaisen ääriviivan käyttämällä bwbwboundaries ja peittämällä suodatinkuvan ja rajat.
a_thresh = I> = 172; % asetti tämän kynnyksen
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekvisiitta = regionprops (a_thresh, 'kaikki');
sortedSolidity = lajittele ([props. Solidity], 'laskeudu');
SB = lajiteltu kiinteys (1);
jos SB == 1 % SB hyväksyy vain lujuuden == 1 suodattaa luut pois
binaryImage = imbinarize (I); kuva (103);
imshow (binaryImage); värikartta (harmaa);
SE = strel ('neliö', 3);
morfologinen gradientti = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
maski = imbinarize (morfologinen gradientti, 0,03);
SE = strel ('neliö', 2);
maski = imclose (maski, SE);
maski = imfill (maski, 'reiät');
maski = bwareafilt (maski, 2); % -alueen esitysten määrä
notMask = ~ maski;
naamio = naamio | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, naamio, 'r'); % sinun on ladattava sovellus/toiminto showMaskAsOverlay
BW2 = imfill (binaryImage, 'reikiä');
uusi_kuva = BW2;
uusi_kuva (~ maski) = 0; % käänteinen tausta ja reikiä
B = rajarajat (uusi_kuva); % hyväksyy vain kaksi ulottuvuutta
kuva (104);
imshow (uusi_kuva);
pidä kiinni
visboundaries (B);
loppuun
Vaihe 4: Käyttöliittymän luominen
Nyt integroimme edellisen koodin MATLAB -sovellukseen. Avaa App Designer MATLABissa (Uusi> Sovellus). Suunnittelemme ensin käyttöliittymän napsauttamalla pitkään ja vetämällä kolmea akselia keski-työtilaan. Seuraavaksi napsautamme ja painamme-vedämme kaksi painiketta, yhden muokkauskentän (teksti), yhden muokkauskentän (numeerinen), yhden liukusäätimen ja yhden avattavan valikon. Kaksi akselia näyttää esikatselun ja analysoi kuvan, ja kolmannet akselit näyttävät esikatselukuvan "valitun" kuvan pikselien histogrammin. Muokkauskenttä (teksti) -ruutu näyttää valitun kuvan tiedostopolun ja muokkauskenttä (numeerinen) näyttää keuhkojen havaitun pikselialueen.
Vaihda nyt suunnittelunäkymästä koodinäkymään App Designerissa. Kirjoita koodiin kiinteistöjen koodi napsauttamalla punaista "Ominaisuudet" -painiketta plusmerkillä. Alusta ominaisuudet I, kynnys ja alueetToExtract kuten alla annetussa koodissa. Napsauta seuraavaksi hiiren kakkospainikkeella työtilan (komponenttiselain) oikeassa yläkulmassa olevaa painiketta ja siirry kohtaan Soittopyynnöt> Siirry… soittopyyntöön. Lisää koodi "function SelectImageButtonPushed (sovellus, tapahtuma)". Tämän koodin avulla voit valita analysoitavan kuvan tietokoneeltasi käyttämällä uigetfile -tiedostoa. Kuvan valitsemisen jälkeen akselien alle ilmestyy esikatselukuva, johon liittyy histogrammi. Napsauta sitten toista painiketta hiiren kakkospainikkeella ja toista sama menettely luodaksesi takaisinsoittotoiminnon.
Lisää koodi "function AnalyzeImageButtonPushed (sovellus, tapahtuma)" -kohdan alle. Tämä koodi suorittaa pikselien laskennan ja möykkyjen havaitsemisen esikatselukuvassa analysoi kuva -painikkeella (kumpaa klikkasit tämän koodin kohdalla). Painikkeiden ohjelmoinnin jälkeen ohjelmoimme nyt liukusäätimen ja avattavan valikon. Napsauta liukusäädintä hiiren kakkospainikkeella, luo takaisinsoittotoiminto ja lisää koodi "function FilterThresholdSliderValueChanged (sovellus, tapahtuma)" -kohdan loppuun loppuun. Tämän avulla liukusäädin voi säätää harmaan voimakkuuden kynnystä.
Luo takaisinsoittotoiminto avattavalle valikolle ja lisää koodi "function AreastoExtractDropDownValueChanged (sovellus, tapahtuma)" -kohdan alle, jotta pudotusvalikko voi muokata analysoiduissa kuva -akseleissa näkyvien läiskien määrää. Napsauta nyt jokaista kokonaisuutta komponenttiselaimessa ja muuta niiden ominaisuuksia haluamallasi tavalla, kuten muuttamalla entiteettien nimiä, poistamalla akseleita ja muuttamalla skaalausta. Vedä ja pudota suunnittelunäkymän komponenttiselaimen kokonaisuudet toimivaan ja helposti ymmärrettävään asetteluun. Sinulla on nyt MATLABissa sovellus, joka voi analysoida keuhkojen kuvia pikselialueelle!
ominaisuudet (Pääsy = yksityinen) I = ; % kuvatiedosto
kynnys = 257; %kynnys harmaan intensiteetin binaaristamiseen
regionToExtract = 2;
loppuun
toiminto SelectImageButtonPushed (sovellus, tapahtuma)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %define invariate -tiedosto "etuliite"
[imageExt, polku] = uigetfile ('*. png'); %nappaa kuvan nimen muuttuva osa
imageName = [Ohjaa tiedostoep imageExt]; %ketjutettuja invariaatioita ja muuttuvia suuntauksia
app. I = imread (kuvanNimi); %luki kuvan
imshow (app. I, 'parent', app. UIAxes); %näyttää kuvan
app. FilePathEditField. Value = polku; %näyttää tiedoston polun, josta alkuperäinen kuva tuli
loppuun
toiminto AnalyzeImageButtonPushed (sovellus, tapahtuma)
originalImage = app. I;
originalImage = wiener2 (nro I, [5 5]); %pisteenpoistosuodatin
histogrammi (app. AxesHistogram, app. I, 256); %näyttää kuvan histogrammin
a_thresh = originalImage> = app.threshold; % asetti tämän kynnyksen
labelImage = bwlabel (a_thresh);
rekvisiitta = regionprops (a_thresh, 'kaikki');
sortedSolidity = lajittele ([props. Solidity], 'laskeudu');
SB = lajiteltu kiinteys (1);
jos SB == 1 % SB hyväksyy vain lujuuden == 1 suodattaa luut pois
SE = strel ('neliö', 3);
morfologinen gradientti = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maski = imbinarize (morfologinen gradientti, 0,03);
SE = strel ('neliö', 2);
maski = imclose (maski, SE);
maski = imfill (maski, 'reiät');
maski = bwareafilt (maski, app.regionsToExtract);
% -alueen esitysten määrä
notMask = ~ maski;
naamio = naamio | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'reikiä');
uusi_kuva = BW2;
uusi_kuva (~ maski) = 0;
B = rajarajat (uusi_kuva); % voi hyväksyä vain kaksi ulottuvuutta (uusi_kuva, 'vanhempi', app. UIAxes2);
hold (app. UIAxes2, 'on');
visboundaries (B);
set (gca, 'YDir', 'reverse');
lungArea = bwarea (uusi_kuva);
app. PixelAreaEditField. Value = lungArea;
loppuun
loppuun
toiminto FilterThresholdSliderValueChanged (sovellus, tapahtuma)
app.threshold = app. FilterThresholdSlider. Value;
loppuun
function AreastoExtractDropDownValueChanged (sovellus, tapahtuma) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (merkkijono);
loppuun
loppuun
Suositeltava:
MATLAB Helppo kasvojentunnistus: 4 vaihetta
MATLAB Helppo kasvojentunnistus: Tämän ohjeen päätavoite on näyttää kuinka helppoa kuvankäsittely tulee olemaan. miten sen voi tehdä
Kuinka koodata ja julkaista Matlab 2016b Wordiin (aloittelijan opas): 4 vaihetta
Kuinka koodata ja julkaista Matlab 2016b Wordiin (aloittelijan opas): Matlab on korkean suorituskyvyn kieliohjelma, jota käytetään teknisten tulosten laskemiseen. Se kykenee integroimaan grafiikat, laskelmat ja ohjelmoinnin käyttäjäystävällisellä tavalla. Tämän ohjelman avulla käyttäjä voi julkaista ongelmia ja ratkaisuja
Matlab-pohjainen ROS-robottiohjain: 9 vaihetta
Matlab-pohjainen ROS-robottiohjain: Olen lapsesta asti haaveillut Iron Manista ja teen sitä edelleen. Iron Man on yksi niistä hahmoista, joka on realistisesti mahdollista, ja yksinkertaisesti sanottuna haluan tulla Iron Maniksi jonain päivänä, vaikka ihmiset nauravat minulle tai sanovat sen olevan mahdotonta
MATLAB App Designerin käyttäminen Arduinon kanssa: 5 vaihetta
MATLAB App Designerin käyttö Arduinon kanssa: MATLAB App Designer on tehokas työkalu, jonka avulla voit suunnitella graafisia käyttöliittymiä (GUI) kaikilla MATLAB -toiminnoilla. helppo seurata vaiheita.N
Analogisen signaalin näytteenotto -opetusohjelma - MATLAB: 8 vaihetta
Analogisen signaalin näytteenotto -opetusohjelma | MATLAB: Tässä opetusohjelmassa näytämme mitä näytteenotto on? ja kuinka näytteenottoa analogisesta signaalista MATLAB -ohjelmiston avulla