Բովանդակություն:

MatLab թոքերի հատվածավորում. 5 քայլ
MatLab թոքերի հատվածավորում. 5 քայլ

Video: MatLab թոքերի հատվածավորում. 5 քայլ

Video: MatLab թոքերի հատվածավորում. 5 քայլ
Video: What Are The Symptoms of Tuberculosis (TB) I World TB Day I OnlyMyHealth 2024, Հունիսի
Anonim
MatLab թոքերի հատվածավորում
MatLab թոքերի հատվածավորում

Հեղինակ ՝ Ֆուկ Լամ, Պոլ Յոնգ, Էրիկ Ռեյես

Ընդունելով, որ թոքերի հատվածավորման սխալները կստեղծեն կեղծ տեղեկություններ հիվանդության տարածքի նույնականացման վերաբերյալ և կարող են ուղղակիորեն ազդել ախտորոշման գործընթացի վրա: Համակարգչային օգնության ժամանակակից տեխնիկան չկարողացավ ճշգրիտ արդյունքներ տալ այն դեպքում, երբ թոքերի հիվանդությունները ունեն բարդ ձևեր: Այս աննորմալ ձևերը կարող են առաջանալ պլևարային էֆուզիայի, կոնսոլիդացիայի և այլնի միջոցով: Թոքերի հատվածավորման տեխնիկայի կիրառմամբ, որով թոքերի սահմանները մեկուսացված են շրջապատող կրծքավանդակի հյուսվածքից, մեր ծրագիրը կարող է սահմանել օգտագործողի մուտքի շեմերը `լիովին հարմարեցնող տեսարաններ տալու համար: թոքերի ձևերը, Այս MatLab նախագծի նպատակն է ստեղծել թոքերի սեգմենտավորման ինտերակտիվ ծրագիր, որը թույլ կտա հայտնաբերել թոքերի ռենտգեն պատկերների պաթոլոգիական պայմանները: Մեր նպատակն է ստեղծել թոքերի աննորմալ նկարազարդման և բացահայտման ավելի արդյունավետ միջոց, որպեսզի բժիշկներին և ճառագայթաբաններին տրվի թոքերի հիվանդությունները ախտորոշելու ավելի հուսալի միջոց: Օգտագործելով հավելվածների դիզայներական գործիքը MatLab- ում ՝ ծրագիրը նախատեսված է հատուկ կրծքավանդակի ռենտգեն և համակարգչային տոմոգրաֆիա (ՀՏ) սկաների հետ աշխատելու համար, սակայն փորձարկվում է նաև ՄՌՏ սկաներով աշխատելու համար:

Ստորև բերված հրահանգները պարունակում են աղմուկի զտման մեր տեխնիկան (ցածր անցումային Wiener զտիչ), ինչպես նաև պատկերի շեմը (օգտագործելով մոխրագույն մասշտաբի պատկերի ինտենսիվության հիստոգրամը) և մորֆոլոգիական գրադիենտ (պատկերի ընդլայնման և էրոզիայի միջև տարբերությունը) բացահայտել հետաքրքրություն ներկայացնող տարածաշրջանը: Այնուհետև հրահանգը կբացատրի, թե ինչպես ենք մենք ինտեգրում բոլոր տարրերը գրաֆիկական ինտերֆեյսի (GUI) մեջ:

Նշում:

1). Այս նախագիծը ոգեշնչված է հետազոտական հոդվածից `« Սովորական մոտեցումներ, մարտահրավերներ և ապագա միտումներ CT- ում աննորմալ թոքերի հատվածների և պատկերի վերլուծություն »: Որը կարելի է գտնել այստեղ

2). Մենք օգտագործում ենք NIH: Clinical Center- ի ռենտգենյան պատկերները: Հղումը կարելի է գտնել այստեղ

3): Հավելվածների դիզայների օգնությունը կարելի է գտնել այստեղ

4): Մինչև կոդը գործարկելը. Դուք պետք է փոխեք Dir ուղին (տող 34 -ում) ձեր ֆայլերի գրացուցակին և պատկերի տեսակին (տող 35) (մենք վերլուծում ենք *.png):

