Obsah:
- Krok 1: Krok 1: Načítava sa obrázok
- Krok 2: Krok 2: Filtrovanie šumu a histogram
- Krok 3: Krok 3: Nastavenie prahových hodnôt
- Krok 4: Vytvorenie GUI
- Krok 5: Ukážka videa
Video: Segmentácia pľúc MatLab: 5 krokov
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:55
Autor: Phuc Lam, Paul Yeung, Eric Reyes
Uznávajúc, že chyby v segmentácii pľúc poskytnú nepravdivé informácie o identifikácii oblasti choroby a môžu priamo ovplyvniť proces diagnostiky. Moderné techniky počítačovej pomoci nedokázali poskytnúť presné výsledky, ak majú pľúcne choroby náročné tvary. Tieto abnormálne tvary môžu byť spôsobené pleurálnymi výpotkami, konsolidáciami atď. Použitím techniky segmentácie pľúc, v ktorej sú hranice pľúc izolované od okolitého hrudného tkaniva, dokáže naša aplikácia identifikovať hranice so vstupnými prahmi používateľa a poskytnúť tak plne prispôsobiteľné zobrazenia. tvarov pľúc, Účelom tohto projektu MatLab je vytvoriť užívateľsky prívetivú interaktívnu aplikáciu segmentácie pľúc na detekciu patologických stavov röntgenových snímok pľúc. Našim cieľom je vytvoriť účinnejší spôsob ilustrácie a identifikácie abnormálnych pľúc, aby mali lekári a rádiológovia k dispozícii spoľahlivejší spôsob diagnostiky pľúcnych chorôb. Program je vybavený nástrojom pre návrhárov aplikácií v programe MatLab a je navrhnutý tak, aby pracoval špeciálne s röntgenovými snímkami hrudníka a počítačovou tomografiou (CT), ale je testovaný aj na prácu so snímkami MRI.
Nasledujúce pokyny obsahujú našu techniku filtrovania šumu (dolnopriepustný Wienerov filter), ako aj prah obrazu (pomocou histogramu intenzity obrazu v odtieňoch sivej) a použitie morfologického gradientu (rozdiel medzi dilatáciou a eróziou obrazu) na identifikovať oblasť záujmu. Inštrukcia potom vysvetlí, ako integrujeme všetky prvky do grafického používateľského rozhrania (GUI).
Poznámka:
1). Tento projekt je inšpirovaný výskumným dokumentom: „Segmentácia a obrazová analýza abnormálnych pľúc v CT: súčasné prístupy, výzvy a budúce trendy“. Ktoré nájdete tu
2). Používame röntgenové snímky z NIH: Clinical Center. Link nájdete tu
3). Pomoc pre návrhárov aplikácií nájdete tu
4). Pred spustením kódu: musíte zmeniť cestu Dir (v riadku 34) na adresár súborov a typ obrázku (riadok 35) (analyzujeme *.png).
Krok 1: Krok 1: Načítava sa obrázok
Tento krok vám ukáže pôvodný obrázok v šedej škále. Zmeňte „name_of_picture.png“na názov svojho obrázka
jasný; clc; zavrieť všetky;
%% Načítavajú sa obrázky
raw_x_ray = 'name_of_picture.png';
I = imread (raw_x_ray);
figúrka (101);
imshow (I);
farebná mapa (sivá);
názov („RTG v odtieňoch sivej“);
Krok 2: Krok 2: Filtrovanie šumu a histogram
Aby sme našli prahovú hodnotu pre obrázok v odtieňoch šedej, pozrieme sa na histogram, aby sme zistili, či existujú odlišné režimy. Prečítajte si viac tu
I = wiener2 (I, [5 5]);
obrázok (102);
podkres (2, 1, 1);
imshow (I);
podkres (2, 1, 2);
imhist (I, 256);
Krok 3: Krok 3: Nastavenie prahových hodnôt
Tento krok vám umožňuje nastaviť prah podľa histogramu. morfologickéGradient zvýrazní oblasť záujmu červenou farbou a funkčné visboundaries prekryjú načrtnutý a filtrovaný obraz pľúc červenou farbou.
Použitím regionprops môžeme spresniť polia tuhosti a zoradiť ich zostupne. Ďalej binarizujem obrázok sivých sclae a použijem metódu morfologického gradientu a mLoren Shurasking, aby som zvýraznil oblasť záujmu (ROI). Ďalším krokom je prevrátenie obrázku tak, aby návratnosť pľúc pľúc bola na čiernom pozadí biela. Na zobrazenie 2 masky používam funkciu showMaskAsOverlay. Poznámka: kód je inšpirovaný Loren Shure, odkaz.
Lasly, vytvorím červený obrys pomocou bwbwboundaries a zakryjem obraz filtra a hranice.
a_thresh = I> = 172; % nastavilo tento prah
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortSolidity = sort ([props. Solidity], 'zostúpiť');
SB = vytriedenýSolidity (1);
ak SB == 1 % SB akceptuje iba pevnosť == 1 odfiltrujte kosti
binaryImage = imbinarize (I); obrázok (103);
imshow (binaryImage); farebná mapa (sivá);
SE = strel ('štvorec', 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
maska = imbinarizovať (morphologicalGradient, 0,03);
SE = strel ('štvorec', 2);
maska = imclose (maska, SE);
mask = imfill (maska, 'diery');
maska = bwareafilt (maska, 2); % kontrolného počtu plošných šou
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, maska, 'r'); % musíte si stiahnuť aplikáciu/funkciu showMaskAsOverlay
BW2 = imfill (binaryImage, 'diery');
new_image = BW2;
new_image (~ maska) = 0; % invertného pozadia a dier
B = hranice bw (new_image); % môže akceptovať iba 2 dimenzie
obrázok (104);
imshow (new_image);
Počkaj
hranice (B);
koniec
Krok 4: Vytvorenie GUI
Teraz integrujeme predchádzajúci kód do aplikácie MATLAB. Otvorte aplikáciu App Designer v programe MATLAB (Nové> Aplikácia). Najprv navrhneme rozhranie kliknutím a podržaním a potiahnutím v troch osiach do stredového pracovného priestoru. Ďalej klikneme, podržíme a potiahneme dve tlačidlá, jedno pole na úpravu (text), jedno pole na úpravu (číselné), jeden posúvač a jednu rozbaľovaciu ponuku. Dve osi zobrazia náhľad a analyzujú obrázok a tretie osi zobrazia histogram pixelov pre „vybratý“obrázok náhľadu. V poli úprav (text) sa zobrazí cesta k súboru zvoleného obrázku a v poli úprav (číselné) sa zobrazí zistená pixelová oblasť pľúc.
Teraz v aplikácii App Designer prepnite zo zobrazenia návrhu na zobrazenie kódu. Zadajte kód vlastností pre kód kliknutím na červené tlačidlo „Vlastnosti“so znamienkom plus. Inicializujte vlastnosti I, prah a regionToExtract ako v nižšie uvedenom kóde. Potom kliknite pravým tlačidlom myši na tlačidlo v pravom hornom rohu pracovného priestoru (komponentný prehliadač) a prejdite na Spätné volania> Prejsť na … spätné volanie. Pridajte kód pre „funkciu SelectImageButtonPushed (aplikácia, udalosť)“. Tento kód vám umožňuje vybrať obrázok, ktorý sa má analyzovať, z počítača pomocou súboru uigetfile. Po výbere obrázka sa pod osami zobrazí ukážkový obrázok sprevádzaný histogramom. Potom kliknite pravým tlačidlom myši na druhé tlačidlo a zopakovaním rovnakého postupu vytvorte funkciu spätného volania.
Pridajte kód pod „funkcia AnalyzeImageButtonPushed (aplikácia, udalosť)“. Tento kód vykoná počítanie pixelov a detekciu blobov v náhľadovom obrázku po kliknutí na tlačidlo analyzovať obrázok (na ktorýkoľvek z nich ste pre tento kód klikli pravým tlačidlom myši). Po naprogramovaní tlačidiel teraz naprogramujeme posuvník a rozbaľovaciu ponuku. Kliknite pravým tlačidlom na posúvač, vytvorte funkciu spätného volania a zadajte kód pod „funkcia FilterThresholdSliderValueChanged (aplikácia, udalosť)“až do konca. To umožňuje posúvaču upravovať prahovú hodnotu intenzity šedej.
Vytvorte funkciu spätného volania pre rozbaľovaciu ponuku a zadajte kód pod „funkcia AreastoExtractDropDownValueChanged (aplikácia, udalosť)“, aby v rozbaľovacej ponuke bolo možné upraviť počet blobov zobrazených na osiach analyzovaného obrázka. Teraz kliknite na každú entitu v prehliadači súčastí a zmeňte ich vlastnosti podľa svojich predstáv, ako napríklad zmena názvov entít, odstránenie osí a zmena mierky. Pretiahnutím entít komponentového prehliadača v návrhovom zobrazení prejdete na funkčné a zrozumiteľné rozloženie. Teraz máte v MATLABe aplikáciu, ktorá dokáže analyzovať obrázky pľúc pre pixelovú oblasť!
vlastnosti (Prístup = súkromné) I = ; % súbor s obrázkom
prahová hodnota = 257; %prahovej hodnoty pre binarizáciu intenzity šedej
regionToExtract = 2;
koniec
funkcia SelectImageButtonPushed (aplikácia, udalosť)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %define invariate súboru „predpona“
[imageExt, cesta] = uigetfile ('*. png'); %uchopte variabilnú časť názvu obrázku
imageName = [Dir filesep imageExt]; %zreťazených invariantných a variabilných namáhaní
app. I = imread (imageName); %prečítať obrázok
imshow (app. I, 'parent', app. UIAxes); %zobrazí obrázok
app. FilePathEditField. Value = cesta; %cesta k zobrazenému súboru, odkiaľ pochádza pôvodný obrázok
koniec
funkcia AnalyzeImageButtonPushed (aplikácia, udalosť)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); filter na odstránenie bodiek
histogram (app. AxesHistogram, app. I, 256); %zobrazenie histogramu obrázku
a_thresh = originalImage> = app.threshold; % nastavilo tento prah
labelImage = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortSolidity = sort ([props. Solidity], 'zostúpiť');
SB = vytriedenýSolidity (1);
ak SB == 1 % SB akceptuje iba pevnosť == 1 odfiltrujte kosti
SE = strel ('štvorec', 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maska = imbinarizovať (morphologicalGradient, 0,03);
SE = strel ('štvorec', 2);
maska = imclose (maska, SE);
mask = imfill (maska, 'diery');
maska = bwareafilt (maska, app.regionsToExtract);
% kontrolného počtu plošných šou
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'diery');
new_image = BW2;
new_image (~ maska) = 0;
B = hranice bw (new_image); % môže akceptovať iba 2 dimenzie imshow (new_image, 'parent', app. UIAxes2);
podržať (app. UIAxes2, 'on');
hranice (B);
sada (gca, 'YDir', 'reverz');
lungArea = bwarea (nový_obraz);
app. PixelAreaEditField. Value = lungArea;
koniec
koniec
funkcia FilterThresholdSliderValueChanged (aplikácia, udalosť)
app.threshold = app. FilterThresholdSlider. Value;
koniec
funkcia AreastoExtractDropDownValueChanged (aplikácia, udalosť) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
koniec
koniec
Odporúča:
Ovládanie Raspberry Pi pomocou Matlab: 5 krokov
Ovládanie Raspberry Pi pomocou Matlab: Hej, tento tutoriál je o ovládaní vášho bezhlavého malinového pi pomocou matlabu. Na podporu novšej dosky Raspberry Pi bude možno potrebné nainštalovať matlab na najnovšiu verziu
Použitie MATLAB App Designer s Arduino: 5 krokov
Použitie MATLAB App Designer s Arduino: MATLAB App Designer je výkonný nástroj, ktorý vám umožní navrhnúť grafické používateľské rozhrania (GUI) so všetkými funkciami MATLAB. V tomto návode vytvoríme GUI na ovládanie jasu LED pomocou ľahko sledovateľné kroky. N
Návod na vzorkovanie analógového signálu - MATLAB: 8 krokov
Návod na vzorkovanie analógového signálu | MATLAB: V tomto návode si ukážeme, čo je to Sampling? a Ako vzorkovať analógový signál pomocou softvéru MATLAB
Roomba riadená systémom MATLAB: 5 krokov
MATLAB Controlled Roomba: Cieľom tohto projektu je využiť MATLAB, ako aj upravený programovateľný robot iRobot. Naša skupina skombinovala naše kódovacie schopnosti a vytvorila skript MATLAB, ktorý používa mnoho funkcií iRobot, vrátane senzorov útesu, senzora nárazníka
Roomba MATLAB Project: 5 krokov
Roomba MATLAB Project: Súčasný plán, ktorý má NASA pre Mars rover, je, že bude zberačom údajov a bude sa túlať po Marse a zbierať vzorky pôdy, ktoré by priviezol späť na Zem, aby vedci zistili, či na nej boli nejaké predchádzajúce formy života. planéta. Dodatočné