INHOUDSOPGAWE:
- Stap 1: Stap 1: Laai prent
- Stap 2: Stap 2: Ruisfilter en histogram
- Stap 3: Stap 3: Stel drempels
- Stap 4: Skep GUI
- Stap 5: Videodemo
Video: MatLab -longsegmentasie: 5 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:23
Deur: Phuc Lam, Paul Yeung, Eric Reyes
As u erken dat foute in die segmentering van die longe vals inligting sal oplewer rakende die identifisering van 'n siektegebied, en dit kan die diagnose proses direk beïnvloed. Moderne rekenaarhulptegnieke het nie akkurate resultate gelewer as longsiektes uitdagende vorms het nie. Hierdie abnormale vorms kan veroorsaak word deur pleurale effusies, konsolidasies, ens. Deur die longsegmentasietegniek toe te pas, waarin die grense van die long van die omliggende torakale weefsel geïsoleer word, kan ons app die grense identifiseer met die invoerdrempels van die gebruiker om volledig aanpasbare aansigte te gee van die vorms van die longe, Die doel van hierdie MatLab-projek is om 'n gebruikersvriendelike interaktiewe longsegmentasie-app te skep om patologiese toestande van die longe se X-straalbeelde op te spoor. Ons doel is om 'n meer effektiewe manier te skep om abnormale longe te illustreer en te identifiseer om dokters en radioloë 'n meer betroubare manier te gee om longsiektes te diagnoseer. Met behulp van die app-ontwerperhulpmiddel in MatLab, is die program ontwerp om spesifiek te werk met borskas-röntgen- en rekenaartomografie (CT) -skanderings, maar dit word ook getoets om met MRI-skanderings te werk.
Die onderstaande instruksies bevat ons ruisfiltreringstegniek (lae-pas Wiener-filter), sowel as die beelddrempel (deur die intensiteitshistogram van die grysskaalbeeld te gebruik) en 'n morfologiese gradiënt (die verskil tussen die verwyding en die erosie van 'n beeld) tot 'n belangegebied identifiseer. Die instruksie sal dan verduidelik hoe ons al die elemente in die grafiese gebruikerskoppelvlak (GUI) integreer.
Let wel:
1). Hierdie projek is geïnspireer deur 'n navorsingsartikel: "Segmentasie en beeldanalise van abnormale longe by CT: huidige benaderings, uitdagings en toekomstige tendense". Wat hier gevind kan word
2). Ons gebruik röntgenfoto's van NIH: Clinical Center. Die skakel kan hier gevind word
3). Appontwerperhulp kan hier gevind word
4). Voordat u die kode gebruik: moet u die Dir -pad (in reël 34) verander na u lêergids en tipe prent (reël 35) (ons ontleed *.png).
Stap 1: Stap 1: Laai prent
Hierdie stap wys u die oorspronklike prentjie in grys skaal. Verander die 'name_of_picture.png' na u prentnaam
duidelik; clc; sluit almal;
%% Laai prente
raw_x_ray = 'name_of_picture.png';
I = lees (raw_x_ray);
figuur (101);
imshow (I);
kleurkaart (grys);
titel ('Grysskaal X-straal');
Stap 2: Stap 2: Ruisfilter en histogram
Om die drumpel vir die grysskaalbeeld te vind, kyk ons na die histogram om te sien of daar verskillende modi is. Lees meer hier
I = wiener2 (I, [5 5]);
figuur (102);
subplot (2, 1, 1);
imshow (I);
subplot (2, 1, 2);
imhisties (I, 256);
Stap 3: Stap 3: Stel drempels
Met hierdie stap kan u die drempel volgens die histogram stel. morfologiesGradient sal die gebied van belangstelling in rooi beklemtoon, en die funksie oor grense lê die omlynde en gefiltreerde beeld van die long in rooi.
Deur regionprops te gebruik, kan ons die matrieke van soliditeit bepaal en dit in dalende volgorde sorteer. Vervolgens binariseer ek die grys skelbeeld en pas die morflogiese gradiëntmetode en mLoren Shurasking toe om die belangstelling (ROI) uit te lig. Die volgende stap is om die beeld om te keer sodat die long -ROI wit is op die swart agtergrond. Ek gebruik die funksie showMaskAsOverlay om 2 masker te vertoon. Let wel: die kode is geïnspireer deur Loren Shure, link.
Lasly, ek skep 'n rooi omtrek deur die bwbw -grense te gebruik en die filterbeeld en die grense te verberg.
a_driek = I> = 172; % stel hierdie drempel
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekwisiete = regionprops (a_thresh, 'alles');
sortedSolidity = sort ([props. Solidity], 'daal');
SB = sortedSolidity (1);
as SB == 1 % SB slegs soliditeit aanvaar == 1 filter bene uit
binaryImage = imbinarize (I); figuur (103);
imshow (binaryImage); kleurkaart (grys);
SE = strel ('square', 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
masker = imbinariseer (morphologicalGradient, 0.03);
SE = strel ('square', 2);
masker = sluit (masker, SE);
masker = invul (masker, 'gate');
masker = bwareafilt (masker, 2); % kontrole getal gebied toon
notMask = ~ masker;
masker = masker | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0.5, masker, 'r'); % u moet die program/funksie showMaskAsOverlay aflaai
BW2 = imfill (binaryImage, 'gate');
nuwe_beeld = BW2;
nuwe_beeld (~ masker) = 0; % keer agtergrond en gate om
B = bwgrense (nuwe_beeld); % kan slegs 2 dimensies aanvaar
figuur (104);
imshow (nuwe_beeld);
hou vas
grensgrense (B);
einde
Stap 4: Skep GUI
Nou integreer ons die vorige kode in 'n MATLAB -app. Maak die App Designer oop in MATLAB (Nuut> App). Eerstens ontwerp ons die koppelvlak deur te klik-hou-in en in drie asse na die middelste werkruimte te sleep. Vervolgens klik en hou ons twee knoppies, een wysigingsveld (teks), een wysigingsveld (numeries), een skuifbalk en een keuselys. Twee asse sal elkeen die voorskou vertoon en die prent ontleed, en die derde as sal 'n histogram van pixels vir die voorgeskrewe "geselekteerde" beeld vertoon. Die wysigingsveld (teks) boks sal die lêerpad van die geselekteerde prent vertoon, en die wysigingsveld (numeries) sal die gedetailleerde pixelarea van die longe vertoon.
Skakel nou van ontwerpweergawe na kode -aansig in App Designer. Tik die kode vir eiendomme in die kode deur op die rooi "Eienskappe" -knoppie te klik met 'n plusteken daarby. Initialiseer die eienskappe I, drempel en regionsToExtract soos in die kode hieronder verskaf. Klik dan met die rechtermuisknop op 'n knoppie regs bo in die werkruimte (die komponentblaaier) en gaan na Terugbel> Gaan na … terugbel. Voeg die kode by vir "funksie SelectImageButtonPushed (app, gebeurtenis)." Met hierdie kode kan u 'n prent kies om van u rekenaar te ontleed met uigetfile. Nadat u 'n prent gekies het, verskyn 'n voorskoubeeld onder die asse vergesel van 'n histogram. Klik dan met die rechtermuisknop op die ander knoppie en herhaal dieselfde prosedure om 'n terugbelfunksie te skep.
Voeg die kode in onder "funksie AnalyzeImageButtonPushed (app, gebeurtenis)." Hierdie kode sal die pixeltelling en blob-opsporing op die voorskou-prent uitvoer op die analise-beeldknoppie (watter een u ook met die rechtermuisknop vir hierdie kode geklik het). Nadat ons die knoppies geprogrammeer het, programmeer ons nou die skuifbalk en die keuselys. Klik met die rechtermuisknop op die skuifbalk, skep 'n terugbelfunksie en voeg die kode in onder "funksie FilterThresholdSliderValueChanged (app, gebeurtenis)" tot die einde. Hierdeur kan die skuifbalk die grysintensiteitsdrempel aanpas.
Skep 'n terugbelfunksie vir die keuselys en voeg die kode by onder "funksie AreastoExtractDropDownValueChanged (app, gebeurtenis)" sodat die keuselys die aantal blobs wat op die geanaliseerde beeldas vertoon word, kan verander. Klik nou op elke entiteit in die komponentblaaier en verander hul eienskappe na u smaak, soos om die name van die entiteite te verander, asse te verwyder en die skaal te verander. Sleep die entiteite van die komponentblaaier in die ontwerpaansig na 'n funksionele en maklik verstaanbare uitleg. U het nou 'n app in MATLAB wat beelde van die longe vir die pixelarea kan ontleed!
eiendomme (Toegang = privaat) I = ; % prentlêer
drempel = 257; %drempel vir die binarisering van grys intensiteit
regionsToExtract = 2;
einde
funksie SelectImageButtonPushed (app, gebeurtenis)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %definieer onveranderlike lêer "voorvoegsel"
[imageExt, pad] = uigetfile ('*. png'); %gryp die veranderlike deel van die prentnaam aan
imageName = [Dir filesep imageExt]; %verbind onveranderlike en veranderlike snare
app. I = imread (imageName); %het die prent gelees
imshow (app. I, 'ouer', app. UIAxes); %vertoon die beeld
app. FilePathEditField. Value = pad; %vertoonlêerpad van waar die oorspronklike prent vandaan kom
einde
funksie AnalyzeImageButtonPushed (app, gebeurtenis)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); %puntverwyderingsfilter
histogram (app. AxesHistogram, app. I, 256); %vertoon histogram van beeld
a_thresh = originalImage> = app.drempel; % stel hierdie drempel
labelImage = bwlabel (a_thresh);
rekwisiete = regionprops (a_thresh, 'alles');
sortedSolidity = sort ([props. Solidity], 'daal');
SB = sortedSolidity (1);
as SB == 1 % SB slegs soliditeit aanvaar == 1 filter bene uit
SE = strel ('square', 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
masker = imbinariseer (morphologicalGradient, 0.03);
SE = strel ('square', 2);
masker = sluit (masker, SE);
masker = invul (masker, 'gate');
masker = bwareafilt (masker, app.regionsToExtract);
% kontrole getal gebied toon
notMask = ~ masker;
masker = masker | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'gate');
nuwe_beeld = BW2;
nuwe_beeld (~ masker) = 0;
B = bwgrense (nuwe_beeld); % kan slegs 2 dimensies imshow (new_image, 'ouer', app. UIAxes2) aanvaar;
hou (app. UIAxes2, 'aan');
grensgrense (B);
stel (gca, 'YDir', 'reverse');
longArea = bwarea (new_image);
app. PixelAreaEditField. Value = lungArea;
einde
einde
funksie FilterThresholdSliderValueChanged (app, gebeurtenis)
app.threshold = app. FilterThresholdSlider. Value;
einde
funksie AreastoExtractDropDownValueChanged (app, event) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
einde
einde
Aanbeveel:
MATLAB Maklike gesigsopsporing: 4 stappe
MATLAB Easy Face Detection: Die hoofdoel van hierdie instruksies is om aan te toon hoe maklik die beeldverwerking sal wees. Met behulp van MATLABFace -opsporing en -opsporing was 'n belangrike en aktiewe navorsingsveld, so daarom gaan ek verduidelik hoe dit gedoen kan word
Hoe u Matlab 2016b na Word kan kodeer en publiseer (beginnersgids): 4 stappe
Hoe om Matlab 2016b na Word te kodeer en te publiseer (Beginnersgids): Matlab is 'n hoëprestasie-taalprogram wat gebruik word om tegniese resultate te bereken. Dit het die vermoë om beeldmateriaal, berekeninge en programmering op 'n gebruikersvriendelike manier te integreer. Met hierdie program kan die gebruiker probleme en oplossings publiseer
Beheer Raspberry Pi met behulp van Matlab: 5 stappe
Beheer Raspberry Pi met behulp van Matlab: Hey, hierdie tutoriaal handel oor die beheer van jou koplose framboos pi met behulp van matlab. Miskien moet u matlab in die nuutste weergawe installeer vir ondersteuning vir 'n nuwer framboos -pi -bord
Matlab-gebaseerde ROS Robotic Controller: 9 stappe
ROS-robotbeheerder in Matlab: Sedert ek 'n kind was, het ek nog altyd daarvan gedroom om Iron Man te wees en doen dit steeds. Iron Man is een van die karakters wat realisties moontlik is, en ek wil eenvoudig eendag Iron Man word, selfs al lag mense vir my of sê dit is onmoontlik
Verbeterings vir opleidingsprogramme in MATLAB: 6 stappe
Treinprogrammeringsverbeterings in MATLAB: Doelstelling: Die doel van hierdie geprogrammeerde stelsel is om na 'n klein skaal Arduino te kyk en die kodering op 'n groter skaal toe te pas om sekere veiligheidskenmerke van Amtrak Railroad -stelsels moontlik te verbeter. Om dit te kan doen, het ons 'n grondvogstelsel bygevoeg