Քայլ 1: Քայլ 1: Պատկերի բեռնում

Քայլ 1: Պատկերի բեռնում
Քայլ 1: Պատկերի բեռնում

Այս քայլը ցույց կտա բնօրինակ պատկերը մոխրագույն մասշտաբով: Փոխեք «name_of_picture.png» - ը ձեր պատկերի անվան

պարզ; clc; փակել բոլորը;

%% Պատկերների բեռնում

raw_x_ray = 'name_of_picture.png';

I = imread (raw_x_ray);

գործիչ (101);

ցուցադրել (I);

գունային քարտեզ (մոխրագույն);

վերնագիր («Մոխրագույն մասշտաբի ռենտգեն»);

Քայլ 2. Քայլ 2. Աղմուկի զտում և հիստոգրամ

Քայլ 2: Աղմուկի զտում և հիստոգրամ
Քայլ 2: Աղմուկի զտում և հիստոգրամ

Մոխրագույն մասշտաբի պատկերի շեմը գտնելու համար մենք նայում ենք հիստոգրամին `պարզելու, թե արդյոք դրանք հստակ ռեժիմներ են: Ավելին կարդացեք այստեղ

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

գործիչ (102);

ենթահող (2, 1, 1);

ցուցադրել (I);

ենթահող (2, 1, 2);

իմհիստ (I, 256);

Քայլ 3: Քայլ 3. Շեմերի սահմանում

Քայլ 3: Շեմերի սահմանում
Քայլ 3: Շեմերի սահմանում
Քայլ 3: Շեմերի սահմանում
Քայլ 3: Շեմերի սահմանում

Այս քայլը թույլ է տալիս սահմանել շեմը ըստ հիստոգրամի: morphologicalGradient- ը կարևորում է կարմիրի հետաքրքրության շրջանը, իսկ visboundaries գործառույթը ծածկում է թոքի ուրվագծված և զտված պատկերը կարմիրով:

Օգտագործելով regionprops- ը, մենք կարող ենք ճշգրտել պինդության զանգվածները և տեսակավորել դրանք նվազման կարգով: Հաջորդը ես երկուականացնում եմ մոխրագույն սկլայի պատկերը և կիրառում մորֆոլոգիական գրադիենտի մեթոդը և mLoren Shurasking- ը `հետաքրքրության տարածաշրջանը (ROI) ընդգծելու համար: Հաջորդ քայլը պատկերը շրջելն է, որպեսզի թոքի ROI- ն սպիտակ լինի սև ֆոնի վրա: 2 դիմակ ցուցադրելու համար օգտագործում եմ showMaskAsOverlay գործառույթը: Նշում. Կոդը ներշնչված է Loren Shure- ից, հղում:

Լազի, ես ստեղծում եմ կարմիր ուրվագիծ ՝ օգտագործելով bwbwboundaries- ը և քողարկելով ֆիլտրի պատկերը և սահմանները:

a_thresh = I> = 172; % սահմանեց այս շեմը

[labelImage, numberOfBlobs] = bwlabel (a_thresh);

props = regionprops (a_thresh, 'all');

sortedSolidity = տեսակավորում ([props. Solidity], 'իջնել');

SB = տեսակավորված Պինդություն (1);

եթե SB == 1 % SB- ն ընդունում է միայն պինդություն == 1 զտել ոսկորները

binaryImage = անօրինականացնել (I); գործիչ (103);

imshow (binaryImage); գունային քարտեզ (մոխրագույն);

SE = strel ('քառակուսի', 3);

morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));

դիմակ = imbinarize (morphologicalGradient, 0.03);

SE = strel ('քառակուսի', 2);

դիմակ = փակել (դիմակ, SE);

դիմակ = լցնել (դիմակ, «անցքեր»);

դիմակ = bwareafilt (դիմակ, 2); Տարածքի շոուի % վերահսկիչ թիվը

notMask = ~ դիմակ;

դիմակ = դիմակ | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);

showMaskAsOverlay (0.5, դիմակ, 'r'); % պետք է ներբեռնեք ծրագիրը/գործառույթը showMaskAsOverlay

BW2 = imfill (binaryImage, 'անցքեր');

new_image = BW2;

new_image (~ դիմակ) = 0; % շրջել ֆոնը և անցքերը

B = սահմաններ (նոր_պատկեր); % -ը կարող է ընդունել միայն 2 չափս

գործիչ (104);

ցուցադրել (new_image);

սպասիր

visboundaries (B);

վերջ

Քայլ 4: Ստեղծեք GUI

Այժմ մենք ինտեգրում ենք նախորդ կոդը MATLAB հավելվածին: Բացեք հավելվածների դիզայները MATLAB- ում (Նոր> հավելված): Նախ, մենք նախագծում ենք ինտերֆեյսը `սեղմելով-պահելով և երեք առանցքով քարշ տալով կենտրոնական աշխատանքային տարածք: Հաջորդը, մենք սեղմում-պահում-քաշում ենք երկու կոճակ, մեկ խմբագրման դաշտ (տեքստ), մեկ խմբագրման դաշտ (թվային), մեկ սահող և մեկ բացվող ընտրացանկ: Երկու առանցք կցուցադրեն նախադիտումը և կվերլուծեն պատկերը, իսկ երրորդ առանցքները կցուցադրեն պիքսելների հիստոգրամ նախադիտման «ընտրված» պատկերի համար: Խմբագրման դաշտը (տեքստը) տուփում կցուցադրվի ընտրված պատկերի ֆայլի ուղին, իսկ խմբագրման դաշտում (թվային) ՝ թոքերի հայտնաբերված պիքսելային տարածքը:

Այժմ դիզայնի տեսքից անցեք ծրագրի դիզայների կոդի տեսքի: Մուտքագրեք ծածկագրի մեջ գտնվող հատկությունների ծածկագիրը ՝ կտտացնելով «Հատկություններ» կարմիր կոճակը, որի վրա նշվում է գումարած նշանը: Նախաստորագրեք I, շեմը և regionToExtract հատկությունները, ինչպես նշված է ներքևում տրված ծածկագրում: Հաջորդը, աջ սեղմեք աշխատանքային տարածքի վերին աջ մասում գտնվող կոճակի վրա (Բաղադրիչի դիտարկիչ) և անցեք Հետադարձ կապ> Գնալ դեպի … հետադարձ կապ: Ավելացրեք «գործառույթ SelectImageButtonPused (ծրագիր, իրադարձություն)» գործառույթի համար: Այս ծածկագիրը թույլ է տալիս ընտրել պատկեր ՝ ձեր համակարգչից վերլուծելու համար ՝ օգտագործելով uigetfile: Պատկեր ընտրելուց հետո առանցքների տակ հիստոգրամի ուղեկցությամբ կհայտնվի նախադիտման պատկեր: Այնուհետև, աջ կոճակը սեղմեք մյուս կոճակի վրա և կրկնեք նույն ընթացակարգը ՝ հետադարձ գործառույթ ստեղծելու համար:

Ավելացրեք «AnalyzeImageButtonPushed գործառույթ (ծրագիր, իրադարձություն)» տակի ծածկագիրը: Այս ծածկագիրը կիրականացնի պիքսելների հաշվարկը և բլբի հայտնաբերումը նախադիտման պատկերի վրա ՝ վերլուծված պատկերի կոճակի վրա (որի կոճակի վրա աջ սեղմել եք): Կոճակները ծրագրավորելուց հետո մենք այժմ ծրագրավորելու ենք սահիկը և բացվող ընտրացանկը: Աջ սեղմեք սահողին, ստեղծեք հետադարձման գործառույթ և ավելացրեք «FilterThresholdSliderValueChanged (ծրագիր, միջոցառում)» գործառույթի տակ գտնվող ծածկագիրը մինչև վերջ: Սա թույլ է տալիս սահողին հարմարեցնել գորշ ինտենսիվության շեմը:

Ստեղծեք հետադարձ գործառույթ բացվող ընտրացանկի համար և ավելացրեք «AreastoExtractDropDownValueChanged գործառույթ» (ծրագրի, իրադարձության) ներքևի ծածկագիրը, որը թույլ կտա բացվող ընտրացանկին փոփոխել վերլուծված պատկերի առանցքների վրա ցուցադրվող բլթերի քանակը: Այժմ, սեղմեք բաղադրիչ զննարկչի յուրաքանչյուր սուբյեկտի վրա և փոխեք դրանց հատկությունները ըստ ձեր ցանկության, օրինակ ՝ սուբյեկտների անունները փոխելը, առանցքները հեռացնելը և մասշտաբավորումը փոխելը: Քաշեք և գցեք Component Browser- ի սուբյեկտները Design View- ում դեպի ֆունկցիոնալ և հասկանալի դասավորություն: Այժմ դուք ունեք ծրագիր MATLAB- ում, որը կարող է վերլուծել թոքերի պատկերները պիքսելային տարածքի համար:

հատկություններ (Մուտք = մասնավոր) I = ; % պատկերի ֆայլ

շեմ = 257; մոխրագույն ինտենսիվության երկուականացման շեմ

regionToExtract = 2;

վերջ

գործառույթ SelectImageButtonPushed (ծրագիր, իրադարձություն)

clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %define invariate ֆայլ «նախածանց»

[imageExt, path] = uigetfile ('*. png'); %գրավել պատկերի անվան փոփոխական մասը

imageName = [Dir filesep imageExt]; %concatenate անփոփոխ և փոփոխական լարեր

app. I = imread (imageName); %կարդացել է պատկերը

imshow (հավելված I, «ծնող», հավելված. UIAxes); %ցուցադրել պատկերը

app. FilePathEditField. Value = ուղի; %ցուցադրել ֆայլի ուղին, թե որտեղից է եկել սկզբնական պատկերը

վերջ

գործառույթ AnalyzeImageButtonPushed (ծրագիր, իրադարձություն)

originalImage = app. I;

originalImage = wiener2 (հավելված I., [5 5]); %կետերի հեռացման զտիչ

հիստոգրամ (հավելված. AxesHistogram, հավելված I, 256); %ցուցադրել պատկերի հիստոգրամը

a_thresh = originalImage> = app.threshold; % սահմանեց այս շեմը

labelImage = bwlabel (a_thresh);

props = regionprops (a_thresh, 'all');

sortedSolidity = տեսակավորում ([props. Solidity], 'իջնել');

SB = տեսակավորված Պինդություն (1);

եթե SB == 1 % SB- ն ընդունում է միայն պինդություն == 1 զտել ոսկորները

SE = strel ('քառակուսի', 3);

morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));

դիմակ = imbinarize (morphologicalGradient, 0.03);

SE = strel ('քառակուսի', 2);

դիմակ = փակել (դիմակ, SE);

դիմակ = լցնել (դիմակ, «անցքեր»);

դիմակ = bwareafilt (դիմակ, app.regionsToExtract);

Տարածքի շոուի % վերահսկիչ թիվը

notMask = ~ դիմակ;

դիմակ = դիմակ | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);

BW2 = լցնել (labelImage, «անցքեր»);

new_image = BW2;

new_image (~ դիմակ) = 0;

B = սահմաններ (նոր_պատկեր); % -ը կարող է ընդունել միայն 2 չափսերի ցուցադրում (new_image, 'ծնող', հավելված. UIAxes2);

պահել (հավելված. UIAxes2, «on»);

visboundaries (B);

սահմանել (gca, 'YDir', 'reverse');

lungArea = bwarea (new_image);

app. PixelAreaEditField. Value = lungArea;

վերջ

վերջ

գործառույթը FilterThresholdSliderValueChanged (ծրագիր, միջոցառում)

app.threshold = app. FilterThresholdSlider. Value;

վերջ

գործառույթը AreastoExtractDropDownValueChanged (ծրագիր, իրադարձություն) stringNumber = app. AreastoExtractDropDown. Value;

app.regionsToExtract = str2double (stringNumber);

վերջ

վերջ

Խորհուրդ ենք տալիս: