Mundarija:

MatLab o'pkasini segmentatsiyasi: 5 qadam
MatLab o'pkasini segmentatsiyasi: 5 qadam

Video: MatLab o'pkasini segmentatsiyasi: 5 qadam

Video: MatLab o'pkasini segmentatsiyasi: 5 qadam
Video: What Is MATLAB? 2024, Noyabr
Anonim
MatLab o'pka segmentatsiyasi
MatLab o'pka segmentatsiyasi

Muallif: Fuk Lam, Pol Yeung, Erik Reys

O'pka segmentatsiyasidagi xatolar kasallik hududini aniqlashda noto'g'ri ma'lumotlar paydo bo'lishini bilib, tashxis jarayoniga bevosita ta'sir qilishi mumkin. O'pka kasalliklari murakkab shakllarga ega bo'lganda, zamonaviy kompyuter yordami usullari aniq natijalarga erisha olmadi. Bu g'ayritabiiy shakllar plevral efüzyonlar, konsolidasyonlar va boshqalardan kelib chiqishi mumkin. O'pkaning chegaralari atrofdagi ko'krak qafasi to'qimasidan ajratilgan o'pkaning segmentatsiyasi texnikasini qo'llagan holda, bizning ilovamiz foydalanuvchining kirish chegaralari bilan chegaralarni aniqlab, to'liq moslashtirilgan ko'rinishni beradi. o'pka shakllari, MatLab loyihasining maqsadi o'pkaning rentgen tasvirining patologik holatini aniqlash uchun foydalanuvchilarga qulay interaktiv o'pka segmentatsiyasi dasturini yaratishdir. Bizning maqsadimiz - shifokorlar va rentgenologlarga o'pka kasalliklarini aniqlashning ishonchli usulini berish uchun g'ayritabiiy o'pkalarni tasvirlash va aniqlashning yanada samarali usulini yaratish. MatLab-dagi dasturlarni ishlab chiqaruvchi vositasi yordamida dastur ko'krak qafasi rentgenografiyasi va kompyuter tomografiyasi (KT) bilan ishlash uchun maxsus ishlab chiqilgan, lekin u ham MRT bilan ishlash uchun sinovdan o'tgan.

Quyidagi yo'riqnomada shovqinni filtrlash texnikasi (past o'tkazuvchan Wiener filtri), shuningdek, tasvir chegarasi (kulrang tasvirning intensivlik gistogrammasi yordamida) va morfologik gradyan (tasvirning kengayishi va eroziyasi o'rtasidagi farq) mavjud. qiziqish hududini aniqlash. Keyin ko'rsatma barcha elementlarni grafik foydalanuvchi interfeysiga (GUI) qanday qo'shishimizni tushuntiradi.

Eslatma:

1). Ushbu loyiha "KTdagi g'ayritabiiy o'pkalarning segmentatsiyasi va tasvirini tahlil qilish: hozirgi yondashuvlar, muammolar va kelajak tendentsiyalari" nomli ilmiy maqoladan ilhomlangan. Qaysi birini bu erda topish mumkin

2). Biz NIH: klinik markazining rentgen tasvirlaridan foydalanmoqdamiz. Havolani bu yerda topish mumkin

3). Ilova dizaynerining yordamini bu erda topishingiz mumkin

