Obsah:
- Krok 1: Krok 1: Načítání obrázku
- Krok 2: Krok 2: Filtrování šumu a histogram
- Krok 3: Krok 3: Nastavení prahových hodnot
- Krok 4: Vytvoření GUI
- Krok 5: Ukázka videa
Video: Segmentace plic MatLab: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
Autor: Phuc Lam, Paul Yeung, Eric Reyes
Uvědomte si, že chyby v segmentaci plic vytvoří nepravdivé informace týkající se identifikace oblasti onemocnění a mohou přímo ovlivnit proces diagnostiky. Moderní techniky počítačové pomoci nepřinesly přesné výsledky, pokud mají plicní nemoci náročné tvary. Tyto abnormální tvary mohou být způsobeny pleurálními výpotky, konsolidacemi atd. Pomocí techniky segmentace plic, při které jsou hranice plic izolovány od okolní hrudní tkáně, dokáže naše aplikace identifikovat hranice s prahovými hodnotami vstupu uživatele a poskytnout plně přizpůsobitelné zobrazení. tvarů plic, Účelem tohoto projektu MatLab je vytvořit uživatelsky přívětivou interaktivní aplikaci segmentace plic pro detekci patologických stavů rentgenových snímků plic. Naším cílem je vytvořit účinnější způsob, jak ilustrovat a identifikovat abnormální plíce, aby lékaři a radiologům poskytli spolehlivější způsob diagnostiky plicních chorob. Pomocí nástroje pro návrháře aplikací v programu MatLab je program navržen tak, aby fungoval specificky s rentgeny hrudníku a počítačovou tomografií (CT), ale je také testován pro práci se skenováním MRI.
Níže uvedené pokyny obsahují naši techniku filtrování šumu (nízkoprůchodový Wienerův filtr) a také práh obrazu (pomocí histogramu intenzity obrazu ve stupních šedi) a použití morfologického gradientu (rozdíl mezi dilatací a erozí obrazu) pro identifikovat oblast zájmu. Instrukce pak vysvětlí, jak integrujeme všechny prvky do grafického uživatelského rozhraní (GUI).
Poznámka:
1). Tento projekt je inspirován výzkumnou prací: „Segmentace a obrazová analýza abnormálních plic na CT: současné přístupy, výzvy a budoucí trendy“. Což najdete zde
2). Používáme rentgenové snímky z NIH: Clinical Center. Odkaz najdete zde
3). Nápovědu pro návrháře aplikací najdete zde
4). Před spuštěním kódu: musíte změnit cestu Dir (v řádku 34) na adresář souborů a typ obrázku (řádek 35) (analyzujeme *.png).
Krok 1: Krok 1: Načítání obrázku
Tento krok vám ukáže původní obrázek v šedé škále. Změňte 'name_of_picture.png' na název obrázku
Průhledná; clc; zavřít vše;
%% načítání obrázků
raw_x_ray = 'name_of_picture.png';
I = imread (raw_x_ray);
obrázek (101);
imshow (I);
barevná mapa (šedá);
title ('X-Ray ve stupních šedi');
Krok 2: Krok 2: Filtrování šumu a histogram
Abychom našli prahovou hodnotu obrázku šedé stupnice, podíváme se do histogramu, abychom zjistili, zda existují odlišné režimy. Přečtěte si více zde
I = wiener2 (I, [5 5]);
obrázek (102);
podkres (2, 1, 1);
imshow (I);
podkres (2, 1, 2);
imhist (I, 256);
Krok 3: Krok 3: Nastavení prahových hodnot
Tento krok vám umožňuje nastavit práh podle histogramu. morphologicalGradient zvýrazní oblast zájmu červeně a funkce visboundaries překrývá načrtnutý a filtrovaný obraz plic červeně.
Použitím regionprops můžeme upřesnit pole solidnosti a seřadit je sestupně. Dále binarizuji obraz šedých sclae a použiji metodu morfologického gradientu a mLoren Shurasking pro zvýraznění oblasti zájmu (ROI). Dalším krokem je převrácení obrázku tak, aby návratnost plic byla na černém pozadí bílá. K zobrazení 2 masky používám funkci showMaskAsOverlay. Poznámka: kód je inspirován Loren Shure, odkaz.
Lasly, vytvořím červený obrys pomocí bwbwboundaries a maskování obrazu filtru a hranic.
a_thresh = I> = 172; % nastavilo tuto prahovou hodnotu
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortSolidity = sort ([props. Solidity], 'descend');
SB = seřazenáSolidity (1);
pokud SB == 1 % SB akceptuje pouze pevnost == 1 odfiltruje kosti
binaryImage = imbinarize (I); obrázek (103);
imshow (binaryImage); barevná mapa (šedá);
SE = strel ('čtverec', 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
maska = imbinarize (morphologicalGradient, 0,03);
SE = strel ('čtverec', 2);
maska = imclose (maska, SE);
mask = imfill (maska, 'díry');
maska = bwareafilt (maska, 2); % kontrolní počet plošné show
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, maska, 'r'); % musíte si stáhnout aplikaci/funkci showMaskAsOverlay
BW2 = imfill (binaryImage, 'díry');
new_image = BW2;
new_image (~ maska) = 0; % invertovat pozadí a díry
B = hranice hranice (nový_obraz); % může přijmout pouze 2 dimenze
obrázek (104);
imshow (new_image);
vydrž
hranice (B);
konec
Krok 4: Vytvoření GUI
Nyní integrujeme předchozí kód do aplikace MATLAB. Otevřete App Designer v MATLABu (New> App). Nejprve navrhneme rozhraní kliknutím a podržením a přetažením ve třech osách do středového pracovního prostoru. Dále klikneme, podržíme a přetáhneme dvě tlačítka, jedno editační pole (text), jedno editační pole (číselné), jeden posuvník a jednu rozevírací nabídku. Dvě osy zobrazí náhled a analyzují obrázek a třetí osy zobrazí histogram pixelů pro náhled „vybraného“obrázku. Pole pro úpravy (text) zobrazí cestu k souboru vybraného obrázku a pole pro úpravy (číselné) zobrazí detekovanou pixelovou oblast plic.
Nyní přepněte z návrhového zobrazení do zobrazení kódu v App Designer. Zadejte do kódu kód vlastností kliknutím na červené tlačítko „Vlastnosti“se znaménkem plus. Inicializujte vlastnosti I, práh a regionToExtract jako v níže uvedeném kódu. Dále klikněte pravým tlačítkem na tlačítko v pravé horní části pracovního prostoru (Prohlížeč komponent) a přejděte z Zpětná volání> Přejít na … zpětné volání. Přidejte kód pro „funkci SelectImageButtonPushed (aplikace, událost)“. Tento kód vám umožňuje vybrat obrázek, který chcete analyzovat, z počítače pomocí uigetfile. Po výběru obrázku se pod osami zobrazí náhledový obrázek doprovázený histogramem. Poté klepněte pravým tlačítkem na druhé tlačítko a opakujte stejný postup pro vytvoření funkce zpětného volání.
Přidejte kód pod „funkce AnalyzeImageButtonPushed (aplikace, událost)“. Tento kód provede počítání pixelů a detekci blobů na náhledovém obrázku po tlačítku analyzovat obrázek (na kterýkoli z nich jste u tohoto kódu klikli pravým tlačítkem). Po naprogramování tlačítek nyní naprogramujeme posuvník a rozevírací nabídku. Klikněte pravým tlačítkem na posuvník, vytvořte funkci zpětného volání a přidejte kód pod „funkce FilterThresholdSliderValueChanged (aplikace, událost)“až do konce. To umožňuje posuvníku upravit práh intenzity šedé.
Vytvořte funkci zpětného volání pro rozevírací nabídku a přidejte kód pod „funkce AreastoExtractDropDownValueChanged (aplikace, událost)“, aby rozbalovací nabídka umožnila upravit počet blobů zobrazených na osách analyzovaného obrázku. Nyní klikněte na každou entitu v Prohlížeči součástí a změňte její vlastnosti podle svých představ, například změňte názvy entit, odeberte osy a změňte měřítko. Přetáhněte entity prohlížeče komponent v návrhovém zobrazení na funkční a snadno srozumitelné rozložení. Nyní máte v MATLABu aplikaci, která dokáže analyzovat snímky plic pro pixelovou oblast!
vlastnosti (Přístup = soukromé) I = ; % soubor obrázku
práh = 257; %prahové hodnoty pro binarizaci intenzity šedé
regionToExtract = 2;
konec
funkce SelectImageButtonPushed (aplikace, událost)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %definovat "prefix" invariate souboru
[imageExt, cesta] = uigetfile ('*. png'); %uchopte proměnnou část názvu obrázku
imageName = [Dir filesep imageExt]; %zřetězit invariate a variabilní řetězce
app. I = imread (imageName); %přečíst obrázek
imshow (app. I, 'parent', app. UIAxes); %zobrazení obrázku
app. FilePathEditField. Value = cesta; %cesta k zobrazení souboru, odkud pochází původní obrázek
konec
funkce AnalyzeImageButtonPushed (aplikace, událost)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); %filtr pro odstranění teček
histogram (app. AxesHistogram, app. I, 256); %zobrazení histogramu obrázku
a_thresh = originalImage> = app.threshold; % nastavilo tuto prahovou hodnotu
labelImage = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortSolidity = sort ([props. Solidity], 'descend');
SB = seřazenáSolidity (1);
pokud SB == 1 % SB akceptuje pouze pevnost == 1 odfiltruje kosti
SE = strel ('čtverec', 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maska = imbinarize (morphologicalGradient, 0,03);
SE = strel ('čtverec', 2);
maska = imclose (maska, SE);
mask = imfill (maska, 'díry');
maska = bwareafilt (maska, app.regionsToExtract);
% kontrolní počet plošné show
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'díry');
new_image = BW2;
new_image (~ maska) = 0;
B = hranice hranice (nový_obraz); % může akceptovat pouze 2 dimenze imshow (new_image, 'parent', app. UIAxes2);
hold (app. UIAxes2, 'on');
hranice (B);
set (gca, 'YDir', 'reverse');
lungArea = bwarea (new_image);
app. PixelAreaEditField. Value = plicní plocha;
konec
konec
funkce FilterThresholdSliderValueChanged (aplikace, událost)
app.threshold = app. FilterThresholdSlider. Value;
konec
funkce AreastoExtractDropDownValueChanged (aplikace, událost) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
konec
konec
Doporučuje:
Použití MATLAB App Designer s Arduino: 5 kroků
Použití MATLAB App Designer s Arduinem: MATLAB App Designer je výkonný nástroj, který vám umožňuje navrhovat grafická uživatelská rozhraní (GUI) se všemi funkcemi MATLAB. V tomto tutoriálu vytvoříme GUI pro ovládání jasu LED pomocí snadno sledovatelné kroky. N
Výukový program pro vzorkování analogového signálu - MATLAB: 8 kroků
Výukový program pro vzorkování analogového signálu | MATLAB: V tomto tutoriálu ukazujeme, co je to Sampling? a Jak vzorkovat analogový signál pomocí softwaru MATLAB
MATLAB Controlled Roomba: 5 kroků
MATLAB Controlled Roomba: Cílem tohoto projektu je využít MATLAB i upravený programovatelný robot iRobot. Naše skupina spojila naše kódovací schopnosti, aby vytvořila skript MATLAB, který využívá mnoho funkcí iRobot, včetně snímačů útesu, senzoru nárazníku
Roomba MATLAB Project: 5 kroků
Roomba MATLAB Project: Současný plán, který má NASA pro Mars rover, je, že bude sběratelem dat a bude se toulat po Marsu a sbírat vzorky půdy, které by se daly přivést zpět na Zemi, aby vědci mohli zjistit, zda na ní byly nějaké předchozí formy života planetu. Další
Launchpad - Comunicación Serial Con Matlab: 6 kroků
Launchpad - Comunicación Serial Con Matlab: Hola, bienvenido a este tutorial donde aprender á s a comunicar tu tarjeta LaunchPad TI Evaluation Kit con Matlab.En este tutorial se enfocar á a la conexi ó n con la Tiva C y el usuario podr á migrujte a přidávejte