Turinys:
- 1 žingsnis: Būtinos sąlygos
- 2 veiksmas: būtinos sąlygos (ne)
- 3 veiksmas: būtinos sąlygos (ne)
- 4 žingsnis: būtinos sąlygos (ne)
- 5 veiksmas: išvalykite „Matlab“ir pasiruoškite paleisti kodą
- 6 veiksmas: pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais
- 7 veiksmas: pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais (ne)
- 8 veiksmas: sukurkite 2 kintamuosius (normalius ir diagnozuotus) ir nustatykite juos lygius į 0
- 9 veiksmas: sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus
- 10 veiksmas: sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus (ne)
- 11 veiksmas: apkarpykite vaizdo kraštus
- 12 žingsnis: sukurkite pilkos skalės vaizdą
- 13 žingsnis: sukurkite kontrastingą vaizdą
- 14 žingsnis: patobulinkite kontrasto vaizdą
- 15 veiksmas: sukurkite vidutinį filtrą
- 16 veiksmas: derinkite vidurkio filtrą su kontrastingu vaizdu
- 17 žingsnis: padarykite naują vidutinę kaukę, atimdami taškus
- 18 veiksmas: sukurkite dvejetainį filtruotą vaizdą
- 19 veiksmas: pašalinkite filtruotuose vaizduose esančias mažesnes dėmeles
- 20 veiksmas: sukurkite disko struktūrinį elementą
- 21 veiksmas: atlikite morfologines uždarymo operacijas
- 22 veiksmas: suraskite mažiausiai 8 sujungtus objektus
- 23 veiksmas: raskite maksimalų prijungtų taškų skaičių
- 24 veiksmas: nustatykite maksimalias pikselių reikšmes į 0 ir raskite taškų, kurių ryšys> = 26
- 25 žingsnis: pašalinkite kraujo indus iš vaizdo
- 26 žingsnis: paveikslėlio rodymas
- 27 veiksmas: pašalinkite indus ir suskaičiuokite kraujo dėmeles
- 28 veiksmas: diagnozuokite tinklainės vaizdą pagal nustatytų kraujo krešulių skaičių
- 29 žingsnis: jei yra daugiau nei 5 dėmės …
- 30 veiksmas: pakartokite įprastų vaizdų, kurių vaizdo skaitmenys yra 2 ir 3, filtravimo procesą
- 31 veiksmas: pakartokite visą diagnozuotų vaizdų procesą
- 32 žingsnis: Statistinė analizė
- 33 žingsnis: pasitikėjimo intervalo radimas
Video: Automatinė diabetinės retinopatijos diagnozė per MATLAB: 33 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
(Žr. Aukščiau pateiktą kodo schemą)
Diabetinė retinopatija yra su diabetu susijusi akių liga, kurią sukelia didelis cukraus kiekis kraujyje. Dėl aukšto cukraus kiekio tinklainės kraujagyslės išsipučia, dėl to padidėja kraujagyslės ir netgi išsivysto kraujagyslės, todėl tinklainės vaizduose atsiranda tamsių dėmių. Naudodamiesi šiuo kodu, mes siekiame naudoti kraujagyslių nutekėjimo dėmių atsiradimą kaip diabetinės retinopatijos fono rodiklį, nors realiame pasaulyje reikės papildomų diagnostikos metodų. Šio kodo tikslas yra automatizuoti vaizdų apdorojimą ir tinklainės vaizdų diagnostiką, siekiant nustatyti diabetinės retinopatijos požymius, rodomus per tamsius tinklainės vaizdų taškus.
10 normalių tinklainės vaizdų ir 10 diagnozuotų tinklainės vaizdų buvo apdoroti naudojant kodą, kuris pirmiausia nuskaito ir filtruoja vaizdus, o tada kiekybiškai įvertina tamsius taškus, kad nustatytų, ar yra diabetinės retinopatijos simptomų, atsižvelgiant į nurodytą slenkstį. Tada rezultatai spausdinami į komandų langą, kad būtų galima interpretuoti žiūrovą.
1 žingsnis: Būtinos sąlygos
1. Įsitikinkite, kad kompiuteryje atsisiųsta MATLAB programa.
2. Atsisiųskite txt failą, esantį nuorodoje. (Paspauskite „ctrl+s“, kad išsaugotumėte tą patį katalogą kaip ir MATLAB kodas)
2 veiksmas: būtinos sąlygos (ne)
4. Atidarykite MATLAB ir komandų lange įveskite „uiimport“.
5. Pasirinkite failą officialdiagnoses.txt ir importuokite jį į MATLAB kaip ląstelių matricą.
6. Įsitikinkite, kad „oficialios diagnozės“matomos kaip kintamasis darbo vietoje.
3 veiksmas: būtinos sąlygos (ne)
7. Atsisiųskite funkciją „ModWald.m“, kurią galite gauti iš aukščiau pateikto kodo arba atsisiųsti iš „Canvas“.
(Kodą pateikė profesorius Kingas ir profesorius Choi)
4 žingsnis: būtinos sąlygos (ne)
8. Atsisiųskite 400 neapdorotų vaizdų iš STARE projekto duomenų skyriaus.
5 veiksmas: išvalykite „Matlab“ir pasiruoškite paleisti kodą
Pridėti prie kodo:
1. uždaryti viską (uždaro visus anksčiau atidarytus vaizdus)
2. clearvars - išskyrus oficialias diagnozes (išvalo visus kintamuosius, išskyrus oficialiai diagnozuotų txt failą, anksčiau importuotą)
3. cclc (išvalo komandų langą)
6 veiksmas: pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais
1. Paimkite diagnozės teksto failą ir ištraukite vaizdų pavadinimus. Šie pavadinimai yra pirmame teksto failo stulpelyje, kad juos išgautumėte, įveskite „officialdiagnoses (:, 1)“. Vaizdo pavadinimų matrica buvo priskirta kintamajam „all_image_numbers“
2. Konvertuokite kintamąjį all_image_numbers iš langelių masyvo į matricos masyvą, naudodami funkciją cell2mat
7 veiksmas: pasirinkite 10 įprastų akių vaizdų ir 10 vaizdų su diabetinės retinopatijos simptomais (ne)
3. Norėdami paleisti kodą, pasirinkite 10 įprastų akių vaizdų. Šiuo atveju pasirinkti vaizdai buvo 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Įdėkite šiuos skaičius į matricą ir priskirkite juos kintamajam, kuris bus iškviestas įkeliant vaizdus.
4. Pakartokite 3 veiksmą tinklainės vaizdams, kuriems diagnozuota diabetinė retinopatija. Šiuo atveju pasirinkti vaizdai buvo 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
8 veiksmas: sukurkite 2 kintamuosius (normalius ir diagnozuotus) ir nustatykite juos lygius į 0
Sukurkite šiuos kintamuosius prieš ciklą for, kad inicijuotumėte ciklo numerius.
9 veiksmas: sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus
1. Sukurkite kilpą
2. Nustatykite skaičiavimo kintamąjį (šiuo atveju i) 1-10 reikšmių matricą. Šis skaičiavimo kintamasis bus naudojamas skambinti kiekvienam vaizdui atskirai
3. Paimkite vaizdų matricos elementą i, kad išgautumėte ir konvertuotumėte vaizdo pavadinimą iš eilutės į skaičių, naudodami funkciją num2str.
Naudodami funkciją numel, raskite vaizdo pavadinime esančių skaitmenų skaičių. Priskirkite šią vertę kintamajam, skaitmenų_normalus. Šis skaičius turėtų būti 1 vieno skaitmens numeriams, 2 - dviženkliai skaičiai ir 3 - triženkliai skaičiai. Ši informacija bus naudojama automatiškai iškviesti vaizdus.
10 veiksmas: sukurkite ciklą, skirtą automatiškai įkelti įprastus vaizdus (ne)
3. Sukurkite teiginį if, kuriame būtų visos trys ankstesnių veiksmų galimybės. Jei vaizdo pavadinime yra 1 skaitmuo, vaizdas bus vadinamas „im000“, jei jis sudarytas iš 2 skaitmenų, vaizdas bus vadinamas „im00“, o jei jis turi 3, vaizdas bus vadinamas „im0“.
4. Po kiekvienu if teiginiu priskirkite kintamąjį imread „im“po atitinkamu, jei teiginiu su atitinkamu nulių skaičiumi (kaip aprašyta aukščiau), po kurio eina i.
11 veiksmas: apkarpykite vaizdo kraštus
Paimkite originalų vaizdą ir pritaikykite „imcrop“filtrą, kad pašalintumėte juodus kraštus ir priskirtumėte kintamąjį „I_crop“. Apkarpymo stačiakampis nurodomas naudojant matricą [95, 95, 500, 410].
12 žingsnis: sukurkite pilkos skalės vaizdą
Paimkite apkarpytą vaizdą ir pritaikykite rbg2gray filtrą, kad vaizdas būtų pilkos spalvos. Priskirkite šį vaizdą kintamajam I2.
13 žingsnis: sukurkite kontrastingą vaizdą
Paimkite vaizdą I2 ir naudokite „Imadjust“, kad pakeistumėte intensyvumo vertes.
Paimkite vertes, kurios patenka į diapazoną [0,2, 0,7], ir pakeiskite jas iki [0, 1]. Gama nustatyta į 0,8, kad vaizdas būtų ryškesnis. Priskirkite naują vaizdą I_adjusted.
14 žingsnis: patobulinkite kontrasto vaizdą
Paimkite I_adjusted vaizdą ir naudokite adapthisteq funkciją, kad padidintumėte kontrastą.
„Adapthisteq“sintaksei reikalingas vaizdo pavadinimas, I_adjusted, „numTiles“, numTiles dydis, „nBins“ir dėžių skaičius. „NumTiles“dydis nustatytas į [8 8], padalijant vaizdą į 8x8 plyteles, o dėžių skaičius - 28. Priskirkite vaizdą „I_constrast“.
15 veiksmas: sukurkite vidutinį filtrą
Sukurkite kintamąjį pavadinimu „meanfilt“naudodami funkciją „fspecial“. Įveskite „vidutinę funkciją“, kad sukurtumėte vidurkio filtrą ir įterptumėte stumdomo lango dydžio [90 90].
16 veiksmas: derinkite vidurkio filtrą su kontrastingu vaizdu
Sukurkite naują kintamąjį, pavadintą mask_mean, ir naudokite funkciją „imfilter“, kad nufotografuotumėte „I_contrast“vaizdą ir pritaikytumėte anksčiau sukurtą vidutinį filtrą.
17 žingsnis: padarykite naują vidutinę kaukę, atimdami taškus
Sukurkite kintamąjį, pavadintą mask_mean2, ir naudokite funkciją imsubtract, kad atimtumėte kiekvieno „I_contrast“pikselio vertę iš atitinkamo pikselio „mask_mean“.
18 veiksmas: sukurkite dvejetainį filtruotą vaizdą
Paverskite pilkos spalvos vaizdus nespalvotais naudodami imbinarize. Įvesties kaukė_mean2, „prisitaikanti“, „ForegroundPolarity“, „dark“, „Sensitivity“, 0.6. Priskirkite šį naują vaizdą mask_binarize.
19 veiksmas: pašalinkite filtruotuose vaizduose esančias mažesnes dėmeles
Pašalinkite objektus, kurių ryšys yra mažesnis nei 100 pikselių, naudodami „mask_binarize“funkciją „bwareaopen“ir nustatykite slenkstinę reikšmę 100. Priskirkite kintamąjį kaip bw.
20 veiksmas: sukurkite disko struktūrinį elementą
Sukurkite disko struktūrinį elementą (kurio spindulys yra 2), naudodami „Strel“funkciją. Priskirkite jį se.
21 veiksmas: atlikite morfologines uždarymo operacijas
Paimkite bw ir pritaikykite uždėjimo funkciją konstrukciniam elementui, kad atliktumėte objekto morfologinę uždarymo operaciją.
22 veiksmas: suraskite mažiausiai 8 sujungtus objektus
Paimkite „bw“ir naudokite „bwconncomp“, kad surastumėte paveikslėlyje objektus, kurių ryšys ne mažesnis kaip 8. Priskirkite skaičiaus išvestį cc_1.
23 veiksmas: raskite maksimalų prijungtų taškų skaičių
Naudokite „cellfun“funkciją, kad atliktumėte funkciją „numel“kiekviename CC langelyje. Taip randamas elementų skaičius ląstelėje „PixelIdxList“. Priskirkite reikšmę „numPixels“.
Raskite maksimalias reikšmes numPIxels. Didžiausią maksimumą priskirkite „didžiausiai“, o didžiausios vertės indeksą - „idx“.
24 veiksmas: nustatykite maksimalias pikselių reikšmes į 0 ir raskite taškų, kurių ryšys> = 26
= 26 „Pixel Connectivity“"src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 „Pixel Connectivity“"src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 pikselių ryšys "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 26 pikselių ryšys "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
Nustatykite pikselius su didžiausiomis reikšmėmis paveikslėlyje „bw“į 0, kad taškai būtų juodi.
Naudodami „bwconncomp“raskite paveikslėlyje objektus, kurių ryšys ne mažesnis kaip 26 pikseliai. Priskirti kintamajam cc_1.
25 žingsnis: pašalinkite kraujo indus iš vaizdo
Naudodami „bwpropfilt“funkciją, pašalinkite kraujagyslėse esančias kraujagysles, kurių diapazonas yra [0, 0,9].
[0,9, 1] neįtraukiamas, nes artimos 1 vertės rodo eilutę. Priskirti „RemoveVessels“.
26 žingsnis: paveikslėlio rodymas
Rodyti kiekvieną filtruotą vaizdą daliniame sklype. Imshow. su „kraštinėmis“ir „griežtomis“įvestimis, parodo kiekvieną vaizdą papildomo sklypo struktūroje. Prie kiekvieno vaizdo pridėkite pavadinimą, kad atskirtumėte naudojamą filtrą.
27 veiksmas: pašalinkite indus ir suskaičiuokite kraujo dėmeles
1. Paimkite „RemoveVessels“ir pritaikykite „Centroid“funkciją „regionprops“, kad nustatytumėte paveikslėlyje esančių objektų centrus. Šie objektai turėtų atitikti paveiksle esančius kraujo krešulius.
2. Apskaičiuokite nustatytų kraujo krešulių skaičių, paimdami centroidinės matricos ilgį.
28 veiksmas: diagnozuokite tinklainės vaizdą pagal nustatytų kraujo krešulių skaičių
Naudokite, jei teiginiai diagnozuoja vaizdą pagal nustatytų kraujo krešulių skaičių.
Jei nustatytas centroidų skaičius buvo mažesnis arba lygus 5, vaizdas buvo nustatytas kaip normalus.
Jei centroidų skaičius buvo didesnis nei 5, vaizde buvo diagnozuota diabetinė retinopatija.
Rezultatas atspausdinamas komandų lange naudojant fprintf.
29 žingsnis: jei yra daugiau nei 5 dėmės …
Pakartokite aukščiau pateiktas instrukcijas diagnozuotiems vaizdams kaip kitą teiginį. Ši dalis bus vykdoma, jei dėmių skaičius yra didesnis nei 5.
Baikite teiginį if.
30 veiksmas: pakartokite įprastų vaizdų, kurių vaizdo skaitmenys yra 2 ir 3, filtravimo procesą
Pakartokite procesą likusiai originalo daliai, jei teiginiai, kai numel (skaitmenų skaičius vaizdo numeryje) yra lygūs 2 ir 3. Tai užbaigia įprastų vaizdų ciklą.
Užbaikite ciklą for.
31 veiksmas: pakartokite visą diagnozuotų vaizdų procesą
Pakartokite visą procesą naudodami diagnozuotus vaizdus, išvardytus matricoje „skaičiai_ekstrakto_diagnozuoti“.
Būtinai peržiūrėkite kiekvieną figūrą (i) ir pakeiskite ją į (i+10), kad diagnozuoti skaičiai būtų rodomi kaip 11–20 vaizdai.
32 žingsnis: Statistinė analizė
1. „Actual_Diagnosis_Matrix“naudojama rezultatams palyginti su oficialia diagnoze, rasta txt faile. Pirmieji 10 nulių rodo, kad pirmieji 10 vaizdų turi būti normalūs. Paskutiniai 10 rodo, kad paskutiniai 10 vaizdų turėtų būti klasifikuojami kaip diabetinė retinopatija.
2. Dvigubas lygybės ženklas, naudojamas kuriant „number_correct“, sukuria loginį masyvą, lyginant atitinkamų „Actual_Diagnosis_Matrix“elementų vertę su „Diagnosis_Matrix“, sukurtais iš ciklo.
Prie kiekvieno diagnozę atitinkančio elemento bus pridėtas 1, o tai reiškia, kad kodas teisingai diagnozavo tą vaizdą. Jei jis neteisingas, prie matricos pridės 0.
Tada, paėmus sumą, visi sumuojami. Kitaip tariant, ji nustato teisingai diagnozuotų vaizdų sumą.
3. „Final_percentage_correct“- tai galutinė procentinė dalis, pagal kurią kodas tiksliai diagnozavo diabetinę retinopatiją. Teisingai diagnozuotų vaizdų skaičius padalijamas iš 20 (bendras nuotraukų skaičius) ir padauginamas iš 100, kad būtų nustatyta sėkmingų diagnozių procentinė dalis.
33 žingsnis: pasitikėjimo intervalo radimas
1. Įsitikinkite, kad atsisiuntėte „ModWald.m“, kad galėtumėte jį pavadinti kaip funkciją. Jei nebūtų šios funkcijos, pasitikėjimo intervalą turėtumėte apskaičiuoti patys, naudodami modifikuotą Waldo metodą.
2. Funkcija „ModWald“turi 2 įėjimus, kur pirmasis yra teisingai identifikuotų vaizdų skaičius, o antrasis - bendras vaizdų kiekis.
3. ModWald funkcija išves apatines ir viršutines proporcijų patikimumo intervalo ribas, kad būtų atrinkti duomenys. Kitaip tariant, jūs pateiksite procentų intervalą, kuriame bus tikrasis kodo tikslumo procentas.
4. Naudokite fprintf žemiau, kad komandų lange išvestumėte statistiką ir pasitikėjimo intervalą.
> fprintf ('%. 0f proc. tinklainės vaizdų buvo teisingai diagnozuoti pagal oficialią diagnozę. / n / n', Final_percentage_crerect)
> fprintf ('Tikroji procentinė dalis, pagal kurią mūsų kodas teisingai diagnozuos diabetinę retinopatiją, / n patenka į [%.3f, %.3f] diapazoną, remiantis 20 atrinktų vaizdų / n', apatinis_viršis, viršutinė riba)
Rekomenduojamas:
Automatinė augalų laistymo sistema naudojant mikro: bitą: 8 žingsniai (su nuotraukomis)
Automatinė augalų laistymo sistema naudojant „Micro: bit“: šioje instrukcijoje aš jums parodysiu, kaip sukurti automatinę augalų laistymo sistemą naudojant „Micro: bit“ir kai kuriuos kitus mažus elektroninius komponentus. „Micro: bit“naudoja drėgmės jutiklį stebėti drėgmės lygį augalo dirvožemyje ir
Automatinė augalų laistymo sistema: 4 žingsniai
Automatinė augalų laistymo sistema: Štai kaip aš sukūriau savo automatinę augalų laistymo sistemą
Automatinė plastiko perdirbimo liejimo mašina: 5 žingsniai
Automatinė plastiko perdirbimo įpurškimo mašina: Sveiki :) Ši instrukcija yra apie mūsų „automatinę plastiko liejimo mašiną, skirtą plastiko perdirbimui“. (vadinamas „Smart Injector“) Mašinos idėja yra pasiūlyti decentralizuotą plastiko perdirbimo sprendimą. Perdirbimas dažnai yra ribotas
Automatinė kaitlentės valdymo sistema (HPACS): 3 žingsniai
Automatinė kaitlentės valdymo sistema (HPACS): Šio projekto tikslas - suteikti paprastą intuityvų būdą suprasti, kaip atlikti automatinį PID derinimą naudojant šildytuvą. Tai, ką aš sukūriau, yra pagrįstas Åström – Hägglund metodu, kuriuo išvedami parametrai, naudojant „bang-bang“valdymą, kad būtų atskleistos sistemos charakteristikos
Automatinė SMD srauto krosnelė iš pigios skrudintuvo krosnies: 8 žingsniai (su nuotraukomis)
Automatinė „SMD Reflow“orkaitė iš pigios skrudintuvo krosnies: mėgėjų PCB gamyba tapo daug prieinamesnė. Plokštės, kuriose yra tik skylių komponentai, yra lengvai lituojamos, tačiau plokštės dydį galiausiai riboja komponento dydis. Taigi, naudojant ant paviršiaus montuojamus komponentus