4). Kodni ishga tushirishdan oldin: Dir (34 -qatorda) yo'lini fayl katalogiga va tasvir turiga (35 -qator) o'zgartirish kerak (biz *-p.webp

1 -qadam: 1 -qadam: Rasm yuklanmoqda

1 -qadam: Rasm yuklanmoqda
1 -qadam: Rasm yuklanmoqda

Bu qadam sizga asl rasmni kul rangda ko'rsatadi. "Name_of_picture.png" ni rasm nomiga o'zgartiring

aniq; clc; hammasini yopish;

%% Rasmlar yuklanmoqda

raw_x_ray = 'image_picture.png';

Men = o'qiganman (raw_x_ray);

raqam (101);

imshow (I);

rangli xarita (kulrang);

sarlavha ("Kulrang rangli rentgen");

2 -qadam: 2 -qadam: shovqinlarni filtrlash va gistogramma

2 -qadam: shovqinni filtrlash va gistogramma
2 -qadam: shovqinni filtrlash va gistogramma

Kulrang o'lchovli tasvirning chegarasini topish uchun biz aniq rejimlarni aniqlash uchun gistogrammani ko'rib chiqamiz. Batafsil bu erda o'qing

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

rasm (102);

kichik reja (2, 1, 1);

imshow (I);

kichik reja (2, 1, 2);

imhist (I, 256);

3 -qadam: 3 -qadam: Chegaralarni o'rnatish

3 -qadam: chegaralarni belgilash
3 -qadam: chegaralarni belgilash
3 -qadam: chegaralarni belgilash
3 -qadam: chegaralarni belgilash

Bu qadam gistogramma bo'yicha chegarani belgilash imkonini beradi. morfologicalGradient qizil rangga qiziqish hududini ajratib ko'rsatadi, va funktsiyani chegaralari o'pkaning tasvirlangan va filtrlangan tasvirini qizil rang bilan qoplaydi.

Regionprops yordamida biz mustahkamlik massivlarini aniqlay olamiz va ularni kamayish bo'yicha saralay olamiz. Keyin kulrang sklay tasvirini binarizatsiya qilaman va morfologik gradyan usuli va mLoren Shuraskingni qiziqtirgan hududni (ROI) ajratib ko'rsatish uchun qo'llayman. Keyingi qadam - tasvirni teskari aylantirish, shuning uchun o'pka ROI qora fonda oq bo'ladi. ShowMaskAsOverlay funktsiyasidan 2 ta niqobni ko'rsatish uchun foydalanaman. Eslatma: kod Loren Shure havolasidan ilhomlangan.

Men bwbwboundaries yordamida va filtr tasvirini va chegaralarini maskalash orqali qizil kontur yarataman.

a_thresh = I> = 172; % bu chegarani o'rnatdi

[labelImage, numberOfBlobs] = bwlabel (a_thresh);

rekvizit = regionprops (a_thresh, 'hamma');

sortedSolidity = sort ([rekvizitlarSolidity], 'tushish');

SB = sortedSolidity (1);

agar SB == 1 % SB faqat mustahkamlikni qabul qilsa == 1 suyaklarni filtrlaydi

binaryImage = imbinarize (I); rasm (103);

imshow (binaryImage); rangli xarita (kulrang);

SE = strel ('kvadrat', 3);

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

niqob = imbinarizatsiya (morfologikGradiyent, 0,03);

SE = strel ('kvadrat', 2);

niqob = imclose (niqob, SE);

niqob = imfill (niqob, "teshiklar");

niqob = bwareafilt (niqob, 2); % nazorat maydoni raqami

notMask = ~ niqob;

niqob = niqob | bwpropfilt (notMask, 'Maydoni', [-Inf, 5000 - eps (5000)]);

showMaskAsOverlay (0,5, niqob, 'r'); % showMaskAsOverlay ilovasini/funktsiyasini yuklab olishingiz kerak

BW2 = imfill (binaryImage, 'teshiklar');

new_image = BW2;

new_image (~ mask) = 0; % teskari fon va teshiklar

B = bw chegaralari (yangi_ tasvir); % faqat 2 o'lchovni qabul qilishi mumkin

rasm (104);

imshow (new_image);

to'xtab tur

chegaralar (B);

oxiri

4 -qadam: GUI yaratish

Endi biz oldingi kodni MATLAB ilovasiga birlashtiramiz. MATLAB -da App Designer -ni oching (Yangi> Ilova). Birinchidan, biz interfeysni uchta o'qda markaziy ish joyiga sichqonchani bosib ushlab turamiz. Keyin biz ikkita tugmachani, bitta tahrir qilish maydonini (matnni), bitta tahrirlash maydonini (raqamli), bitta slayderni va bitta ochiladigan menyuni bosib ushlab turamiz. Ikkita o'qda har biri tasvirni oldindan ko'rish va tahlil qilish, uchinchi o'qlarda esa "tanlangan" tasvirni oldindan ko'rish uchun piksellar gistogrammasi ko'rsatiladi. Tahrirlash maydoni (matn) maydonida tanlangan rasmning fayl yo'lini, tahrir qilish maydonida (raqamli) o'pkaning aniqlangan pikselli maydoni ko'rsatiladi.

Endi dizayn ko'rinishidan App Designer -da kod ko'rinishiga o'ting. Qizil "Xususiyatlar" tugmachasini bosib, ortiqcha belgisini qo'yib, mulk kodini kiriting. Quyidagi koddagi kabi I, pol va regionToExtract xususiyatlarini ishga tushiring. Keyin, ish maydonining yuqori o'ng qismidagi tugmachani o'ng tugmasini bosing (Komponentlar brauzeri) va Qayta qo'ng'iroqlar> Qaytish … ga qo'ng'iroq qilish-ga o'ting. "SelectImageButtonPushed funktsiyasi (ilova, hodisa)" kodini qo'shing. Bu kod uigetfile yordamida kompyuterdan tahlil qilish uchun tasvirni tanlash imkonini beradi. Rasmni tanlagandan so'ng, o'qlar ostida gistogramma bilan birga oldindan ko'rish tasviri paydo bo'ladi. Keyin, boshqa tugmani o'ng tugmasini bosing va qayta qo'ng'iroq qilish funktsiyasini yaratish uchun xuddi shu amalni takrorlang.

"AnalyzeImageButtonPushed funktsiyasi (dastur, hodisa)" ostiga kod qo'shing. Ushbu kod tasvirni tahlil qilish tugmachasida oldindan ko'rish tasvirida piksellarni sanash va bloklarni aniqlashni amalga oshiradi (bu kodni qaysi birini sichqonchaning o'ng tugmasi bilan bosgan bo'lsangiz). Tugmalarni dasturlashdan so'ng, endi slayder va ochiladigan menyuni dasturlashtiramiz. Slayderni o'ng tugmasini bosing, qayta qo'ng'iroq qilish funktsiyasini yarating va oxirigacha "FilterThresholdSliderValueChanged (ilova, hodisa) funktsiyasi" ostidagi kodni qo'shing. Bu slayderga kulrang zichlik chegarasini sozlash imkonini beradi.

Qalqib chiquvchi menyu uchun qayta qo'ng'iroq qilish funktsiyasini yarating va ochiladigan menyuda tahlil qilingan tasvir o'qlarida ko'rsatilgan bloklar sonini o'zgartirishga ruxsat berish uchun "AreastoExtractDropDownValueChanged (ilova, hodisa) funksiyasi" ostiga kod qo'shing. Endi komponentlar brauzeridagi har bir ob'ektni bosing va ularning xususiyatlarini xohlaganingizcha o'zgartiring, masalan, ob'ekt nomlarini o'zgartirish, o'qlarni olib tashlash va o'lchovni o'zgartirish. Dizayn ko'rinishidagi komponentlar brauzerining ob'ektlarini funktsional va tushunarli joylashuvga suring. Endi sizda MATLAB -da o'pka tasvirlarini piksellar sonini tahlil qila oladigan ilova bor!

xususiyatlar (Access = private) I = ; % rasm fayli

chegara = 257; kulrang intensivlikni binarizatsiya qilish uchun %chegarasi

regionlarToExtract = 2;

oxiri

SelectImageButtonPushed funktsiyasi (ilova, hodisa)

clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %"prefiks" o'zgarmas faylini aniqlaydi

[imageExt, yo'l] = uigetfile ('*. png'); %rasm nomining o'zgaruvchan qismini oladi

imageName = [Fayllar uchun imageExt]; %o'zgarmas va o'zgaruvchan stringsni birlashtiradi

app. I = imread (imageName); %rasmni o'qiydi

imshow (app. I, "ota -ona", app. UIAxes); %tasvirni ko'rsatadi

app. FilePathEditField. Value = yo'l; %asl rasm qayerdan kelganini ko'rsatadi

oxiri

AnalyzeImageButtonPushed funktsiyasi (ilova, hodisa)

originalImage = app. I;

originalImage = wiener2 (app. I, [5 5]); %nuqta olib tashlash filtri

gistogramma (app. AxesHistogramma, app. I, 256); %tasvir gistogrammasini ko'rsatadi

a_thresh = originalImage> = app.threshold; % bu chegarani o'rnatdi

labelImage = bwlabel (a_thresh);

rekvizit = regionprops (a_thresh, 'hamma');

sortedSolidity = sort ([rekvizitlarSolidity], 'tushish');

SB = sortedSolidity (1);

agar SB == 1 % SB faqat mustahkamlikni qabul qilsa == 1 suyaklarni filtrlaydi

SE = strel ('kvadrat', 3);

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

niqob = imbinarizatsiya (morfologikGradiyent, 0,03);

SE = strel ('kvadrat', 2);

niqob = imclose (niqob, SE);

niqob = imfill (niqob, "teshiklar");

niqob = bwareafilt (niqob, app.regionsToExtract);

% nazorat maydoni raqami

notMask = ~ niqob;

niqob = niqob | bwpropfilt (notMask, 'Maydoni', [-Inf, 5000 - eps (5000)]);

BW2 = imfill (labelImage, 'teshiklar');

new_image = BW2;

new_image (~ mask) = 0;

B = bw chegaralari (yangi_ tasvir); % faqat imshow 2 o'lchovini qabul qilishi mumkin (new_image, 'parent', app. UIAxes2);

ushlab turish (app. UIAxes2, "yoqilgan");

chegaralar (B);

o'rnatish (gca, 'YDir', 'teskari');

lungArea = bwarea (new_image);

app. PixelAreaEditField. Value = o'pka maydoni;

oxiri

oxiri

FilterThresholdSliderValueChanged funktsiyasi (ilova, hodisa)

app.threshold = app. FilterThresholdSlider. Value;

oxiri

AreastoExtractDropDownValueChanged funktsiyasi (ilova, hodisa) stringNumber = app. AreastoExtractDropDown. Value;

app.regionsToExtract = str2double (stringNumber);

oxiri

oxiri

Tavsiya: