Përmbajtje:

Segmentimi i mushkërive MatLab: 5 hapa
Segmentimi i mushkërive MatLab: 5 hapa

Video: Segmentimi i mushkërive MatLab: 5 hapa

Video: Segmentimi i mushkërive MatLab: 5 hapa
Video: Meet the heart! | Circulatory system physiology | NCLEX-RN | Khan Academy 2024, Nëntor
Anonim
Segmentimi i mushkërive MatLab
Segmentimi i mushkërive MatLab

Nga: Phuc Lam, Paul Yeung, Eric Reyes

Duke pranuar se gabimet në segmentimin e mushkërive do të prodhojnë informacion të rremë në lidhje me identifikimin e një zone të sëmundjes dhe mund të ndikojnë drejtpërdrejt në procesin e diagnostikimit. Teknikat moderne të ndihmës kompjuterike nuk arritën të japin rezultate të sakta kur sëmundjet e mushkërive kanë forma sfiduese. Këto forma jonormale mund të shkaktohen nga efuzionet pleurale, konsolidimet, etj. Duke aplikuar teknikën e segmentimit të mushkërive, në të cilën kufijtë e mushkërive janë të izoluar nga indi torakal përreth, aplikacioni ynë mund të identifikojë kufijtë me pragjet hyrëse të përdoruesit për të dhënë pamje plotësisht të personalizueshme të formave të mushkërive, Qëllimi i këtij projekti MatLab është krijimi i një aplikacioni për ndarjen e mushkërive miqësore për përdoruesit për të zbuluar kushtet patologjike të imazheve me rreze X të mushkërive. Qëllimi ynë është të krijojmë një mënyrë më efektive për të ilustruar dhe identifikuar mushkëritë anormale në mënyrë që t'u japim mjekëve dhe radiologëve një mënyrë më të besueshme për të diagnostikuar sëmundjet e mushkërive. Duke përdorur mjetin e projektuesit të aplikacioneve në MatLab, programi është krijuar për të punuar posaçërisht me skanime të rrezeve të gjoksit dhe tomografi kompjuterike (CT), por gjithashtu është testuar për të punuar me skanimet MRI.

Udhëzimet më poshtë përmbajnë teknikën tonë të filtrimit të zhurmës (filtri Wiener me kalim të ulët) si dhe pragun e imazhit (duke përdorur histogramin e intensitetit të imazhit të ngjyrës gri) dhe duke përdorur një gradient morfologjik (ndryshimi midis zgjerimit dhe erozionit të një imazhi) identifikoni një zonë me interes. Udhëzimi do të shpjegojë më pas se si i integrojmë të gjithë elementët në ndërfaqen grafike të përdoruesit (GUI).

Shënim:

1) Ky projekt është frymëzuar nga një punim kërkimor: "Segmentimi dhe analiza e imazhit të mushkërive jonormale në CT: Qasjet aktuale, sfidat dhe tendencat e ardhshme". Të cilat mund të gjenden këtu

2). Ne po përdorim imazhe me rreze X nga NIH: Qendra Klinike. Linkun mund ta gjeni këtu

3). Ndihma e projektuesit të aplikacioneve mund të gjendet këtu

4). Para se të ekzekutoni kodin: duhet të ndryshoni shtegun Dir (në rreshtin 34) në drejtorinë e skedarit tuaj dhe llojin e imazhit (rreshti 35) (ne po analizojmë *.png).

Hapi 1: Hapi 1: Ngarkimi i imazhit

Hapi 1: Ngarkimi i imazhit
Hapi 1: Ngarkimi i imazhit

Ky hap do t'ju tregojë foton origjinale në shkallë gri. Ndryshoni 'name_of_picture.png' në emrin e imazhit tuaj

qartë; clc; mbyll të gjitha;

%% Po ngarkon imazhe

raw_x_ray = 'name_of_picture.png';

I = i palexuar (papërpunuar_x_ray);

figura (101);

imshow (I);

kolore (gri);

