Satura rādītājs:
- 1. darbība: 1. darbība: attēla ielāde
- 2. darbība: 2. darbība: trokšņa filtrēšana un histogramma
- 3. darbība: 3. darbība: sliekšņu iestatīšana
- 4. darbība. GUI izveide
- 5. darbība: video demonstrācija
Video: MatLab plaušu segmentācija: 5 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:51
Autors: Phuc Lam, Paul Yeung, Eric Reyes
Atzīstot, ka kļūdas plaušu segmentācijā sniegs nepatiesu informāciju par slimības apgabala noteikšanu un var tieši ietekmēt diagnostikas procesu. Mūsdienu datoru palīdzības metodes nesniedza precīzus rezultātus, ja plaušu slimībām ir izaicinošas formas. Šīs neparastās formas var izraisīt pleiras izsvīdumi, konsolidācijas utt. Izmantojot plaušu segmentācijas paņēmienu, kurā plaušu robežas ir izolētas no apkārtējiem krūšu kurvja audiem, mūsu lietotne var noteikt robežas ar lietotāja ievades sliekšņiem, lai iegūtu pilnībā pielāgojamus skatus plaušu formas, Šī MatLab projekta mērķis ir izveidot lietotājam draudzīgu interaktīvu plaušu segmentācijas lietotni, lai noteiktu plaušu rentgena attēlu patoloģiskos apstākļus. Mūsu mērķis ir radīt efektīvāku veidu, kā ilustrēt un identificēt patoloģiskas plaušas, lai sniegtu ārstiem un radiologiem ticamāku veidu plaušu slimību diagnosticēšanai. Izmantojot lietotņu noformētāja rīku MatLab, programma ir izstrādāta, lai darbotos īpaši ar krūšu kurvja rentgena un datortomogrāfijas (CT) skenēšanu, taču tā tiek pārbaudīta arī darbam ar MRI skenēšanu.
Turpmākajos norādījumos ir iekļauta mūsu trokšņu filtrēšanas tehnika (zemas caurlaidības Vīnera filtrs), kā arī attēla slieksnis (izmantojot pelēktoņu attēla intensitātes histogrammu) un izmantojot morfoloģisko gradientu (atšķirība starp attēla paplašināšanos un eroziju). noteikt interesējošo reģionu. Pēc tam instrukcija izskaidros, kā mēs integrējam visus elementus grafiskajā lietotāja saskarnē (GUI).
Piezīme:
1). Šo projektu iedvesmojis pētnieciskais raksts: "Nenormālu plaušu segmentācija un attēlu analīze pie CT: pašreizējās pieejas, izaicinājumi un nākotnes tendences". Ar ko var iepazīties šeit
2). Mēs izmantojam NIH: klīniskā centra rentgena attēlus. Saite atrodama šeit
3). Lietotņu dizainera palīdzību var atrast šeit
4). Pirms koda palaišanas: jums ir jāmaina Dir ceļš (34. rindā) uz jūsu failu direktoriju un attēla veidu (35. rinda) (mēs analizējam *.png).
1. darbība: 1. darbība: attēla ielāde
Šis solis parādīs sākotnējo attēlu pelēkā skalā. Mainiet “name_of_picture.png” uz sava attēla nosaukumu
skaidrs; clc; aizvērt visu;
%% tiek ielādēti attēli
raw_x_ray = 'attēla nosaukums.png';
I = imread (raw_x_ray);
attēls (101);
imshow (I);
krāsu karte (pelēka);
nosaukums ('Pelēktoņu rentgena starojums');
2. darbība: 2. darbība: trokšņa filtrēšana un histogramma
Lai atrastu pelēkās skalas attēla slieksni, mēs skatāmies uz histogrammu, lai noskaidrotu, vai ir atšķirīgi režīmi. Vairāk lasi šeit
I = wiener2 (I, [5 5]);
skaitlis (102);
apakšplāksne (2, 1, 1);
imshow (I);
apakšplāksne (2, 1, 2);
imists (I, 256);
3. darbība: 3. darbība: sliekšņu iestatīšana
Šis solis ļauj iestatīt slieksni atbilstoši histogrammai. morfoloģiskais gradients iezīmēs interesējošo reģionu sarkanā krāsā, un funkcija visboundaries pārklāj ieskicēto un filtrēto plaušu attēlu sarkanā krāsā.
Izmantojot regionprops, mēs varam precizēt stabilitātes masīvus un sakārtot tos dilstošā secībā. Tālāk es binarizēju pelēko skleja attēlu un izmantoju morfoloģiskā gradienta metodi un mLoren Shurasking, lai izceltu interesējošo reģionu (ROI). Nākamais solis ir apgriezt attēlu, lai melnajā fonā plaušu ROI būtu balta. Es izmantoju funkciju showMaskAsOverlay, lai parādītu 2 maskas. Piezīme: kodu iedvesmojusi Lorena Šure, saite.
Lasly, es izveidoju sarkanu kontūru, izmantojot bwbwboundaries un maskējot filtra attēlu un robežas.
a_thresh = I> = 172; % noteica šo slieksni
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekvizīti = regionprops (a_thresh, 'all');
sortedSolidity = kārtot ([props. Solidity], 'nolaisties');
SB = sortedSolidity (1);
ja SB == 1 % SB pieņem tikai stingrību == 1 filtrē kaulus
binaryImage = imbinarize (I); skaitlis (103);
imshow (binaryImage); krāsu karte (pelēka);
SE = strel ('kvadrāts', 3);
morfoloģiskais gradients = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
maska = imbinarize (morfoloģiskais gradients, 0,03);
SE = strel ('kvadrāts', 2);
maska = ielikt (maska, SE);
maska = imfill (maska, 'caurumi');
maska = bwareafilt (maska, 2); % kontroles skaits apgabalā parādīt
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0,5, maska, 'r'); % jums ir jālejupielādē lietotne/funkcija showMaskAsOverlay
BW2 = imfill (binaryImage, 'caurumi');
jauns_attēls = BW2;
jauns_attēls (~ maska) = 0; % apgriezts fons un caurumi
B = robežas (jauns_attēls); % var pieņemt tikai 2 kategorijas
skaitlis (104);
imshow (jauns_attēls);
uzgaidi
robežas (B);
beigas
4. darbība. GUI izveide
Tagad mēs integrējam iepriekšējo kodu MATLAB lietotnē. Atveriet lietotņu noformētāju MATLAB (jauna> lietotne). Pirmkārt, mēs izstrādājam saskarni, turot nospiestu un trīs asis ievelkot centrālajā darba telpā. Tālāk mēs noklikšķiniet un turiet un velciet divas pogas, vienu rediģēšanas lauku (teksts), vienu rediģēšanas lauku (ciparu), vienu slīdni un vienu nolaižamo izvēlni. Katra no divām asīm parādīs priekšskatījumu un analizēja attēlu, bet trešās asis parādīs priekšskatījuma “atlasītā” attēla pikseļu histogrammu. Rediģēšanas lauka (teksta) lodziņā tiks parādīts atlasītā attēla faila ceļš, bet rediģēšanas laukā (skaitliskais) tiks parādīts plaušu noteiktais pikseļu laukums.
Tagad lietotņu noformētājā pārejiet no dizaina skata uz koda skatu. Ievadiet koda īpašumu kodu, noklikšķinot uz sarkanās pogas “Rekvizīti” ar pluszīmi. Inicializējiet rekvizītus I, slieksni un reģionusToExtract, kā norādīts tālāk norādītajā kodā. Pēc tam ar peles labo pogu noklikšķiniet uz pogas darbvietas augšējā labajā pusē (komponentu pārlūkprogramma) un pārejiet no atzvanīšanas> Atvērt atzvanīšanu. Pievienojiet kodu funkcijai SelectImageButtonPushed (lietotne, notikums). Šis kods ļauj atlasīt attēlu, ko analizēt no datora, izmantojot uigetfile. Pēc attēla izvēles zem asīm parādīsies priekšskatījuma attēls kopā ar histogrammu. Pēc tam ar peles labo pogu noklikšķiniet uz citas pogas un atkārtojiet to pašu procedūru, lai izveidotu atzvanīšanas funkciju.
Pievienojiet kodu zem funkcijas “AnalyzeImageButtonPushed (lietotne, notikums)”. Šis kods veiks pikseļu skaitīšanu un lāseļu noteikšanu priekšskatījuma attēlā, izmantojot attēla analīzes pogu (neatkarīgi no tā, kuru noklikšķinājāt ar peles labo pogu). Pēc pogu programmēšanas mēs tagad ieprogrammēsim slīdni un nolaižamo izvēlni. Ar peles labo pogu noklikšķiniet uz slīdņa, izveidojiet atzvanīšanas funkciju un līdz beigām pievienojiet kodu zem “function FilterThresholdSliderValueChanged (lietotne, notikums)”. Tas ļauj slīdnim pielāgot pelēkās intensitātes slieksni.
Izveidojiet atzvanīšanas funkciju nolaižamajai izvēlnei un pievienojiet kodu zem “function AreastoExtractDropDownValueChanged (lietotne, notikums)”, lai ļautu nolaižamajai izvēlnei mainīt uz analizēto attēlu asīm parādīto lāsīšu skaitu. Tagad komponentu pārlūkprogrammā noklikšķiniet uz katras entītijas un mainiet to rekvizītus pēc saviem ieskatiem, piemēram, mainiet entītiju nosaukumus, noņemiet asis un mainiet mērogošanu. Velciet un nometiet komponentu pārlūkprogrammas entītijas dizaina skatā uz funkcionālu un viegli saprotamu izkārtojumu. Tagad jums ir MATLAB lietotne, kas var analizēt plaušu attēlus pikseļu laukumam!
rekvizīti (piekļuve = privāta) I = ; % attēla fails
slieksnis = 257; %slieksnis pelēkās intensitātes binarizēšanai
regionalToExtract = 2;
beigas
funkcija SelectImageButtonPushed (lietotne, notikums)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %definēt nemainīgu failu "prefikss"
[imageExt, path] = uigetfile ('*. png'); %satveriet attēla nosaukuma mainīgo daļu
imageName = [Dir filesep imageExt]; %sasaistītie nemainīgie un mainīgie slīpumi
app. I = imread (attēla nosaukums); %lasīja attēlu
imshow (lietotne I, 'vecāks', lietotne. UIAxes); %parāda attēlu
app. FilePathEditField. Value = ceļš; %attēlo faila ceļu, no kurienes radies oriģinālais attēls
beigas
funkcija AnalyzeImageButtonPushed (lietotne, notikums)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); %punktu noņemšanas filtrs
histogramma (app. AxesHistogram, app. I, 256); %parāda attēla histogrammu
a_thresh = originalImage> = app.threshold; % noteica šo slieksni
labelImage = bwlabel (a_thresh);
rekvizīti = regionprops (a_thresh, 'all');
sortedSolidity = kārtot ([props. Solidity], 'nolaisties');
SB = sortedSolidity (1);
ja SB == 1 % SB pieņem tikai stingrību == 1 filtrē kaulus
SE = strel ('kvadrāts', 3);
morfoloģiskais gradients = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maska = imbinarize (morfoloģiskais gradients, 0,03);
SE = strel ('kvadrāts', 2);
maska = ielikt (maska, SE);
maska = imfill (maska, 'caurumi');
maska = bwareafilt (maska, app.regionsToExtract);
% kontroles skaits apgabalā parādīt
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'caurumi');
jauns_attēls = BW2;
jauns_attēls (~ maska) = 0;
B = robežas (jauns_attēls); % var pieņemt tikai 2 kategorijas imshow (new_image, 'parent', app. UIAxes2);
turēt (app. UIAxes2, 'on');
robežas (B);
komplekts (gca, 'YDir', 'reverss');
lungArea = bwarea (jauns_attēls);
app. PixelAreaEditField. Value = lungArea;
beigas
beigas
funkcija FilterThresholdSliderValueChanged (lietotne, notikums)
app.threshold = app. FilterThresholdSlider. Value;
beigas
function AreastoExtractDropDownValueChanged (lietotne, notikums) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
beigas
beigas
Ieteicams:
MATLAB Vienkārša sejas noteikšana: 4 soļi
MATLAB vienkārša sejas noteikšana: šīs pamācības galvenais mērķis ir parādīt, cik viegli būs attēlu apstrāde, Ar MATLAB palīdzību sejas noteikšana un izsekošana ir bijusi svarīga un aktīva pētniecības joma, tāpēc es paskaidrošu kā to var izdarīt ar
Kā kodēt un publicēt Matlab 2016b programmā Word (rokasgrāmata iesācējiem): 4 soļi
Kā kodēt un publicēt Matlab 2016b programmā Word (rokasgrāmata iesācējiem): Matlab ir augstas veiktspējas valodu programma, ko izmanto tehnisko rezultātu aprēķināšanai. Tam ir iespēja lietotājam draudzīgā veidā integrēt vizuālos attēlus, aprēķinus un programmēšanu. Izmantojot šo programmu, lietotājs var publicēt problēmas un risinājumus
Raspberry Pi kontrole, izmantojot Matlab: 5 soļi
Raspberry Pi kontrole, izmantojot Matlab: Hei, šī apmācība ir par aveņu pi bez galvas kontroli, izmantojot matlab. Iespējams, jums būs jāinstalē matlab uz jaunāko versiju, lai atbalstītu jaunāku aveņu pi dēli
Matlab balstīts ROS robotu kontrolieris: 9 soļi
Matlab balstīts ROS robotu kontrolieris: Kopš bērnības es vienmēr esmu sapņojis būt Dzelzs vīrs un joprojām to daru. Dzelzs vīrs ir viens no tiem varoņiem, kas ir reāli iespējams, un vienkārši sakot, es vēlos kādreiz kļūt par dzelzs vīru, pat ja cilvēki par mani smejas vai saka, ka tas nav iespējams
Vilcienu programmēšanas uzlabojumi MATLAB: 6 soļi
Vilcienu programmēšanas uzlabojumi MATLAB: Mērķis: Šīs ieprogrammētās sistēmas mērķis ir aplūkot neliela mēroga Arduino un piemērot kodējumu plašākā mērogā, lai potenciāli uzlabotu noteiktas Amtrak Railroad sistēmu drošības funkcijas. Lai to izdarītu, mēs esam pievienojuši augsnes mitruma sensoru