Cuprins:
- Pasul 1: premise
- Pasul 2: premise (nu)
- Pasul 3: premise (nu)
- Pasul 4: premise (nu)
- Pasul 5: Curățați Matlab pentru a vă pregăti pentru rularea codului
- Pasul 6: Selectați 10 imagini normale ale ochilor și 10 imagini cu simptome de retinopatie diabetică
- Pasul 7: Selectați 10 imagini normale ale ochilor și 10 imagini cu simptome de retinopatie diabetică (nu)
- Pasul 8: Creați 2 variabile (normale și diagnosticate) și setați-le la egal la 0
- Pasul 9: Creați un Buclă pentru a încărca automat imagini normale
- Pasul 10: Creați un buclă pentru a încărca automat imagini normale (nu)
- Pasul 11: Decupați marginile imaginii
- Pasul 12: Creați o imagine la scară de gri
- Pasul 13: Creați o imagine contrastată
- Pasul 14: Îmbunătățiți imaginea de contrast
- Pasul 15: Creați un filtru mediu
- Pasul 16: Combinați filtrul mediu cu imaginea contrastată
- Pasul 17: Faceți o nouă mască medie prin scăderea pixelilor
- Pasul 18: Creați o imagine filtrată binară
- Pasul 19: Eliminați bloburile mai mici găsite în imaginile filtrate
- Pasul 20: Creați un element de structurare a discului
- Pasul 21: Efectuați operațiuni de închidere morfologică
- Pasul 22: Găsiți obiectele cu conectivitate de cel puțin 8
- Pasul 23: Găsiți numărul maxim de pixeli conectați
- Pasul 24: Setați valorile maxime ale pixelilor la 0 și găsiți pixeli cu conectivitate> = 26 pixeli
- Pasul 25: Eliminați vasele de sânge din imagine
- Pasul 26: Afișare figură
- Pasul 27: Scoateți vasele și numărați pete de sânge
- Pasul 28: Diagnosticați imaginea retinei pe baza numărului de cheaguri de sânge identificate
- Pasul 29: Dacă există mai mult de 5 bloburi …
- Pasul 30: Repetați procesul de filtrare pentru imagini normale cu valori ale cifrelor de imagine 2 și 3
- Pasul 31: Repetați întregul proces pentru imaginile diagnosticate
- Pasul 32: Analiza statistică
- Pasul 33: Găsirea intervalului de încredere
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
(A se vedea schița codului de mai sus)
Retinopatia diabetică este o boală oculară legată de diabet, cauzată de niveluri ridicate de zahăr din sânge. Nivelurile ridicate de zahăr din sânge determină umflarea vaselor de sânge din retină, ceea ce duce la mărirea vaselor de sânge și chiar la scurgeri ale vaselor, care duc la pete întunecate în imaginile retiniene. Cu acest cod, ne propunem să utilizăm apariția petelor de scurgere a vaselor de sânge ca indicator al retinopatiei diabetice de fond, deși ar fi necesare tehnici de diagnostic suplimentare în lumea reală. Scopul acestui cod este de a automatiza procesarea imaginilor și diagnosticarea imaginilor retiniene pentru a identifica semnele de retinopatie diabetică prezentate prin pete întunecate în imaginile retiniene.
10 imagini retiniene normale și 10 imagini retiniene diagnosticate au fost procesate printr-un cod care mai întâi citește și filtrează imaginile și apoi cuantifică petele întunecate pentru a determina dacă sunt prezente simptome de retinopatie diabetică, pe baza unui prag dat. Rezultatele sunt apoi tipărite pe fereastra de comandă pentru interpretarea vizualizatorului.
Pasul 1: premise
1. Asigurați-vă că ați descărcat programul MATLAB pe computer.
2. Descărcați fișierul txt găsit în link. (Apăsați „ctrl + s” pentru a salva în același director cu codul MATLAB)
Pasul 2: premise (nu)
4. Deschideți MATLAB și tastați ‘uiimport’ în fereastra de comandă.
5. Selectați fișierul officialdiagnoses.txt și importați-l în MATLAB ca matrice de celule.
6. Asigurați-vă că vedeți „diagnosticarea oficială” ca o variabilă în spațiul de lucru.
Pasul 3: premise (nu)
7. Descărcați funcția ModWald.m, care poate fi obținută din codul de mai sus sau descărcați-o din Canvas.
(Cod furnizat de profesorul King și profesorul Choi)
Pasul 4: premise (nu)
8. Descărcați cele 400 de imagini brute din secțiunea de date a proiectului STARE.
Pasul 5: Curățați Matlab pentru a vă pregăti pentru rularea codului
Adăugați la cod:
1. închideți toate (Închide toate imaginile deschise anterior)
2. clearvars - cu excepția diagnosticelor oficiale (șterge toate variabilele, cu excepția fișierului txt diagnosticare oficial importat anterior)
3. cclc (șterge fereastra de comandă)
Pasul 6: Selectați 10 imagini normale ale ochilor și 10 imagini cu simptome de retinopatie diabetică
1. Luați fișierul text de diagnosticare și extrageți numele imaginilor. Aceste nume sunt conținute în prima coloană a fișierului text, astfel încât să le extrageți, tastați „oficialdiagnoses (:, 1)”. Matricea numelor de imagini a fost atribuită unei variabile, „all_image_numbers”
2. Convertiți variabila all_image_numbers dintr-o matrice de celule într-o matrice folosind funcția cell2mat
Pasul 7: Selectați 10 imagini normale ale ochilor și 10 imagini cu simptome de retinopatie diabetică (nu)
3. Selectați 10 imagini normale pentru ochi pentru a rula codul. Imaginile selectate în acest caz au fost 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Plasați aceste numere într-o matrice și atribuiți-le unei variabile care va fi apelată la încărcarea imaginilor.
4. Repetați pasul 3 pentru imaginile retiniene care au fost diagnosticate cu retinopatie diabetică. Imaginile selectate în acest caz au fost 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Pasul 8: Creați 2 variabile (normale și diagnosticate) și setați-le la egal la 0
Creați aceste variabile înainte de bucla for pentru a inițializa numerele buclei.
Pasul 9: Creați un Buclă pentru a încărca automat imagini normale
1. Creați o buclă for
2. Setați o variabilă de numărare (i, în acest caz) la o matrice de valori 1-10. Această variabilă de numărare va fi utilizată pentru a apela fiecare imagine în mod individual
3. Luați elementul i din matricea imaginilor pentru a extrage și converti numele imaginii dintr-un șir într-un număr folosind funcția num2str.
Găsiți numărul de cifre prezente în numele imaginii folosind funcția numel. Atribuiți această valoare unei variabile, cifre_normale. Acest număr ar trebui să fie 1 pentru numerele cu o singură cifră, 2 pentru numerele cu două cifre și 3 pentru numerele cu trei cifre. Aceste informații vor fi folosite pentru a apela automat imagini.
Pasul 10: Creați un buclă pentru a încărca automat imagini normale (nu)
3. Creați o declarație if care conține toate cele trei posibilități din pașii anteriori. Dacă numele imaginii are 1 cifră, imaginea va fi numită „im000”, dacă are 2 cifre, imaginea va fi numită „im00”, iar dacă are 3 imaginea va fi numită „im0”.
4. Sub fiecare instrucțiune if, atribuiți o variabilă pentru a citi „im” sub instrucțiunea corespunzătoare, if, cu numărul corespunzător de zerouri (așa cum este descris mai sus), urmată de i.
Pasul 11: Decupați marginile imaginii
Luați imaginea originală și aplicați un filtru imcrop pentru a elimina marginile negre și atribuiți o variabilă I_crop. Dreptunghiul de decupare este specificat folosind o matrice [95, 95, 500, 410].
Pasul 12: Creați o imagine la scară de gri
Luați imaginea decupată și aplicați filtrul rbg2gray pentru a schimba imaginea în tonuri de gri. Atribuiți această imagine variabilei I2.
Pasul 13: Creați o imagine contrastată
Luați imaginea I2 și utilizați imadjust pentru a redimensiona valorile intensității.
Luați valori care se încadrează în intervalul [0.2, 0.7] și redimensionați-le la un [0, 1]. Gama este setată la 0,8 pentru a face imaginea mai luminoasă. Atribuiți noua imagine la I_adjusted.
Pasul 14: Îmbunătățiți imaginea de contrast
Luați imaginea I_adjusted și utilizați funcția adapthisteq pentru a spori contrastul.
Sintaxa Adapthisteq necesită numele imaginii, I_adjusted, „numTiles”, dimensiunea numTiles, „nBins” și numărul de bin-uri. Dimensiunea numTiles este setată la [8 8], împărțind imaginea în dale 8x8 și numărul de coșuri este setat la 28. Alocați imaginea la I_constrast.
Pasul 15: Creați un filtru mediu
Creați o variabilă numită „meanfilt” utilizând funcția specială. Introduceți „funcția medie” pentru a crea filtrul de medie și introduceți [90 90] pentru dimensiunea ferestrei glisante.
Pasul 16: Combinați filtrul mediu cu imaginea contrastată
Creați o nouă variabilă numită mask_mean și utilizați funcția imfilter pentru a lua imaginea I_contrast și pentru a aplica filtrul mediu creat anterior.
Pasul 17: Faceți o nouă mască medie prin scăderea pixelilor
Creați o variabilă numită mask_mean2 și utilizați funcția imsubtract pentru a scădea valoarea fiecărui pixel din I_contrast din pixelul corespunzător din mask_mean.
Pasul 18: Creați o imagine filtrată binară
Transformați imaginile în tonuri de gri în alb și negru folosind imbinarize. Intrare mask_mean2, ‘adaptive’, ‘ForegroundPolarity’, ‘dark’, ‘Sensitivity’, 0.6. Atribuiți această nouă imagine la mask_binarize.
Pasul 19: Eliminați bloburile mai mici găsite în imaginile filtrate
Eliminați obiectele cu conectivitate mai mică de 100 pixeli utilizând funcția bwareaopen de pe mask_binarize și setați valoarea pragului la 100. Alocați variabila ca bw.
Pasul 20: Creați un element de structurare a discului
Creați un element de structurare a discului (cu o rază de 2) folosind funcția strel. Atribuiți-l la se.
Pasul 21: Efectuați operațiuni de închidere morfologică
Luați bw și aplicați funcția imclose elementului structural pentru a efectua o operație morfologică apropiată asupra obiectului.
Pasul 22: Găsiți obiectele cu conectivitate de cel puțin 8
Luați bw și utilizați bwconncomp pentru a găsi obiectele cu conectivitate de cel puțin 8 în imagine. Atribuiți numărul de ieșire la cc_1.
Pasul 23: Găsiți numărul maxim de pixeli conectați
Utilizați funcția cellfun pentru a efectua funcția „numel” pe fiecare celulă din CC. Aceasta găsește numărul de elemente din celula PixelIdxList. Atribuiți valoare „numPixels”.
Găsiți valorile maxime în numPIxels. Atribuiți cel mai mare maxim la „cel mai mare” și indicele valorii maxime la „idx”.
Pasul 24: Setați valorile maxime ale pixelilor la 0 și găsiți pixeli cu conectivitate> = 26 pixeli
= 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 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'%} ">
Setați pixelii cu cele mai mari valori din imaginea „bw” la 0, făcând pixelii negri.
Găsiți obiecte cu o conectivitate de cel puțin 26 de pixeli în imagine folosind bwconncomp. Alocați variabilei cc_1.
Pasul 25: Eliminați vasele de sânge din imagine
Îndepărtați vasele de sânge încă prezente în imagine utilizând funcția bwpropfilt cu un interval de [0, 0,9].
[0.9, 1] este exclus deoarece valorile apropiate de 1 indică o linie. Alocați la „RemoveVessels”.
Pasul 26: Afișare figură
Afișați fiecare imagine filtrată într-un subplot. Imshow. cu intrări „border” și „tight”, afișează fiecare imagine într-o structură subplot. Adăugați un titlu fiecărei imagini pentru a distinge ce filtru a fost utilizat.
Pasul 27: Scoateți vasele și numărați pete de sânge
1. Luați „RemoveVessels” și aplicați caracteristica „Centroid” în regionprops pentru a identifica centrele obiectelor din imagine. Aceste obiecte ar trebui să corespundă cheagurilor de sânge prezente în imagine.
2. Numărați numărul de cheaguri de sânge identificate luând lungimea matricei centrului.
Pasul 28: Diagnosticați imaginea retinei pe baza numărului de cheaguri de sânge identificate
Utilizați declarațiile if pentru a diagnostica imaginea pe baza numărului de cheaguri de sânge identificate.
Dacă numărul de centroizi identificați a fost mai mic sau egal cu 5, imaginea a fost identificată ca fiind normală.
Dacă numărul de centroizi a fost mai mare de 5, imaginea a fost diagnosticată cu retinopatie diabetică.
Rezultatul este tipărit pe fereastra de comandă folosind fprintf.
Pasul 29: Dacă există mai mult de 5 bloburi …
Repetați instrucțiunile de mai sus pentru imaginile diagnosticate ca o afirmație else. Această parte va rula dacă numărul de blob-uri este mai mare de 5.
Încheiați declarația if.
Pasul 30: Repetați procesul de filtrare pentru imagini normale cu valori ale cifrelor de imagine 2 și 3
Repetați procesul pentru restul originalului dacă instrucțiunile atunci când numel (numărul de cifre din numărul imaginii) este egal cu 2 și 3. Aceasta completează bucla for pentru imaginile normale.
Încheiați bucla for.
Pasul 31: Repetați întregul proces pentru imaginile diagnosticate
Repetați întregul proces folosind imaginile diagnosticate enumerate de matricea „numere_pentru_extractare_diagnosticate”.
Asigurați-vă că parcurgeți fiecare cifră (i) și schimbați-o în cifră (i + 10), astfel încât cifrele diagnosticate să apară ca imagini 11-20.
Pasul 32: Analiza statistică
1. „Actual_Diagnosis_Matrix” este utilizat pentru a compara rezultatele cu diagnosticul oficial găsit în fișierul txt. Primele 10 zerouri indică faptul că primele 10 imagini ar trebui să fie normale. Ultimele 10 indică faptul că ultimele 10 imagini ar trebui clasificate ca retinopatie diabetică.
2. Semnul dublu egal utilizat pentru a crea „număr_corect” creează o matrice logică prin compararea valorii elementelor corespunzătoare din „Actual_Diagnosis_Matrix” cu „Diagnosis_Matrix” creat din bucla for.
Pentru fiecare element care se potrivește cu diagnosticul se va adăuga un 1, adică codul a diagnosticat corect acea imagine. Dacă este incorect, va adăuga un 0 la matrice.
Apoi, luând suma, se adaugă toate. Cu alte cuvinte, găsește suma imaginilor diagnosticate corect.
3. „Final_percentage_correct” este procentul calculat din cât de precis este codul diagnosticat cu retinopatie diabetică. Numărul de imagini diagnosticate corect este împărțit la 20 (numărul total de imagini) și înmulțit cu 100 pentru a găsi procentul de diagnostice reușite.
Pasul 33: Găsirea intervalului de încredere
1. Asigurați-vă că ați descărcat ModWald.m pentru a-l apela ca funcție. Fără funcție, ar trebui să calculați singur intervalul de încredere folosind metoda Wald modificată.
2. Funcția ModWald are 2 intrări în care prima este numărul de imagini identificate corect, iar a doua este cantitatea totală de imagini.
3. Funcția ModWald va afișa limitele inferioară și superioară ale intervalului de încredere al proporțiilor pentru acuratețea datelor eșantionate. Cu alte cuvinte, vă va oferi un interval de procente în care se află procentul real al acurateței codului.
4. Utilizați fprintf de mai jos pentru a afișa statisticile și intervalul de încredere în fereastra de comandă.
> fprintf ('%. 0f la sută din imaginile retiniene au fost diagnosticate corect conform diagnosticului oficial. / n / n', Final_percentage_correct)
> fprintf („Procentul adevărat la care codul nostru va diagnostica corect retinopatia diabetică va intra în intervalul [%.3f,%.3f], pe baza a 20 de imagini eșantionate / n ', lower_bound, upper_bound)
Recomandat:
Controlul Ledului prin intermediul aplicației Blynk folosind Nodemcu prin internet: 5 pași
Controlul Ledului prin intermediul aplicației Blynk folosind Nodemcu prin Internet: Bună ziua tuturor Astăzi vă vom arăta cum puteți controla un LED folosind un smartphone pe internet
Creați-vă propriul sistem de urmărire a securității prin SMS prin GPS: 5 pași (cu imagini)
Asigurați-vă propriul sistem de urmărire a securității prin SMS GPS: În acest proiect vă voi arăta cum să combinați un modul SIM5320 3G cu un Arduino și un traductor piezoelectric ca senzor de șoc pentru a crea un sistem de urmărire a securității care vă va trimite locația dvs. vehicul prețios prin SMS când
Controlați dispozitivele prin internet prin browser. (IoT): 6 pași
Controlați dispozitivele prin internet prin browser. (IoT): În acest Instructable vă voi arăta cum puteți controla dispozitive precum LED-uri, relee, motoare etc. pe internet prin intermediul browserului web. Și puteți accesa comenzile în siguranță pe orice dispozitiv. Platforma web pe care am folosit-o aici este RemoteMe.org visit
RC Car Hack - Controlat prin Bluetooth prin aplicația Android: 3 pași (cu imagini)
RC Car Hack - Controlat prin Bluetooth prin intermediul aplicației Android: Sunt sigur că fiecare dintre voi puteți găsi acasă mașină RC neutilizată. Această instrucțiune vă va ajuta să schimbați vechea mașină RC în cadou original :) Datorită faptului că mașina RC pe care o aveam avea dimensiuni mici, am ales Arduino Pro Mini ca controler principal. O alta
Braț robot antrenabil controlat prin gest prin Bluetooth către Arduino: 4 pași
Braț robot antrenabil controlat prin gest prin Bluetooth către Arduino: Există două moduri în braț. În primul rând este modul manual, care poate muta brațul cu bluetooth în telefonul mobil, mutând glisoarele din aplicație. În același timp, îți poți salva pozițiile și poți juca … Al doilea este modul Gesturi care folosește ph-ul tău