titulli ('X-Ray' i shkallës së gri ');

Hapi 2: Hapi 2: Filtrimi i zhurmës dhe Histogrami

Hapi 2: Filtrimi i zhurmës dhe Histogrami
Hapi 2: Filtrimi i zhurmës dhe Histogrami

Në mënyrë që të gjejmë pragun për imazhin e shkallës gri, ne shikojmë histogramin për të parë nëse një mënyrë e veçantë funksionon. Lexoni më shumë këtu

I = wiener2 (I, [5 5]);

figura (102);

nënplot (2, 1, 1);

imshow (I);

nënplot (2, 1, 2);

imhist (I, 256);

Hapi 3: Hapi 3: Vendosja e Pragëve

Hapi 3: Vendosja e Pragëve
Hapi 3: Vendosja e Pragëve
Hapi 3: Vendosja e Pragëve
Hapi 3: Vendosja e Pragëve

Ky hap ju lejon të vendosni pragun sipas histogramit. morfologjikeGradient do të nxjerrë në pah rajonin me interes në të kuqe, dhe funksioni visboundaries mbulon imazhin e përshkruar dhe të filtruar të mushkërive me të kuqe.

Duke përdorur rajonprops, ne mund të përcaktojmë vargjet e ngurtësisë dhe t'i rendisim ato në zbritje. Tjetra unë binarizoj imazhin gri të sklave dhe aplikoj metodën e gradientit morfologjik dhe mLoren Shurasking për të nxjerrë në pah rajonin e interesit (ROI). Hapi tjetër është përmbysja e imazhit në mënyrë që ROI i mushkërive të jetë i bardhë në sfond të zi. Unë përdor funksionin showMaskAsOverlay për të shfaqur 2 maska. Shënim: kodi është frymëzuar nga Loren Shure, lidhja.

Lasly, unë krijoj një skicë të kuqe duke përdorur kufijtë bwbwb duke maskuar imazhin e filtrit dhe kufijtë.

a_thresh = I> = 172; % e caktoi këtë prag

[labelImage, numberOfBlobs] = bwlabel (a_thresh);

props = regionprops (a_thresh, 'all');

sortedSolidity = renditje ([props. Solidity], 'zbritje');

SB = renditurSoliditeti (1);

nëse SB == 1 % SB pranon vetëm ngurtësinë == 1 filtro kockat

binaryImage = imbinarizoj (I); figura (103);

imshow (binareImage); kolore (gri);

SE = strel ('katror', 3);

morfologjikeGradient = nuk zbres (imdilate (binareImage, SE), imerode (binareImage, SE));

maskë = imbinarizoj (morfologjikeGradient, 0.03);

SE = strel ('katror', 2);

maskë = mbyll (maskë, SE);

maskë = mbush (maskë, 'vrima');

maskë = bwareafilt (maskë, 2); % e numrit të kontrollit të shfaqjes së zonës

notMask = ~ maskë;

maskë = maskë | bwpropfilt (joMaska, 'Zona', [-Inf, 5000 - eps (5000)]);

showMaskAsOverlay (0.5, maskë, 'r'); % ju duhet të shkarkoni aplikacionin/funksionin showMaskAsOverlay

BW2 = mbushje (binareImage, 'vrima');

imazh i ri = BW2;

imazh i ri (~ maskë) = 0; % përmbys sfondin dhe vrimat

B = kufijtë (imazhi i ri); % mund të pranojë vetëm 2 dimensione

figura (104);

imshow (imazhi i ri);

prit

visboundaries (B);

fund

Hapi 4: Krijimi i GUI

Tani, ne integrojmë kodin paraprak në një aplikacion MATLAB. Hapni Projektuesin e Aplikacioneve në MATLAB (E Re> Aplikacioni). Së pari, ne hartojmë ndërfaqen duke mbajtur-mbajtur dhe klikuar në tre akse në hapësirën qendrore të punës. Tjetra, ne klikojmë-mbajmë-tërhiqim dy butona, një fushë redaktimi (tekst), një fushë redaktimi (numerike), një rrëshqitës dhe një menu zbritëse. Dy akse do të shfaqin secilën pamje paraprake dhe analizojnë imazhin, dhe akset e treta do të shfaqin një histogram pikselësh për imazhin e parë të "zgjedhur". Kutia e fushës së redaktimit (tekstit) do të shfaqë rrugën e skedarit të figurës së zgjedhur dhe fusha e redaktimit (numerike) do të shfaqë zonën e pikselëve të zbuluar të mushkërive.

Tani kaloni nga pamja e projektimit në pamjen e kodit në Projektuesi i Aplikacioneve. Vendosni në kod kodin për pronat duke klikuar butonin e kuq "Properties" me një shenjë plus nga ai. Iniconi vetitë I, pragu dhe rajoneToExtract si në kodin e dhënë më poshtë. Tjetra, klikoni me të djathtën mbi një buton në anën e sipërme të djathtë të hapësirës së punës (Shfletuesi i Komponentit) dhe shkoni nga Thirrjet> Shko te … Kthimi i thirrjes. Shtoni kodin për "funksionin SelectImageButtonPushed (aplikacion, ngjarje)". Ky kod ju lejon të zgjidhni një imazh për ta analizuar nga kompjuteri juaj duke përdorur uigetfile. Pas zgjedhjes së një imazhi, një imazh paraprak do të shfaqet nën akset e shoqëruar me një histogram. Pastaj, kliko me të djathtën në butonin tjetër dhe përsërit të njëjtën procedurë për të krijuar një funksion të kthimit të thirrjes.

Shtoni kodin nën "funksionin AnalyzeImageButtonPushed (aplikacion, ngjarje)". Ky kod do të kryejë numërimin e pikselëve dhe zbulimin e pikave në imazhin e shikimit paraprakisht mbi butonin e imazhit të analizuar (cilindo që keni klikuar me të djathtën për këtë kod). Pas programimit të butonave, tani do të programojmë rrëshqitësin dhe menunë zbritëse. Klikoni me të djathtën në rrëshqitësin, krijoni një funksion të thirrjes dhe shtoni kodin nën "funksionin FilterThresholdSliderValueChanged (aplikacion, ngjarje)" deri në fund. Kjo lejon që rrëshqitësi të rregullojë pragun e intensitetit gri.

Krijoni një funksion thirrje për menunë zbritëse dhe shtoni kodin nën "funksionin AreastoExtractDropDownValueChanged (aplikacion, ngjarje)" për të lejuar menunë zbritëse të modifikojë numrin e pikave të shfaqura në akset e imazhit të analizuar. Tani, klikoni çdo entitet në Shfletuesin Komponent dhe ndryshoni vetitë e tyre sipas dëshirës tuaj, të tilla si ndryshimi i emrave të entiteteve, heqja e akseve dhe ndryshimi i shkallëzimit. Zvarritni dhe lëshoni njësitë e Shfletuesit të Komponentit në Pamjen e Dizajnit në një paraqitje funksionale dhe të kuptueshme. Tani keni një aplikacion në MATLAB që mund të analizojë imazhet e mushkërive për zonën e pikselëve!

vetitë (Qasja = private) I = ; % skedar imazhi

pragu = 257; %pragu për binarizimin e intensitetit gri

rajoneToExtract = 2;

fund

funksioni SelectImageButtonPushed (aplikacion, ngjarje)

clc; Dir = 'C: / Users / danie / Shkarkime / images_004 / images'; %define skedarin e pandryshueshëm "parashtesë"

[imageExt, shtegu] = uigetfile ('*. png'); %kap pjesën e ndryshueshme të emrit të figurës

emri i imazhit = [Dir filesep imageExt]; %të lidhura vargjet e pandryshueshme dhe të ndryshueshme

app. I = imread (Emri i imazhit); %lexoni imazhin

imshow (aplikacioni I., 'prindi', aplikacioni. UIAxes); %shfaq imazhin

app. FilePathEditField. Value = shteg; %shfaq rrugën e skedarit se nga ka ardhur imazhi origjinal

fund

funksioni AnalyzeImageButtonPushed (aplikacion, ngjarje)

origjinalImage = app. I;

originalImage = wiener2 (app. I, [5 5]); %filtër për heqjen e pikave

histogram (app. AxesHistogram, app. I, 256); %shfaqja e histogramit të figurës

a_thresh = Imazhi origjinal> = app.th pragu; % e caktoi këtë prag

labelImage = bwlabel (a_thresh);

props = regionprops (a_thresh, 'all');

sortedSolidity = renditje ([props. Solidity], 'zbritje');

SB = renditurSoliditeti (1);

nëse SB == 1 % SB pranon vetëm ngurtësinë == 1 filtro kockat

SE = strel ('katror', 3);

morfologjikeGradient = nuk zbres (imdilate (labelImage, SE), imerode (labelImage, SE));

maskë = imbinarizoj (morfologjikeGradient, 0.03);

SE = strel ('katror', 2);

maskë = mbyll (maskë, SE);

maskë = mbush (maskë, 'vrima');

maskë = bwareafilt (maskë, app.regionsToExtract);

% e numrit të kontrollit të shfaqjes së zonës

notMask = ~ maskë;

maskë = maskë | bwpropfilt (joMaska, 'Zona', [-Inf, 5000 - eps (5000)]);

BW2 = mbushje (labelImage, 'vrima');

imazh i ri = BW2;

imazh i ri (~ maskë) = 0;

B = kufijtë (imazhi i ri); % mund të pranojë vetëm 2 dimensione imshow (new_image, 'prind', app. UIAxes2);

mbaj (app. UIAxes2, 'on');

visboundaries (B);

vendosur (gca, 'YDir', 'anasjelltas');

lungArea = bwarea (imazh i ri);

app. PixelAreaEditField. Value = lungArea;

fund

fund

funksioni FilterThresholdSliderValueChanged (aplikacion, ngjarje)

app.threshold = app. FilterThresholdSlider. Value;

fund

funksioni AreastoExtractDropDownValueChanged (aplikacion, ngjarje) stringNumber = app. AreastoExtractDropDown. Value;

app.regionsToExtract = str2double (stringNumber);

fund

fund

Recommended: