Mundarija:
- 1 -qadam: 1 -qadam: Rasm yuklanmoqda
- 2 -qadam: 2 -qadam: shovqinlarni filtrlash va gistogramma
- 3 -qadam: 3 -qadam: Chegaralarni o'rnatish
- 4 -qadam: GUI yaratish
- 5 -qadam: video demo
Video: MatLab o'pkasini segmentatsiyasi: 5 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:23
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
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
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
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:
MATLAB oson yuz aniqlash: 4 qadam
MATLAB yuzni oson aniqlash: Maqolaning asosiy maqsadi - tasvirni qayta ishlash qanchalik oson bo'lishini ko'rsatish, MATLABFace yordamida aniqlash va kuzatish muhim va faol tadqiqot maydoni bo'lib kelgan, shuning uchun men tushuntirmoqchiman. buni aql bilan qanday qilish mumkin
Matlab 2016b -ni Word -ga qanday kodlash va nashr qilish kerak (Yangi boshlanuvchilar uchun qo'llanma): 4 qadam
Matlab 2016b-ni Word-ga qanday kodlash va nashr qilish kerak (Yangi boshlanuvchilar uchun qo'llanma): Matlab-bu texnik natijalarni hisoblash uchun ishlatiladigan yuqori samarali til dasturi. U vizualizatsiya, hisoblash va dasturlashni foydalanuvchilarga qulay tarzda birlashtirish imkoniyatiga ega. Ushbu dastur yordamida foydalanuvchi muammo va echimlarni e'lon qilishi mumkin
Matlab yordamida Raspberry Pi ni nazorat qilish: 5 qadam
Matlab yordamida Raspberry Pi ni boshqarish: Hey, bu dars matlab yordamida boshsiz malina pi ni boshqarish haqida. Siz yangi malina pi kartasini qo'llab -quvvatlash uchun matlabni eng so'nggi versiyasiga o'rnatishingiz kerak bo'lishi mumkin
Matlab-ga asoslangan ROS robot boshqaruvchisi: 9 qadam
Matlab-ga asoslangan ROS robot boshqaruvchisi: Men bolaligimdan temir odam bo'lishni orzu qilganman va hozir ham shunday qilaman. Temir odam - bu haqiqatan ham mumkin bo'lgan qahramonlardan biri va men oddiy odam bo'lishni xohlayman, garchi odamlar ustimdan kulsalar ham, bu imkonsiz deb aytishsa ham
MATLAB -da dasturiy ta'minotni takomillashtirish: 6 qadam
MATLAB -da dasturlarni takomillashtirishni takomillashtirish: Maqsad: Ushbu dasturlashtirilgan tizimning maqsadi - Amtrak Railroad tizimlarining xavfsizlik xususiyatlarini yaxshilash uchun kichik hajmdagi Arduino -ga qarash va kodlashni keng miqyosda qo'llash. Buning uchun biz tuproq namligini qo'shdik