Taula de continguts:
- Pas 1: requisits previs
- Pas 2: requisits previs (no)
- Pas 3: requisits previs (no)
- Pas 4: requisits previs (no)
- Pas 5: netejar Matlab per preparar-se per executar el codi
- Pas 6: seleccioneu 10 imatges normals dels ulls i 10 imatges amb símptomes de retinopatia diabètica
- Pas 7: seleccioneu 10 imatges normals dels ulls i 10 imatges amb símptomes de retinopatia diabètica (no)
- Pas 8: creeu 2 variables (normals i diagnosticades) i configureu-les iguals a 0
- Pas 9: creeu un bucle per penjar automàticament imatges normals
- Pas 10: creeu un bucle per carregar automàticament imatges normals (no)
- Pas 11: retalleu les vores de la imatge
- Pas 12: creeu una imatge a escala de grisos
- Pas 13: creeu una imatge contrastada
- Pas 14: Milloreu la imatge de contrast
- Pas 15: creeu un filtre mitjà
- Pas 16: combineu el filtre de mitjana amb la imatge contrastada
- Pas 17: feu una nova màscara mitjana restant píxels
- Pas 18: creeu una imatge filtrada binària
- Pas 19: suprimiu els blobs més petits que es troben a les imatges filtrades
- Pas 20: creeu un element d’estructura de disc
- Pas 21: realitzeu operacions de tancament morfològic
- Pas 22: cerqueu els objectes amb connectivitat de com a mínim 8
- Pas 23: cerqueu el nombre màxim de píxels connectats
- Pas 24: definiu els valors de píxels màxims a 0 i cerqueu píxels amb> = 26 píxels de connectivitat
- Pas 25: traieu els vasos sanguinis de la imatge
- Pas 26: visualització de la figura
- Pas 27: traieu els vaixells i compteu les taques de sang
- Pas 28: diagnostiqueu la imatge de la retina en funció del nombre de coàguls de sang identificats
- Pas 29: si hi ha més de 5 bombolles …
- Pas 30: Repetiu el procés de filtratge per a imatges normals amb valors de dígits d'imatge com a 2 i 3
- Pas 31: Repetiu tot el procés per a les imatges diagnosticades
- Pas 32: Anàlisi estadística
- Pas 33: trobar l'interval de confiança
Vídeo: Diagnòstic automatitzat de retinopatia diabètica mitjançant MATLAB: 33 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
(Vegeu l'esquema del codi anterior)
La retinopatia diabètica és una malaltia ocular relacionada amb la diabetis causada per nivells elevats de sucre en sang. Els nivells elevats de sucre en la sang fan que els vasos sanguinis de la retina s’inflin, cosa que provoca l’augment dels vasos sanguinis i fins i tot les fuites dels vasos, que condueixen a taques fosques en les imatges de la retina. Amb aquest codi, pretenem utilitzar l'aparició de taques de fuites de vasos sanguinis com a indicador de la retinopatia diabètica de fons, tot i que es necessitarien tècniques de diagnòstic addicionals al món real. L'objectiu d'aquest codi és automatitzar el processament d'imatges i el diagnòstic d'imatges retinianes per identificar els signes de retinopatia diabètica que es mostren a través de taques fosques a les imatges retinianes.
Es van processar 10 imatges de retina normals i 10 imatges de retina diagnosticades mitjançant un codi que primer llegeix i filtra les imatges i, a continuació, quantifica les taques fosques per determinar si hi ha símptomes de retinopatia diabètica, basant-se en un llindar determinat. Els resultats s'imprimeixen a la finestra d'ordres per a la interpretació del visor.
Pas 1: requisits previs
1. Assegureu-vos que teniu el programa MATLAB descarregat a l'ordinador.
2. Baixeu el fitxer txt que trobareu a l'enllaç. (Premeu 'Ctrl + s' per desar-lo al mateix directori que el codi MATLAB)
Pas 2: requisits previs (no)
4. Obriu MATLAB i escriviu "uiimport" a la finestra d'ordres.
5. Seleccioneu el fitxer officialdiagnoses.txt i importeu-lo a MATLAB com a matriu de cel·les.
6. Assegureu-vos de veure "diagnòstics oficials" com a variable a l'espai de treball.
Pas 3: requisits previs (no)
7. Descarregueu la funció ModWald.m, que es pot obtenir a partir del codi anterior o descarregueu-la des de Canvas.
(Codi proporcionat pel professor King i el professor Choi)
Pas 4: requisits previs (no)
8. Descarregueu les 400 imatges en brut de la secció de dades de The STARE Project.
Pas 5: netejar Matlab per preparar-se per executar el codi
Afegeix al codi:
1. tanca-ho tot (tanca totes les imatges obertes anteriorment)
2. clearvars - excepte diagnòstics oficials (neteja totes les variables, excepte el fitxer txt de diagnòstic oficial importat anteriorment)
3. cclc (Esborra la finestra d'ordres)
Pas 6: seleccioneu 10 imatges normals dels ulls i 10 imatges amb símptomes de retinopatia diabètica
1. Agafeu el fitxer de text de diagnòstic i extreu els noms de les imatges. Aquests noms es troben a la primera columna del fitxer de text, de manera que, per extreure'ls, escriviu 'officialdiagnoses (:, 1)'. La matriu de noms d'imatges s'ha assignat a una variable, "all_image_numbers"
2. Convertiu la variable all_image_numbers d'una matriu de cel·les a una matriu mitjançant la funció cell2mat
Pas 7: seleccioneu 10 imatges normals dels ulls i 10 imatges amb símptomes de retinopatia diabètica (no)
3. Seleccioneu 10 imatges normals per executar el codi. Les imatges seleccionades en aquest cas van ser 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Col·loqueu aquests números en una matriu i assigneu-los a una variable que es cridarà en carregar les imatges.
4. Repetiu el pas 3 per a les imatges retinianes que han estat diagnosticades amb retinopatia diabètica. Les imatges seleccionades en aquest cas van ser 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Pas 8: creeu 2 variables (normals i diagnosticades) i configureu-les iguals a 0
Creeu aquestes variables abans del bucle for per inicialitzar els números del bucle.
Pas 9: creeu un bucle per penjar automàticament imatges normals
1. Creeu un bucle for
2. Establiu una variable de recompte (i, en aquest cas) a una matriu de valors 1-10. Aquesta variable de recompte s'utilitzarà per cridar cada imatge individualment
3. Agafeu l'element i a la matriu d'imatges per extreure i convertir el nom de la imatge d'una cadena a un número mitjançant la funció num2str.
Cerqueu el nombre de dígits presents al nom de la imatge mitjançant la funció numeral. Assigneu aquest valor a una variable, dígits_normals. Aquest número hauria de ser 1 per als números d’un sol dígit, 2 per als números de dos dígits i 3 per als números de tres dígits. Aquesta informació s'utilitzarà per trucar automàticament a imatges.
Pas 10: creeu un bucle per carregar automàticament imatges normals (no)
3. Creeu una sentència if que contingui les tres possibilitats dels passos anteriors. Si el nom de la imatge té 1 dígit, la imatge s'anomenarà "im000", si té 2 dígits, la imatge s'anomenarà "im00" i, si en té 3, la imatge s'anomenarà "im0".
4. Sota cada sentència if, assigneu una variable per a llegir "im" a la sentència if corresponent amb el nombre adequat de zeros (tal com s'ha descrit anteriorment), seguida de la i.
Pas 11: retalleu les vores de la imatge
Agafeu la imatge original i apliqueu un filtre imcrop per eliminar els marges negres i assigneu-los a una variable I_crop. El rectangle de retall s’especifica mitjançant una matriu [95, 95, 500, 410].
Pas 12: creeu una imatge a escala de grisos
Agafeu la imatge retallada i apliqueu el filtre rbg2gray per canviar la imatge a escala de grisos. Assigneu aquesta imatge a la variable I2.
Pas 13: creeu una imatge contrastada
Agafeu la imatge I2 i utilitzeu imadjust per canviar els valors d’intensitat.
Agafeu valors que estiguin dins de l'interval [0,2, 0,7] i torneu a escalar-los a un [0, 1]. La gamma està configurada a 0,8 per fer la imatge més brillant. Assigneu la nova imatge a I_adjusted.
Pas 14: Milloreu la imatge de contrast
Agafeu la imatge I_adjusted i utilitzeu la funció adapthisteq per millorar el contrast.
La sintaxi Adapthisteq requereix el nom de la imatge, I_adjusted, "numTiles", la mida de numTiles, "nBins" i el nombre de contenidors. La mida de numTiles s'estableix a [8 8], dividint la imatge en mosaics de 8x8 i el nombre de contenidors a 28. Assigneu la imatge a I_constrast.
Pas 15: creeu un filtre mitjà
Creeu una variable anomenada "meanfilt" mitjançant la funció especial. Introduïu "funció mitjana" per crear el filtre de mitjana i inseriu [90 90] per a la mida de la finestra lliscant.
Pas 16: combineu el filtre de mitjana amb la imatge contrastada
Creeu una variable nova anomenada mask_mean i utilitzeu la funció imfilter per prendre la imatge I_contrast i aplicar el filtre mitjà creat anteriorment.
Pas 17: feu una nova màscara mitjana restant píxels
Creeu una variable anomenada mask_mean2 i utilitzeu la funció imsubtract per restar el valor de cada píxel a I_contrast del píxel corresponent a mask_mean.
Pas 18: creeu una imatge filtrada binària
Gireu les imatges en escala de grisos a blanc i negre amb imbinar. Entrada mask_mean2, "adaptative", "ForegroundPolarity", "dark", "Sensitivity", 0,6. Assigneu aquesta nova imatge a mask_binarize.
Pas 19: suprimiu els blobs més petits que es troben a les imatges filtrades
Elimineu objectes amb connectivitat inferior a 100 píxels mitjançant la funció bwareaopen de mask_binarize i establiu el valor llindar a 100. Assigneu la variable com a bw.
Pas 20: creeu un element d’estructura de disc
Creeu un element d’estructuració de disc (amb un radi de 2) mitjançant la funció strel. Assigneu-lo a se.
Pas 21: realitzeu operacions de tancament morfològic
Agafeu bw i apliqueu la funció imclose a l'element estructural per realitzar una operació morfològica propera a l'objecte.
Pas 22: cerqueu els objectes amb connectivitat de com a mínim 8
Agafeu bw i utilitzeu bwconncomp per trobar objectes amb una connectivitat mínima de 8 a la imatge. Assigneu el número de sortida a cc_1.
Pas 23: cerqueu el nombre màxim de píxels connectats
Utilitzeu la funció cellfun per realitzar la funció "numel" a totes les cel·les de CC. Es troba el nombre d'elements a la cel·la PixelIdxList. Assigneu valor a "numPixels".
Cerqueu els valors màxims en numPIxels. Assigneu el màxim màxim a "més gran" i l'índex del valor màxim a "idx".
Pas 24: definiu els valors de píxels màxims a 0 i cerqueu píxels amb> = 26 píxels de connectivitat
= 26 connectivitat de píxels "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 connectivitat de píxels "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
= 26 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
Establiu els píxels amb els valors més grans de la imatge "bw" a 0, fent que els píxels siguin negres.
Cerqueu els objectes amb una connectivitat mínima de 26 píxels a la imatge mitjançant bwconncomp. Assigna a la variable cc_1.
Pas 25: traieu els vasos sanguinis de la imatge
Traieu els vasos sanguinis encara presents a la imatge mitjançant la funció bwpropfilt amb un interval de [0, 0,9].
[0,9, 1] s'exclou perquè els valors propers a 1 indiquen una línia. Assigneu a "RemoveVessels".
Pas 26: visualització de la figura
Mostra cada imatge filtrada en una subtrama. Imshow. amb entrades "vores" i "ajustades", mostra cada imatge en una estructura de subtrama. Afegiu un títol a cada imatge per distingir quin filtre s'ha utilitzat.
Pas 27: traieu els vaixells i compteu les taques de sang
1. Agafeu "RemoveVessels" i apliqueu la funció "Centroid" a regionalprops per identificar els centroides dels objectes de la imatge. Aquests objectes haurien de correspondre a coàguls de sang presents a la imatge.
2. Compteu el nombre de coàguls de sang identificats prenent la longitud de la matriu del centreide.
Pas 28: diagnostiqueu la imatge de la retina en funció del nombre de coàguls de sang identificats
Utilitzeu declaracions if per diagnosticar la imatge en funció del nombre de coàguls de sang identificats.
Si el nombre de centroides identificats era inferior o igual a 5, la imatge s’identificaria com a normal.
Si el nombre de centroides va ser superior a 5, la imatge es va diagnosticar amb retinopatia diabètica.
El resultat s’imprimeix a la finestra d’ordres mitjançant fprintf.
Pas 29: si hi ha més de 5 bombolles …
Repetiu les instruccions anteriors per a les imatges diagnosticades com a declaració else. Aquesta part s’executarà si el nombre de blobs és superior a 5.
Finalitzeu la sentència if.
Pas 30: Repetiu el procés de filtratge per a imatges normals amb valors de dígits d'imatge com a 2 i 3
Repetiu el procés per a la resta de l'original si les sentències quan numel (el nombre de dígits del número de la imatge) és igual a 2 i 3. Això completa el bucle for de les imatges normals.
Finalitzeu el bucle for.
Pas 31: Repetiu tot el procés per a les imatges diagnosticades
Repetiu tot el procés utilitzant les imatges diagnosticades que apareixen a la matriu "números_extracte_diagnosticat".
Assegureu-vos de passar per totes les figures (i) i canviar-les per la figura (i + 10) perquè les figures diagnosticades apareguin com a imatges 11 a 20.
Pas 32: Anàlisi estadística
1. "Actual_Diagnosis_Matrix" s'utilitza per comparar els resultats amb el diagnòstic oficial que es troba al fitxer txt. Els primers 10 zeros indiquen que les primeres 10 imatges haurien de ser normals. Els darrers 10 indiquen que les darreres 10 imatges s’han de classificar com a retinopatia diabètica.
2. El doble signe d'igualtat utilitzat per crear "número_correcte" crea una matriu lògica comparant el valor dels elements corresponents de "Matriu_diagnòstic_actual" amb "Matriu de diagnòstic" creat a partir del bucle for.
Per a cada element que coincideixi amb el diagnòstic s'afegirà un 1, és a dir, el codi va diagnosticar correctament aquesta imatge. Si és incorrecte, afegirà un 0 a la matriu.
A continuació, prenent la suma d'això se sumen tots. Dit d’una altra manera, troba la suma d’imatges diagnosticades correctament.
3. "Final_percentage_correct" és el percentatge calculat de la precisió amb què el codi va diagnosticar retinopatia diabètica. El nombre d'imatges diagnosticades correctament es divideix per 20 (el nombre total d'imatges) i es multiplica per 100 per trobar el percentatge de diagnòstics reeixits.
Pas 33: trobar l'interval de confiança
1. Assegureu-vos que heu descarregat ModWald.m per trucar-lo com a funció. Sense la funció, hauríeu de calcular vosaltres mateixos l’interval de confiança mitjançant el mètode Wald modificat.
2. La funció ModWald té 2 entrades on la primera és el nombre d'imatges identificades correctament i la segona és la quantitat total d'imatges.
3. La funció ModWald generarà els límits inferior i superior de l'interval de confiança de proporcions per a la precisió de les dades mostrejades. En altres paraules, donareu un interval de percentatges on es troba el percentatge real de la precisió del codi.
4. Utilitzeu fprintf a continuació per publicar les estadístiques i l'interval de confiança a la finestra d'ordres.
> fprintf ('%. El 0% de les imatges de la retina es van diagnosticar correctament segons el diagnòstic oficial. / n / n', Final_percentage_correct)
> fprintf ("El percentatge real en què el nostre codi diagnosticarà correctament la retinopatia diabètica / n es situarà en el rang de [%.3f,%.3f], basat en 20 imatges mostrejades / n", lower_bound, upper_bound)
Recomanat:
ECG automatitzat: simulacions d’amplificació i filtratge mitjançant LTspice: 5 passos
ECG automàtic: simulacions d’amplificació i filtratge mitjançant LTspice: aquesta és la imatge del dispositiu final que construireu i un debat molt profund sobre cada part. També es descriuen els càlculs de cada etapa.La imatge mostra el diagrama de blocs d’aquest dispositiu Mètodes i materials: l’objectiu d’aquest pr
Aparcament fàcil reparació / diagnòstic: 4 passos
Assistència d’aparcament Fàcil reparació / diagnòstic: Ok ens permet començar, tinc un Chevrolet Avalanche de 2010 i té 4 sensors d’ajuda d’estacionament al para-xocs posterior. Aquest intratable es pot fer servir i transportar al millor que jo sàpiga, el temps que tingueu al davant o Rea o tots dos. Així que vaig anar al meu favor
Discs durs: diagnòstic, resolució de problemes i manteniment: 3 passos
Discs durs: diagnòstic, resolució de problemes i manteniment: què és un disc dur? - En poques paraules, el disc dur és el que emmagatzema totes les vostres dades. Allotja el disc dur, on es troben físicament tots els vostres fitxers i carpetes. La informació s’emmagatzema magnèticament al disc, de manera que roman a la unitat fins i tot quan
Guia de codificació / diagnòstic BMW INPA E60: 4 passos
Guia de codificació / diagnòstic de BMW INPA E60: en aquest article recopilaré alguns casos sobre la caixa de treball BMW INPA a BMW E60 i, si teniu una altra caixa de BMW INPA E60 que vulgueu compartir amb la gent, envieu-la al meu correu electrònic. el posarà aquí per compartir-lo
Bucle invers de tren automatitzat mitjançant Arduino: 10 passos (amb imatges)
Bucle invers de trens automàtic mitjançant Arduino: fer bucles inversos pot ajudar als models de disseny de trens a canviar la direcció dels trens, cosa que no es pot fer amb els plats giratoris. D'aquesta manera, podeu crear dissenys d'una sola via amb un bucle invers a cada extrem per fer circular els trens sense cap pausa ni interrupció