Cuprins:
- Pasul 1: Pasul 1: Încărcarea imaginii
- Pasul 2: Pasul 2: Filtrarea zgomotului și histograma
- Pasul 3: Pasul 3: Setarea pragurilor
- Pasul 4: Crearea GUI
- Pasul 5: Demo video
Video: Segmentarea pulmonară MatLab: 5 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:41
De: Phuc Lam, Paul Yeung, Eric Reyes
Știind că erorile din segmentarea plămânilor vor produce informații false cu privire la identificarea unei zone de boală și pot afecta direct procesul de diagnostic. Tehnicile moderne de asistență computerizată nu au reușit să ofere rezultate exacte atunci când bolile pulmonare au forme provocatoare. Aceste forme anormale pot fi cauzate de revărsări pleurale, consolidări etc. Aplicând tehnica segmentării pulmonare, în care limitele plămânului sunt izolate de țesutul toracic înconjurător, aplicația noastră poate identifica limitele cu pragurile de intrare ale utilizatorului pentru a oferi vizualizări complet personalizabile. a formelor plămânilor, Scopul acestui proiect MatLab este de a crea o aplicație interactivă de segmentare pulmonară interactivă pentru a detecta condițiile patologice ale imaginilor cu raze X ale plămânilor. Scopul nostru este de a crea un mod mai eficient de a ilustra și identifica plămânii anormali pentru a oferi medicilor și radiologilor un mod mai fiabil de a diagnostica bolile pulmonare. Folosind instrumentul de proiectare a aplicațiilor din MatLab, programul este conceput pentru a funcționa în mod specific cu radiografie toracică și tomografie computerizată (CT), dar este testat și pentru a funcționa cu scanări RMN.
Instrucțiunile de mai jos conțin tehnica noastră de filtrare a zgomotului (filtru Wiener low-pass), precum și pragul imaginii (utilizând histograma de intensitate a imaginii în tonuri de gri) și folosind un gradient morfologic (diferența dintre dilatarea și eroziunea unei imagini) la identifică o regiune de interes. Instrucțiunea va explica apoi modul în care integrăm toate elementele în interfața grafică cu utilizatorul (GUI).
Notă:
1). Acest proiect este inspirat de o lucrare de cercetare: "Segmentarea și analiza imaginii plămânilor anormali la CT: abordări actuale, provocări și tendințe viitoare". Ceea ce puteți găsi aici
2). Folosim imagini cu raze X de la NIH: Clinical Center. Linkul poate fi găsit aici
3). Ajutorul proiectantului de aplicații poate fi găsit aici
4). Înainte de a rula codul: trebuie să schimbați calea Dir (în linia 34) în directorul de fișiere și tipul imaginii (linia 35) (analizăm *.png).
Pasul 1: Pasul 1: Încărcarea imaginii
Acest pas vă va arăta imaginea originală la scară de gri. Schimbați „name_of_picture.png” cu numele imaginii
clar; clc; inchide tot;
%% Se încarcă imagini
raw_x_ray = 'name_of_picture.png';
I = imread (raw_x_ray);
figura (101);
imshow (I);
colormap (gri);
titlu („Radiografie în tonuri de gri”);
Pasul 2: Pasul 2: Filtrarea zgomotului și histograma
Pentru a găsi pragul pentru imaginea la scară de gri, ne uităm la histogramă pentru a vedea dacă există moduri distincte. Citiți mai multe aici
I = wiener2 (I, [5 5]);
figura (102);
subtrama (2, 1, 1);
imshow (I);
subtrama (2, 1, 2);
imhist (I, 256);
Pasul 3: Pasul 3: Setarea pragurilor
Acest pas vă permite să setați pragul în funcție de histogramă. morphologicalGradient va evidenția regiunea de interes pentru roșu, iar funcția visboundaries suprapune imaginea conturată și filtrată a plămânului în roșu.
Folosind regionprops, putem stabili matricile de soliditate și le putem ordona în descrescătoare. Apoi binarizez imaginea sclae gri și aplic metoda gradientului morflogic și mLoren Shurasking pentru a evidenția regiunea de interes (ROI). Următorul pas este să inversați imaginea, astfel încât rentabilitatea investiției plămânilor să fie albă pe fundalul negru. Folosesc funcția showMaskAsOverlay pentru a afișa 2 măști. Notă: codul este inspirat din Loren Shure, link.
Lasly, creez contur roșu folosind bwbwboundaries și mascând imaginea filtrului și limitele.
a_thresh = I> = 172; % a stabilit acest prag
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortedSolidity = sort ([props. Solidity], 'descend');
SB = SortedSolidity (1);
dacă SB == 1% SB acceptă doar soliditatea == 1 filtrează oasele
binaryImage = imbinarize (I); figura (103);
imshow (binaryImage); colormap (gri);
SE = strel („pătrat”, 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
masca = imbinariza (morfologicGradient, 0,03);
SE = strel („pătrat”, 2);
mască = imclose (mask, SE);
mask = imfill (mască, 'găuri');
mask = bwareafilt (mask, 2); % număr de control al afișării zonei
notMask = ~ mask;
mască = mask | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, mască, 'r'); % trebuie să descărcați aplicația / funcția showMaskAsOverlay
BW2 = imfill (binaryImage, 'găuri');
new_image = BW2;
new_image (~ mask) = 0; % inversați fundalul și găurile
B = frontiere bw (imagine_ nouă); % poate accepta doar 2 dimensiuni
figura (104);
imshow (new_image);
stai asa
limitele vizuale (B);
Sfârșit
Pasul 4: Crearea GUI
Acum, integrăm codul anterior într-o aplicație MATLAB. Deschideți aplicația Designer în MATLAB (Nou> Aplicație). În primul rând, proiectăm interfața făcând clic-țineți-și țineți în trei axe în spațiul de lucru central. Apoi, facem clic-țineți-trageți două butoane, un câmp de editare (text), un câmp de editare (numeric), un glisor și un meniu derulant. Două axe vor afișa fiecare previzualizare și vor analiza imaginea, iar a treia axe va afișa o histogramă de pixeli pentru imaginea „selectată” de previzualizare. Câmpul de editare (text) va afișa calea fișierului imaginii selectate, iar câmpul de editare (numeric) va afișa suprafața de pixeli detectată a plămânilor.
Acum comutați de la vizualizarea de proiectare la vizualizarea de cod în App Designer. Introduceți în cod codul pentru proprietăți făcând clic pe butonul roșu „Proprietăți” cu semnul plus lângă acesta. Inițializați proprietățile I, pragul și regiunile ToExtract ca în codul furnizat mai jos. Apoi, faceți clic dreapta pe un buton din partea dreaptă sus a spațiului de lucru (browserul de componente) și accesați Apeluri> Accesați … apelare. Adăugați codul pentru „funcția SelectImageButtonPush (aplicație, eveniment)”. Acest cod vă permite să selectați o imagine de analizat de pe computer utilizând uigetfile. După selectarea unei imagini, o imagine de previzualizare va apărea sub axe însoțită de o histogramă. Apoi, faceți clic dreapta pe celălalt buton și repetați aceeași procedură pentru a crea o funcție de apel invers.
Adăugați codul de sub „funcția AnalyzeImageButtonPush (aplicație, eveniment)”. Acest cod va efectua numărarea pixelilor și detectarea blob-ului pe imaginea de previzualizare de pe butonul de analiză a imaginii (pe oricare ați făcut clic dreapta pentru acest cod). După programarea butoanelor, vom programa acum glisorul și meniul derulant. Faceți clic dreapta pe glisor, creați o funcție de apel invers și adăugați codul sub „funcția FilterThresholdSliderValueChanged (aplicație, eveniment)” până la sfârșit. Aceasta permite glisorului să regleze pragul de intensitate a griului.
Creați o funcție de apel invers pentru meniul derulant și adăugați codul sub „funcția AreastoExtractDropDownValueChanged (aplicație, eveniment)” pentru a permite meniului derulant să modifice numărul de bloburi afișate pe axele imaginii analizate. Acum, faceți clic pe fiecare entitate din browserul de componente și schimbați-le proprietățile după cum doriți, cum ar fi schimbarea numelor entităților, eliminarea axelor și schimbarea scalării. Trageți și fixați entitățile din browserul de componente în vizualizarea proiectare într-un aspect funcțional și ușor de înțeles. Aveți acum o aplicație în MATLAB care poate analiza imagini ale plămânilor pentru suprafața pixelilor!
proprietăți (Acces = privat) I = ; % fișier imagine
prag = 257; % prag pentru intensitatea cenușii binarizante
regionsToExtract = 2;
Sfârșit
funcție SelectImageButtonPush (aplicație, eveniment)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; % definește „prefixul” fișierului invariabil
[imageExt, cale] = uigetfile ('*. png'); % apucați partea variabilă a numelui imaginii
imageName = [Dir filesep imageExt]; % concatenează corzile variabile și invariabile
app. I = imread (imageName); % citește imaginea
imshow (app. I, „părinte”, app. UIAxes); % afișează imaginea
app. FilePathEditField. Value = cale; % afișează calea fișierului de unde provine imaginea originală
Sfârșit
funcție AnalyzeImageButtonPush (aplicație, eveniment)
originalImage = app. I;
OriginalImage = wiener2 (app. I, [5 5]); % filtru de eliminare a punctelor
histogramă (app. AxesHistogram, app. I, 256); % afișează histograma imaginii
a_thresh = originalImage> = app.threshold; % a stabilit acest prag
labelImage = bwlabel (a_thresh);
props = regionprops (a_thresh, 'all');
sortedSolidity = sort ([props. Solidity], 'descend');
SB = SortedSolidity (1);
dacă SB == 1% SB acceptă numai soliditatea == 1 filtrează oasele
SE = strel („pătrat”, 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
masca = imbinariza (morfologicGradient, 0,03);
SE = strel („pătrat”, 2);
mască = imclose (mask, SE);
mask = imfill (mască, 'găuri');
mask = bwareafilt (mask, app.regionsToExtract);
% număr de control al afișării zonei
notMask = ~ mask;
mască = mask | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'găuri');
new_image = BW2;
new_image (~ mask) = 0;
B = frontiere bw (imagine_ nouă); % poate accepta doar 2 dimensiuni imshow (new_image, 'parent', app. UIAxes2);
hold (app. UIAxes2, 'on');
limitele vizuale (B);
set (gca, 'YDir', 'invers');
lungArea = bwarea (new_image);
app. PixelAreaEditField. Value = lungArea;
Sfârșit
Sfârșit
funcție FilterThresholdSliderValueChanged (aplicație, eveniment)
app.threshold = app. FilterThresholdSlider. Value;
Sfârșit
funcția AreastoExtractDropDownValueChanged (aplicație, eveniment) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
Sfârșit
Sfârșit
Recomandat:
MATLAB Easy Face Detection: 4 pași
MATLAB Easy Face Detection: Scopul principal al acestor instructabile este de a arăta cât de ușoară va fi prelucrarea imaginii. Cu ajutorul MATLAB, detectarea și urmărirea feței a fost un domeniu de cercetare important și activ, deci de aceea am să explic cum se poate face cu
Cum să codificați și să publicați Matlab 2016b în Word (Ghid pentru începători): 4 pași
Cum se codifică și se publică Matlab 2016b în Word (Ghid pentru începători): Matlab este un program de limbaj performant care este utilizat pentru a calcula rezultatele tehnice. Are capacitatea de a integra imagini, calcule și programare într-un mod ușor de utilizat. Cu acest program, utilizatorul poate publica probleme și soluții
Controlul Raspberry Pi folosind Matlab: 5 pași
Controlul Raspberry Pi folosind Matlab: Hei, acest tutorial este despre controlul pi zmeurii fără cap folosind matlab. S-ar putea să trebuiască să instalați matlab la cea mai recentă versiune pentru asistență pentru placa mai nouă de raspberry pi
Controler robotizat ROS bazat pe Matlab: 9 pași
Controler robotizat ROS bazat pe Matlab: De când eram copil, am visat întotdeauna să fiu Iron Man și încă o fac. Iron Man este unul dintre acele personaje care este posibil în mod realist și pur și simplu spun că aspir să devin Iron Man cândva chiar dacă oamenii râd de mine sau spun că este imposibil
Îmbunătățiri de programare a trenurilor în MATLAB: 6 pași
Îmbunătățiri de programare a trenurilor în MATLAB: Obiectiv: Scopul acestui sistem programat este de a privi la o scară mică Arduino și de a aplica codificarea pe o scară mai mare pentru a spori potențial anumite caracteristici de siguranță ale sistemelor feroviare Amtrak. Pentru a face acest lucru, am adăugat o umiditate a solului sen