Përmbajtje:

Diagnoza e automatizuar e retinopatisë diabetike përmes MATLAB: 33 hapa
Diagnoza e automatizuar e retinopatisë diabetike përmes MATLAB: 33 hapa

Video: Diagnoza e automatizuar e retinopatisë diabetike përmes MATLAB: 33 hapa

Video: Diagnoza e automatizuar e retinopatisë diabetike përmes MATLAB: 33 hapa
Video: autodiagnoze.ro Testere Diagnoza Auto 2024, Dhjetor
Anonim
Diagnoza e Automatizuar e Retinopatisë Diabetike Via MATLAB
Diagnoza e Automatizuar e Retinopatisë Diabetike Via MATLAB
Diagnoza e Automatizuar e Retinopatisë Diabetike Via MATLAB
Diagnoza e Automatizuar e Retinopatisë Diabetike Via MATLAB

(Shihni skicën e kodit më lart)

Retinopatia diabetike është një sëmundje e lidhur me diabetin e syve e shkaktuar nga nivelet e larta të sheqerit në gjak. Nivelet e larta të sheqerit në gjak bëjnë që enët e gjakut në retinë të fryhen, gjë që çon në zgjerimin e enëve të gjakut dhe madje edhe rrjedhjet e enëve, të cilat çojnë në njolla të errëta në imazhet e retinës. Me këtë kod, ne synojmë të përdorim shfaqjen e njollave të rrjedhjes së enëve të gjakut si një tregues të retinopatisë diabetike në sfond, megjithëse teknikat e mëtejshme të diagnostikimit do të kërkoheshin në botën reale. Qëllimi i këtij kodi është të automatizojë përpunimin e imazhit dhe diagnostikimin e imazheve të retinës për të identifikuar shenjat e retinopatisë diabetike të shfaqura përmes njollave të errëta në imazhet e retinës.

10 imazhe normale të retinës dhe 10 imazhe të diagnostikuara të retinës u përpunuan përmes një kodi që së pari lexon dhe filtron imazhet dhe pastaj përcakton pikat e errëta për të përcaktuar nëse simptomat e retinopatisë diabetike janë të pranishme, bazuar në një prag të caktuar. Rezultatet pastaj shtypen në dritaren e komandës për interpretimin e shikuesit.

Hapi 1: Parakushtet

Parakushtet
Parakushtet

1. Sigurohuni që keni shkarkuar programin MATLAB në kompjuterin tuaj.

2. Shkarkoni skedarin txt që gjendet në lidhje. (Shtypni ‘ctrl+s’ për të ruajtur në të njëjtën drejtori si Kodi MATLAB)

Hapi 2: Parakushtet (nuk janë)

Parakushtet (nuk)
Parakushtet (nuk)
Parakushtet (nuk)
Parakushtet (nuk)

4. Hapni MATLAB dhe shkruani ‘uiimport’ në dritaren e komandës.

5. Zgjidhni skedarin officialdiagnoses.txt dhe importojeni në MATLAB si një matricë qelizore.

6. Sigurohuni që i shihni 'diagnozat zyrtare' si një ndryshore në hapësirën e punës.

Hapi 3: Parakushtet (nuk janë)

Parakushtet (nuk)
Parakushtet (nuk)

7. Shkarkoni funksionin ModWald.m, i cili mund të merret nga kodi i mësipërm ose ta shkarkoni nga Canvas.

(Kodi i siguruar nga Profesor King dhe Profesor Choi)

Hapi 4: Parakushtet (nuk)

Parakushtet (nuk)
Parakushtet (nuk)

8. Shkarkoni 400 imazhe të papërpunuara nga pjesa e të dhënave të Projektit STARE.

Hapi 5: Pastroni Matlab për t'u përgatitur për ekzekutimin e kodit

Pastroni Matlab për t'u përgatitur për ekzekutimin e kodit
Pastroni Matlab për t'u përgatitur për ekzekutimin e kodit

Shto në kod:

1. mbyll të gjitha (Mbyll të gjitha imazhet e hapura më parë)

2. Clearvars - përveç diagnozave zyrtare (Pastron të gjitha ndryshoret përveç skedarit txt të diagnozave zyrtare të importuar më parë)

3. cclc (Pastron dritaren e komandës)

Hapi 6: Përzgjidhni 10 Imazhe Normale të Syrit dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike

Zgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike
Zgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike
Zgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike
Zgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike

1. Merrni skedarin e tekstit të diagnozës dhe nxirrni emrat e imazheve. Këta emra përmbahen në kolonën e parë të skedarit tekst, kështu që për t'i nxjerrë ato shkruani 'diagnozat zyrtare (:, 1)'. Matrica e emrave të imazheve iu caktua një ndryshoreje, "të gjithë_image_numbers"

2. Shndërroni ndryshoren all_image_numbers nga një grup qelizash në një grup matricash duke përdorur funksionin cell2mat

Hapi 7: Përzgjidhni 10 Imazhe Normale të Syrit dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike (jo)

Përzgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike (jo)
Përzgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike (jo)
Përzgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike (jo)
Përzgjidhni 10 Imazhe Normale të Syve dhe 10 Imazhe Me Simptoma të Retinopatisë Diabetike (jo)

3. Përzgjidhni 10 imazhe normale të syve për të ekzekutuar kodin. Imazhet e zgjedhura në këtë rast ishin 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Vendosini këta numra në një matricë dhe caktojini ato në një ndryshore që do të thirret kur ngarkoni imazhet.

4. Përsëriteni hapin 3 për imazhet e retinës që janë diagnostikuar me retinopati diabetike. Imazhet e zgjedhura në këtë rast ishin 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

Hapi 8: Krijoni 2 Variabla (Normale dhe të Diagnostikuara) dhe Vendosini Secila në 0

Krijoni 2 variabla (normale dhe të diagnostikuara) dhe vendosini secila të barabarta me 0
Krijoni 2 variabla (normale dhe të diagnostikuara) dhe vendosini secila të barabarta me 0

Krijoni këto ndryshore para lakut for për të inicializuar numrat e lakut.

Hapi 9: Krijoni një lak për ngarkimin automatik të imazheve normale

Krijoni një loop për ngarkimin automatik të imazheve normale
Krijoni një loop për ngarkimin automatik të imazheve normale

1. Krijoni një lak for

2. Vendosni një ndryshore numërimi (i, në këtë rast) në një matricë të vlerave 1-10. Kjo ndryshore numërimi do të përdoret për të thirrur secilën imazh individualisht

3. Merrni elementin i në matricën e imazheve për të nxjerrë dhe konvertuar emrin e figurës nga një varg në një numër duke përdorur funksionin num2str.

Gjeni numrin e shifrave të pranishme në emrin e figurës duke përdorur funksionin numerik. Caktojeni këtë vlerë një ndryshoreje, shifra_ normale. Ky numër duhet të jetë 1 për numrat njëshifror, 2 për numrat dyshifrorë dhe 3 për numrat treshifrorë. Ky informacion do të përdoret për të thirrur automatikisht imazhe.

Hapi 10: Krijoni një lak për ngarkimin automatik të imazheve normale (jo)

Krijoni një loop për ngarkimin automatik të imazheve normale (jo)
Krijoni një loop për ngarkimin automatik të imazheve normale (jo)

3. Krijoni një deklaratë if që përmban të tre mundësitë nga hapat e mëparshëm. Nëse emri i figurës ka 1 shifër, imazhi do të quhet "im000", nëse ka 2 shifra, imazhi do të quhet "im00", dhe nëse ka 3 imazhi do të quhet "im0".

4. Nën secilën deklaratë if, caktoni një ndryshore në imread "im" nën deklaratën përkatëse, if me numrin e duhur të zerove (siç përshkruhet më sipër), e ndjekur nga i.

Hapi 11: Prerja e kufijve të figurës

Prerë kufijtë e imazhit
Prerë kufijtë e imazhit

Merrni imazhin origjinal dhe aplikoni një filtër imcrop për të eleminuar kufijtë e zinj dhe caktoni një ndryshore I_crop. Drejtkëndëshi i prerjeve specifikohet duke përdorur një matricë [95, 95, 500, 410].

Hapi 12: Krijoni një imazh në shkallë gri

Krijoni një imazh në shkallë gri
Krijoni një imazh në shkallë gri

Merrni imazhin e prerë dhe aplikoni filtrin rbg2gray për të ndryshuar imazhin në shkallë gri. Caktojeni këtë imazh në ndryshoren I2.

Hapi 13: Krijoni një imazh të kundërt

Krijoni një imazh të kundërt
Krijoni një imazh të kundërt

Merrni imazhin I2 dhe përdorni imadjust për të ringritur vlerat e intensitetit.

Merrni vlerat që bien brenda intervalit [0.2, 0.7] dhe rishitini ato në një [0, 1]. Gama është vendosur në 0.8 për ta bërë imazhin më të ndritshëm. Cakto imazhin e ri te I_adjusted.

Hapi 14: Përmirësoni imazhin e kontrastit

Përmirësoni imazhin e kontrastit
Përmirësoni imazhin e kontrastit

Merrni imazhin I_ të rregulluar dhe përdorni funksionin adapthisteq për të rritur kontrastin.

Sintaksa Adapthisteq kërkon emrin e imazhit, I_adjusted, ‘numTiles’, madhësinë e numTiles, ‘nBins’ dhe numrin e koshave. Madhësia e numTiles vendoset në [8 8], duke e ndarë imazhin në pllaka 8x8 dhe numri i koshave është vendosur në 28. Cakto imazhin në I_constrast.

Hapi 15: Krijoni një filtër mesatar

Krijoni një filtër mesatar
Krijoni një filtër mesatar

Krijoni një ndryshore të quajtur 'meanfilt' duke përdorur funksionin fspecial. Futni 'funksionin mesatar' për të krijuar filtrin mesatar dhe futni [90 90] për madhësinë e dritares rrëshqitëse.

Hapi 16: Kombinoni filtrin mesatar me imazhin e kundërt

Kombinoni filtrin mesatar me imazhin e kundërt
Kombinoni filtrin mesatar me imazhin e kundërt

Krijoni një ndryshore të re të quajtur mask_mean dhe përdorni funksionin imfilter për të marrë imazhin I_contrast dhe për të aplikuar filtrin mesatar të krijuar më parë.

Hapi 17: Bëni një maskë të re mesatare duke zbritur piksele

Bëni një maskë të re mesatare duke zbritur piksele
Bëni një maskë të re mesatare duke zbritur piksele

Krijoni një ndryshore të quajtur mask_mean2 dhe përdorni funksionin imsubtract për të zbritur vlerën e secilit piksel në kontrastin I_ nga pikseli përkatës në mask_mean.

Hapi 18: Krijoni një imazh të filtruar binar

Krijoni një imazh të filtruar binar
Krijoni një imazh të filtruar binar

Shndërroni imazhet e shkallës gri në të zezë dhe të bardhë duke përdorur imbinarize. Maska hyrëse_mean2, ‘adaptive’, ‘Polarizimi i planit të parë’, ‘e errët’, ‘Ndjeshmëria’, 0.6. Cakto këtë imazh të ri për të maskuar_binarizuar.

Hapi 19: Hiqni blozat më të vogla të gjetura në imazhet e filtruara

Hiqni blozat më të vogla të gjetura në imazhet e filtruara
Hiqni blozat më të vogla të gjetura në imazhet e filtruara

Hiqni objektet me lidhje më pak se 100 piksele duke përdorur funksionin bwareaopen në mask_binarize dhe vendosni vlerën e pragut në 100. Caktoni ndryshoren si bw.

Hapi 20: Krijoni një element të strukturimit të diskut

Krijoni një element të strukturimit të diskut
Krijoni një element të strukturimit të diskut

Krijoni një element strukturimi të diskut (me rreze 2) duke përdorur funksionin strel. Caktojeni atë se.

Hapi 21: Kryeni operacione mbyllëse morfologjike

Kryeni operacione mbyllëse morfologjike
Kryeni operacione mbyllëse morfologjike

Merrni bw dhe aplikoni funksionin imclose në elementin strukturor për të kryer një operacion të ngushtë morfologjik në objekt.

Hapi 22: Gjeni objektet me lidhshmëri së paku 8

Gjeni objektet me lidhje me të paktën 8
Gjeni objektet me lidhje me të paktën 8

Merrni bw dhe përdorni bwconncomp për të gjetur objektet me lidhje të paktën 8 në imazh. Caktoni daljen e numrit në cc_1.

