Kazalo:
- 1. korak: 1. korak: Nalaganje slike
- 2. korak: 2. korak: Filtriranje hrupa in histogram
- 3. korak: 3. korak: določitev pragov
- 4. korak: Ustvarite grafični vmesnik
- 5. korak: Video demo
Video: MatLab Segmentacija pljuč: 5 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:02
Avtor: Phuc Lam, Paul Yeung, Eric Reyes
Zavedajoč se, da bodo napake pri segmentaciji pljuč povzročile napačne informacije o prepoznavanju območja bolezni in lahko neposredno vplivajo na postopek diagnoze. Sodobne tehnike računalniške pomoči niso prinesle natančnih rezultatov, kadar so pljučne bolezni zahtevne oblike. Te nenormalne oblike lahko povzročijo plevralni izlivi, konsolidacije itd. Z uporabo tehnike segmentacije pljuč, pri kateri so meje pljuč izolirane od okoliškega prsnega tkiva, lahko naša aplikacija identificira meje z uporabniškimi vhodnimi pragovi, da omogoči popolnoma prilagodljive poglede oblike pljuč, Namen tega projekta MatLab je ustvariti uporabniku prijazno interaktivno aplikacijo za segmentacijo pljuč za odkrivanje patoloških stanj rentgenskih slik pljuč. Naš cilj je ustvariti učinkovitejši način za ponazoritev in identifikacijo nenormalnih pljuč, da bi zdravnikom in radiologom dali bolj zanesljiv način za diagnosticiranje pljučnih bolezni. Z orodjem za oblikovanje aplikacij v MatLabu je program zasnovan tako, da deluje posebej z rentgenskimi slikami prsnega koša in računalniško tomografijo (CT), vendar je preizkušen tudi za delo z MRI.
Spodnja navodila vsebujejo našo tehniko filtriranja hrupa (nizkoprepustni Wienerjev filter), pa tudi prag slike (z uporabo histograma intenzivnosti slike v sivinah) in z uporabo morfološkega gradienta (razlika med razširjenostjo in erozijo slike) do opredelite zanimivo regijo. Navodilo bo nato pojasnilo, kako vse elemente vključimo v grafični uporabniški vmesnik (GUI).
Opomba:
1). Ta projekt je navdihnjen z raziskovalnim prispevkom: "Segmentacija in analiza slike nenormalnih pljuč pri CT: trenutni pristopi, izzivi in prihodnji trendi". Ki jih najdete tukaj
2). Uporabljamo rentgenske posnetke NIH: Clinical Center. Povezavo najdete tukaj
3). Pomoč oblikovalca aplikacij najdete tukaj
4). Preden zaženete kodo: morate pot Dir (v vrstici 34) spremeniti v imenik datotek in vrsto slike (vrstica 35) (analiziramo *.png).
1. korak: 1. korak: Nalaganje slike
Ta korak vam bo pokazal izvirno sliko v sivi lestvici. Spremenite 'name_of_picture.png' v ime slike
jasno; clc; zaprite vse;
%% Nalaganje slik
raw_x_ray = 'ime_slike.png';
I = imread (raw_x_ray);
slika (101);
imshow (I);
barvni zemljevid (siv);
naslov ('Rentgen v sivinah');
2. korak: 2. korak: Filtriranje hrupa in histogram
Če želimo najti prag za sivo sliko, pogledamo histogram, da vidimo, ali obstajajo ločeni načini. Več preberite tukaj
I = wiener2 (I, [5 5]);
slika (102);
podplet (2, 1, 1);
imshow (I);
podplet (2, 1, 2);
imhist (I, 256);
3. korak: 3. korak: določitev pragov
Ta korak vam omogoča nastavitev praga glede na histogram. morphologicalGradient bo območje, ki nas zanima, označilo z rdečo barvo, vizualne meje funkcije pa prekrivajo začrtano in filtrirano podobo pljuč v rdeči barvi.
Z uporabo regionov lahko natančno določimo niz solidnosti in jih razvrstimo po padajočem. Nato binarniziram sivo sliko sclae in uporabim metodo morfološkega gradienta in mLoren Shurasking, da poudarim zanimivo območje (ROI). Naslednji korak je obrniti sliko, tako da je ROI pljuč bel na črnem ozadju. Za prikaz 2 maske uporabljam funkcijo showMaskAsOverlay. Opomba: koda je navdihnjena od Loren Shure, povezava.
Lasly, ustvarim rdeč obris z uporabo bwbwboundaries in prikrijem sliko filtra in meje.
a_thresh = I> = 172; % nastavil ta prag
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekviziti = regijski rekviziti (a_thresh, 'vse');
sortSolidity = sort ([rekviziti. Solidity], 'spust');
SB = sortiranoSolidity (1);
če je SB == 1 % SB sprejme samo trdnost == 1 filtrirajte kosti
binaryImage = imbinarize (I); slika (103);
imshow (binaryImage); barvni zemljevid (siv);
SE = strel ('kvadrat', 3);
morfološkiGradient = odšteti (imdilat (binaryImage, SE), imerode (binaryImage, SE));
maska = imbinarize (morfološkiGradient, 0,03);
SE = strel ('kvadrat', 2);
maska = zaprta (maska, SE);
maska = neizpolnitev (maska, 'luknje');
mask = bwareafilt (maska, 2); % kontrolna številka prikaza območja
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, maska, 'r'); % morate prenesti aplikacijo/funkcijo showMaskAsOverlay
BW2 = neizpolnitev (binaryImage, 'luknje');
nova_slika = BW2;
nova_slika (~ maska) = 0; % obrniti ozadje in luknje
B = črne meje (nova_slika); % lahko sprejme samo 2 dimenziji
slika (104);
imshow (nova_slika);
počakaj
vizualne meje (B);
konec
4. korak: Ustvarite grafični vmesnik
Zdaj integriramo predhodno kodo v aplikacijo MATLAB. Odprite App Designer v MATLAB (New> App). Najprej oblikujemo vmesnik tako, da pritisnemo in držimo ter v treh osi povlečemo v osrednji delovni prostor. Nato pritisnemo in držimo dva gumba, eno polje za urejanje (besedilo), eno polje za urejanje (številčno), en drsnik in en spustni meni. Dve osi bosta prikazali predogled in analizirali sliko, tretja os pa histogram slikovnih pik za predogled "izbrane" slike. V polju za urejanje (besedilo) bo prikazana pot do izbrane slike, polje za urejanje (numerično) pa bo prikazalo zaznano območje pikslov pljuč.
Zdaj preklopite iz pogleda oblikovanja v pogled kode v App Designerju. V kodo vnesite kodo za lastnosti, tako da kliknete rdeč gumb »Lastnosti« z znakom plus. Inicializirajte lastnosti I, prag in regijeToExtract kot v spodnji kodi. Nato z desno tipko miške kliknite gumb v zgornjem desnem kotu delovnega prostora (brskalnik komponent) in pojdite iz možnosti Povratni klici> Pojdi na … povratni klic. Dodajte kodo za »funkcijo SelectImageButtonPushed (aplikacija, dogodek)«. Ta koda vam omogoča, da izberete sliko za analizo iz računalnika z uporabo datoteke uigetfile. Ko izberete sliko, se pod osi prikaže slika za predogled, skupaj s histogramom. Nato z desno tipko miške kliknite drugi gumb in ponovite isti postopek, da ustvarite funkcijo povratnega klica.
Dodajte kodo pod »funkcija AnalyzeImageButtonPushed (aplikacija, dogodek)«. Ta koda bo izvedla štetje slikovnih pik in odkrivanje blobov na sliki za predogled na gumbu za analizo slike (tisto, ki ste jo kliknili z desno tipko miške za to kodo). Po programiranju gumbov bomo zdaj programirali drsnik in spustni meni. Z desno tipko miške kliknite drsnik, ustvarite funkcijo povratnega klica in do konca dodajte kodo pod “function FilterThresholdSliderValueChanged (app, event)”. To omogoča drsniku, da prilagodi prag intenzivnosti sive barve.
Ustvarite funkcijo povratnega klica za spustni meni in dodajte kodo pod "function AreastoExtractDropDownValueChanged (app, event)", da spustnemu meniju spremenite število blobov, prikazanih na analiziranih osi slike. Zdaj kliknite vsako entiteto v brskalniku komponent in spremenite njihove lastnosti po vaših željah, na primer spremenite imena entitet, odstranite osi in spremenite obseg. Povlecite in spustite entitete brskalnika komponent v pogledu za oblikovanje v funkcionalno in enostavno razumljivo postavitev. Zdaj imate v MATLAB -u aplikacijo, ki lahko analizira slike pljuč za območje slikovnih pik!
lastnosti (Dostop = zasebno) I = ; % slikovna datoteka
prag = 257; %prag za binarno intenzivnost sive barve
regionToExtract = 2;
konec
funkcija SelectImageButtonPushed (aplikacija, dogodek)
clc; Dir = 'C: / Uporabniki / danie / Prenosi / slike_004 / slike'; %definiraj nespremenljivo "predpono" datoteke
[imageExt, pot] = uigetfile ('*. png'); %zgrabi spremenljiv del imena slike
imageName = [Dir filesep imageExt]; %združi nespremenljive in spremenljive zaporedje
app. I = imread (imageName); %prebral sliko
imshow (app. I, 'parent', app. UIAxes); %prikaže sliko
app. FilePathEditField. Value = pot; %prikaz poti datoteke, od kod je prišla izvirna slika
konec
funkcija AnalyzeImageButtonPushed (aplikacija, dogodek)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); %filter za odstranjevanje pik
histogram (app. AxesHistogram, app. I, 256); %prikaže histogram slike
a_thresh = originalImage> = app.threshold; % nastavil ta prag
labelImage = bwlabel (a_thresh);
rekviziti = regijski rekviziti (a_thresh, 'vse');
sortSolidity = sort ([rekviziti. Solidity], 'spust');
SB = sortiranoSolidity (1);
če je SB == 1 % SB sprejme samo trdnost == 1 filtrirajte kosti
SE = strel ('kvadrat', 3);
morfološkiGradient = imububtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maska = imbinarize (morfološkiGradient, 0,03);
SE = strel ('kvadrat', 2);
maska = zaprta (maska, SE);
maska = neizpolnitev (maska, 'luknje');
mask = bwareafilt (mask, app.regionsToExtract);
% kontrolna številka prikaza območja
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = neizpolnitev (labelImage, 'luknje');
nova_slika = BW2;
nova_slika (~ maska) = 0;
B = črne meje (nova_slika); % lahko sprejme samo 2 dimenziji imshow (new_image, 'parent', app. UIAxes2);
zadrži (app. UIAxes2, 'on');
vizualne meje (B);
set (gca, 'YDir', 'reverse');
lungArea = bwarea (nova_slika);
app. PixelAreaEditField. Value = lungArea;
konec
konec
funkcija FilterThresholdSliderValueChanged (aplikacija, dogodek)
app.threshold = app. FilterThresholdSlider. Value;
konec
funkcija AreastoExtractDropDownValueChanged (aplikacija, dogodek) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
konec
konec
Priporočena:
Izboljšave programiranja vlakov v MATLAB -u: 6 korakov
Izboljšave programiranja vlakov v MATLAB -u: Cilj: Cilj tega programiranega sistema je pogledati manjši Arduino in uporabiti šifriranje v večjem obsegu, da bi potencialno izboljšali nekatere varnostne lastnosti železniških sistemov Amtrak. V ta namen smo dodali senzor vlažnosti tal
Uporaba programa MATLAB App Designer z Arduinom: 5 korakov
Uporaba MATLAB App Designerja z Arduinom: MATLAB App Designer je močno orodje, ki vam omogoča oblikovanje grafičnih uporabniških vmesnikov (GUI) z vsemi funkcijami MATLAB. V tej vadnici bomo naredili grafični vmesnik za nadzor svetlosti LED skozi koraki, ki jih je enostavno slediti.N
Vadnica za vzorčenje analognega signala - MATLAB: 8 korakov
Vadnica za vzorčenje analognega signala | MATLAB: V tej vadnici prikazujemo, kaj je vzorčenje? in Kako vzorčiti analogni signal s programsko opremo MATLAB
MATLAB nadzorovana Roomba: 5 korakov
Robomba z nadzorom MATLAB: Cilj tega projekta je uporabiti MATLAB kot tudi spremenjenega iRobot programabilnega robota. Naša skupina je združila naše sposobnosti kodiranja, da bi ustvarila skript MATLAB, ki uporablja številne funkcije iRobota, vključno s senzorji za pečine, odbijačem
Kako narediti preskus sluha pri odraslih z uporabo MATLAB -a: 6 korakov
Kako narediti preskus sluha pri odraslih z uporabo programa MATLAB: ODGOVORNOST: Naš test NI medicinska diagnostika in ga kot takega ne bi smeli uporabljati. Če želite natančno izmeriti sluh, obiščite zdravnika. Naša skupina je z uporabo materialov, ki smo jih že imeli, opravila preskus sluha. Naš test je namenjen samo odraslim in najstnikom