Hapi 23: Gjeni numrin maksimal të pikselave të lidhur

Gjeni numrin maksimal të pikselave të lidhur
Gjeni numrin maksimal të pikselave të lidhur
Gjeni numrin maksimal të pikselave të lidhur
Gjeni numrin maksimal të pikselave të lidhur

Përdorni funksionin e argëtimit të qelizave për të kryer funksionin "numel" në çdo qelizë në CC. Kjo gjen numrin e elementeve në qelizën PixelIdxList. Caktoni vlerën "numPixels".

Gjeni vlerat maksimale në numPIxels. Cakto maksimumin më të madh në "më të madhin" dhe indeksin e vlerës maksimale në "idx".

Hapi 24: Vendosni vlerat maksimale të pikselëve në 0 dhe gjeni piksele me> = 26 lidhje me piksel

Hiqni enët e gjakut në imazh
Hiqni enët e gjakut në imazh

= 26 Lidhshmëri Pixel "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp

Shfaqja e figurës
Shfaqja e figurës

= 26 Lidhshmëri Pixel "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp

Hiqni enët dhe numëroni pikat e gjakut
Hiqni enët dhe numëroni pikat e gjakut

= 26 Lidhshmëri Pixel "src =" {{file.large_url | shto: 'auto = webp & frame = 1 & height = 300' %} ">

Diagnostifikoni imazhin e retinës në bazë të numrit të mpiksjeve të gjakut të identifikuara
Diagnostifikoni imazhin e retinës në bazë të numrit të mpiksjeve të gjakut të identifikuara

= 26 Lidhshmëri Pixel "src =" {{file.large_url | shto: 'auto = webp & frame = 1 & height = 300' %} ">

Vendosni pikselët me vlerat më të mëdha në imazhin "bw" në 0, duke i bërë pikselët të zinj.

Gjeni objektet me një lidhje prej të paktën 26 piksele në imazh duke përdorur bwconncomp. Cakto ndryshoren cc_1.

Hapi 25: Hiqni enët e gjakut në imazh

Hiqni enët e gjakut ende të pranishme në imazh duke përdorur funksionin bwpropfilt me një gamë prej [0, 0.9].

[0.9, 1] përjashtohet sepse vlerat afër 1 tregojnë një linjë. Caktoni në "RemoveVessels".

Hapi 26: Shfaqja e figurës

Shfaqni çdo imazh të filtruar në një nënplot. Shfaq me hyrje "kufitare" dhe "të ngushta", shfaq çdo imazh në një strukturë të nënplotit. Shtoni një titull në çdo imazh për të dalluar se cili filtër është përdorur.

Hapi 27: Hiqni Anijet dhe Numëroni Pikat e Gjakut

1. Merrni "RemoveVessels" dhe aplikoni funksionin "Centroid" në programprops për të identifikuar centroidet e objekteve në imazh. Këto objekte duhet të korrespondojnë me mpiksjen e gjakut të pranishme në imazh.

2. Numëroni numrin e mpiksjeve të gjakut të identifikuar duke marrë gjatësinë e matricës centroid.

Hapi 28: Diagnostifikoni imazhin e retinës në bazë të numrit të mpiksjeve të gjakut të identifikuara

Përdorni nëse deklaratat për të diagnostikuar imazhin bazuar në numrin e mpiksjes së gjakut të identifikuar.

Nëse numri i centroideve të identifikuar ishte më i vogël ose i barabartë me 5, imazhi identifikohej si normal.

Nëse numri i centroideve ishte më i madh se 5, imazhi u diagnostikua me retinopati diabetike.

Rezultati shtypet në dritaren e komandës duke përdorur fprintf.

Hapi 29: Nëse ka më shumë se 5 pika …

Nëse ka më shumë se 5 pika …
Nëse ka më shumë se 5 pika …

Përsëritni udhëzimet e mësipërme për imazhet e diagnostikuara si një deklaratë tjetër. Kjo pjesë do të funksionojë nëse numri i pikave është më i madh se 5.

Përfundoni deklaratën if.

Hapi 30: Përsëriteni procesin e filtrimit për imazhe normale me vlera të shifrës së figurës si 2 dhe 3

Përsëriteni procesin e filtrimit për imazhe normale me vlera të shifrës së figurës si 2 dhe 3
Përsëriteni procesin e filtrimit për imazhe normale me vlera të shifrës së figurës si 2 dhe 3
Përsëriteni procesin e filtrimit për imazhe normale me vlera të shifrës së figurës si 2 dhe 3
Përsëriteni procesin e filtrimit për imazhe normale me vlera të shifrës së figurës si 2 dhe 3

Përsëriteni procesin për pjesën e mbetur të origjinalit nëse deklaratat kur numelohen (numri i shifrave në numrin e figurës) është i barabartë me 2 dhe 3. Kjo përfundon ciklin for për imazhet normale.

Përfundoni lakin for.

Hapi 31: Përsëriteni të gjithë procesin për imazhet e diagnostikuara

Përsëriteni të gjithë procesin për imazhet e diagnostikuara
Përsëriteni të gjithë procesin për imazhet e diagnostikuara

Përsëriteni të gjithë procesin duke përdorur imazhet e diagnostikuara të listuara nga matrica "numrat_te_extract_diagnosed".

Sigurohuni që të kaloni çdo figurë (i) dhe ta ndryshoni atë në figurë (i+10) kështu që shifrat e diagnostikuara do të shfaqen si imazhe 11 deri në 20.

Hapi 32: Analiza statistikore

Analiza statistikore
Analiza statistikore

1. 'Actual_Diagnosis_Matrix' përdoret për të krahasuar rezultatet me diagnozën zyrtare të gjetur në skedarin txt. 10 zero e para tregojnë se 10 imazhet e para duhet të jenë normale. 10 të fundit tregojnë se 10 imazhet e fundit duhet të klasifikohen si retinopati diabetike.

2. Shenja e barabartë e dyfishtë e përdorur për të krijuar 'numër_i saktë' krijon një grup logjik duke krahasuar vlerën e elementeve përkatëse të 'Actual_Diagnosis_Matrix' me 'Diagnosis_Matrix' të krijuar nga laku for.

Për secilin element që përputhet me diagnozën do të shtohet 1, që do të thotë se kodi e ka diagnostikuar saktë atë imazh. Nëse është e pasaktë do të shtojë një 0 në matricë.

Pastaj, marrja e shumës së asaj i mbledh të gjitha ato. Me fjalë të tjera, ajo gjen shumën e imazheve të diagnostikuara saktë.

3. 'Përqindja_përfundim_i saktë' është përqindja e llogaritur se sa i saktë është diagnostikuar me kodin retinopatia diabetike. Numri i imazheve të diagnostikuara saktë ndahet me 20 (numri i përgjithshëm i fotografive) dhe shumëzohet me 100 për të gjetur përqindjen e diagnozave të suksesshme.

Hapi 33: Gjetja e Intervalit të Besimit

Gjetja e Intervalit të Besimit
Gjetja e Intervalit të Besimit

1. Sigurohuni që keni shkarkuar ModWald.m për ta thirrur atë si funksion. Pa funksionin, ju do të duhet të llogaritni intervalin e besimit duke përdorur metodën e modifikuar të Wald vetë.

2. Funksioni ModWald ka 2 hyrje ku e para është numri i imazheve të identifikuara saktë, dhe e dyta është sasia totale e imazheve.

3. Funksioni ModWald do të nxjerrë kufijtë e poshtëm dhe të sipërm të intervalit të besimit të proporcioneve për saktësinë e të dhënave të marra. Me fjalë të tjera, do të jepni një interval përqindjesh ku përqindja e vërtetë e saktësisë së kodit do të qëndrojë.

4. Përdorni fprintf më poshtë për të nxjerrë statistikat dhe intervalin e besimit në dritaren e komandës.

> fprintf ('%. 0f përqind e imazheve të retinës u diagnostikuan saktë sipas diagnozës zyrtare. / n / n', Final_percentage_correct)

> fprintf ('Përqindja e vërtetë në të cilën kodi ynë do të diagnostikojë saktë retinopatinë diabetike / n do të bjerë në rangun e [%.3f, %.3f], bazuar në 20 imazhe të kampionuara / n', më të ulët_ të lidhur, të sipërm të lidhur]

Recommended: