Mündəricat:
- Addım 1: ön şərtlər
- Addım 2: Ön şərtlər (davam edin)
- Addım 3: Ön şərtlər (davam edin)
- Addım 4: Ön şərtlər (davam edin)
- Addım 5: Kodun Çalışmasına Hazırlaşmaq üçün Matlabı Təmizləyin
- Addım 6: Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin
- Addım 7: Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin (davamı yoxdur)
- Addım 8: 2 Dəyişən (Normal və Diaqnozlu) yaradın və Hər birini 0 -a bərabər edin
- Addım 9: Normal Şəkilləri Avtomatik Yükləmək üçün Döngə yaradın
- Addım 10: Normal Şəkilləri Avtomatik Yükləmək üçün Döngə yaradın (davamı yoxdur)
- Addım 11: Şəklin sərhədlərini kəsin
- Addım 12: Boz ölçülü bir şəkil yaradın
- Addım 13: Ziddiyyətli bir şəkil yaradın
- Addım 14: Kontrast Görüntüsünü artırın
- Addım 15: Orta Filtr yaradın
- Adım 16: Orta Süzgəci Kontrastlı Görüntü ilə Birləşdirin
- Addım 17: Pikselləri Çıxararaq Yeni Bir Orta Maska Edin
- Addım 18: İkili Süzülmüş Şəkil yaradın
- Addım 19: Süzülmüş Şəkillərdə Tapılan Kiçik Blobları çıxarın
- Addım 20: Disk Strukturlaşdırma Elementi yaradın
- Addım 21: Morfoloji Yaxın Əməliyyatlar həyata keçirin
- Addım 22: Ən az 8 -də Bağlantıya Sahə Obyektləri Tapın
- Addım 23: Maksimum Bağlı Piksel Sayını Tapın
- Addım 24: Maksimum Piksel Dəyərlərini 0 olaraq təyin edin və> = 26 Piksel Bağlantısı ilə Pikselləri Tapın
- Addım 25: Şəkildəki qan damarlarını çıxarın
- Addım 26: Şəkil Ekranı
- Addım 27: Gəmiləri çıxarın və Qan Bloblarını sayın
- Addım 28: Müəyyən edilmiş qan pıhtılarının sayına görə retina görüntüsünü diaqnoz edin
- Addım 29: 5 -dən çox Blob varsa …
- Addım 30: 2 və 3 kimi rəqəm rəqəmləri olan normal şəkillər üçün filtrləmə prosesini təkrarlayın
- Addım 31: Diaqnoz qoyulan şəkillər üçün bütün prosesi təkrarlayın
- Addım 32: Statistik Analiz
- Addım 33: Güvən Aralığı Tapın
Video: MATLAB ilə Diabetik Retinopatiyanın Avtomatik Diaqnozu: 33 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
(Yuxarıdakı kod konturuna baxın)
Diabetik retinopatiya, qanda şəkərin yüksək olmasından qaynaqlanan diabetlə əlaqəli göz xəstəliyidir. Yüksək qan şəkəri səviyyələri retinada olan damarların şişməsinə səbəb olur və bu da damarların genişlənməsinə və hətta damar sızmalarına səbəb olur ki, bu da retinal görüntülərdə qaranlıq ləkələrə səbəb olur. Bu kodla, qan damarlarının sızma nöqtələrinin görünüşünü fon şəkərli retinopatiyanın göstəricisi olaraq istifadə etməyi hədəfləyirik, baxmayaraq ki, real dünyada əlavə diaqnostika üsulları tələb olunacaq. Bu kodun məqsədi, retinal görüntülərdə qaranlıq ləkələr vasitəsilə göstərilən diabetik retinopatiya əlamətlərini müəyyən etmək üçün görüntü işlənməsini və retinal görüntülərin diaqnozunu avtomatlaşdırmaqdır.
10 normal retina görüntüsü və diaqnoz qoyulmuş 10 retina görüntüsü, əvvəlcə şəkilləri oxuyan və süzən bir kod vasitəsilə işlənmiş və sonra müəyyən bir eşik əsasında diabetik retinopatiya simptomlarının olub olmadığını müəyyən etmək üçün qaranlıq ləkələri ölçmüşdür. Nəticələr izləyicilərin təfsiri üçün komanda pəncərəsinə yazdırılır.
Addım 1: ön şərtlər
1. Kompüterinizdə MATLAB proqramının yükləndiyinə əmin olun.
2. Bağlantıda tapılan txt faylını yükləyin. (MATLAB Kodu ilə eyni qovluğa saxlamaq üçün 'ctrl+s' düymələrini basın)
Addım 2: Ön şərtlər (davam edin)
4. MATLAB -ı açın və əmr pəncərəsinə 'uiimport' yazın.
5. officialdiagnoses.txt faylını seçin və hüceyrə matrisi olaraq MATLAB -a daxil edin.
6. 'Officialdiagnoses'i' iş sahəsindəki bir dəyişən olaraq gördüyünüzdən əmin olun.
Addım 3: Ön şərtlər (davam edin)
7. Yuxarıdakı koddan əldə edə və ya Canvas -dan yükləyə bilən ModWald.m funksiyasını yükləyin.
(Kod, Professor King və Professor Choi tərəfindən verilmişdir)
Addım 4: Ön şərtlər (davam edin)
8. STARE Layihəsinin məlumat bölməsindən 400 xam şəkli yükləyin.
Addım 5: Kodun Çalışmasına Hazırlaşmaq üçün Matlabı Təmizləyin
Kodu əlavə et:
1. hamısını bağla (əvvəllər açılmış bütün şəkilləri bağlayır)
2. clearvars - rəsmi diaqnozlar istisna olmaqla (əvvəllər idxal edilmiş rəsmi diaqnoz txt faylı istisna olmaqla bütün dəyişənləri təmizləyir)
3. cclc (Komanda Pəncərəsini Silir)
Addım 6: Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin
1. Diaqnoz mətn faylını götürün və şəkil adlarını çıxarın. Bu adlar mətn faylının birinci sütununda var, belə ki onları çıxarmaq üçün 'officialdiagnoses (:, 1)' yazın. Şəkil adlarının matrisi "all_image_numbers" dəyişəninə verildi
2. cell2mat funksiyasından istifadə edərək all_image_numbers dəyişənini hüceyrə massivindən matrisə çevirmək
Addım 7: Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin (davamı yoxdur)
3. Kodu işə salmaq üçün 10 normal göz şəklini seçin. Bu vəziyyətdə seçilmiş şəkillər 278, 199, 241, 235, 35, 77, 82, 164, 239, 170 idi.
Bu ədədləri bir matrisə yerləşdirin və şəkilləri yükləyərkən çağırılacaq bir dəyişənə təyin edin.
4. Diabetik retinopatiya diaqnozu qoyulmuş retinal görüntülər üçün 3 -cü addımı təkrarlayın. Bu vəziyyətdə seçilmiş şəkillər 139, 137, 136, 135, 133, 140, 141, 116, 157, 188 idi.
Addım 8: 2 Dəyişən (Normal və Diaqnozlu) yaradın və Hər birini 0 -a bərabər edin
Döngə nömrələrini başlatmaq üçün for loopundan əvvəl bu dəyişənləri yaradın.
Addım 9: Normal Şəkilləri Avtomatik Yükləmək üçün Döngə yaradın
1. Bir döngə yaradın
2. Sayma dəyişənini (bu halda) 1-10 dəyərlər matrisinə təyin edin. Bu sayma dəyişən hər bir görüntüyə fərdi olaraq zəng etmək üçün istifadə ediləcək
3. Num2str funksiyasından istifadə edərək simli sətirdən rəqəm adını çıxarmaq və çevirmək üçün görüntü matrisindəki i elementini götürün.
Sayı funksiyasından istifadə edərək şəkil adında mövcud olan rəqəmlərin sayını tapın. Bu dəyişəni, digit_normal olaraq təyin edin. Bu rəqəm təkrəqəmli nömrələr üçün 1, cüt rəqəmli ədədlər üçün 2, üçrəqəmli ədədlər üçün 3 olmalıdır. Bu məlumatlar avtomatik olaraq şəkillərə zəng etmək üçün istifadə ediləcək.
Addım 10: Normal Şəkilləri Avtomatik Yükləmək üçün Döngə yaradın (davamı yoxdur)
3. Əvvəlki addımların hər üç ehtimalını ehtiva edən if ifadəsi yaradın. Şəkil adının 1 rəqəmi varsa, şəkil "im000", 2 rəqəmi varsa, şəkil "im00", 3 varsa şəkil "im0" olaraq adlandırılacaq.
4. Hər if ifadəsinin altında, müvafiq sıfırlar (yuxarıda təsvir edildiyi kimi) ilə uyğun gələn, ifadənin altında "im" oxumaq üçün bir dəyişən təyin edin, sonra i.
Addım 11: Şəklin sərhədlərini kəsin
Orijinal şəkli çəkin və qara haşiyələri aradan qaldırmaq və dəyişən bir I_crop təyin etmək üçün imcrop filtri tətbiq edin. Kəsmə düzbucaqlı bir matris istifadə edərək təyin olunur [95, 95, 500, 410].
Addım 12: Boz ölçülü bir şəkil yaradın
Kəsilmiş şəkli çəkin və görüntünü boz rəngə dəyişmək üçün rbg2gray filtrini tətbiq edin. Bu görüntünü I2 dəyişəninə təyin edin.
Addım 13: Ziddiyyətli bir şəkil yaradın
I2 şəklini çəkin və intensivlik dəyərlərini yenidən ölçmək üçün imadjust istifadə edin.
[0.2, 0.7] aralığına daxil olan dəyərləri götürün və yenidən [0, 1] ölçüsünə salın. Görüntünün daha parlaq olması üçün qamma 0,8 olaraq təyin edilmişdir. Yeni şəkli I_adjusted olaraq təyin edin.
Addım 14: Kontrast Görüntüsünü artırın
I_adjusted şəkli çəkin və kontrastı artırmaq üçün adapthisteq funksiyasından istifadə edin.
Adapthisteq sintaksisi, I_adjusted, 'numTiles', numTiles ölçüsü, 'nBins' və qutuların sayını tələb edir. NumTiles ölçüsü [8 8] olaraq təyin olunur, görüntünün 8x8 plitələrə bölünməsi və çöplərin sayı 28 olaraq təyin olunur. Şəkli I_constrast olaraq təyin edin.
Addım 15: Orta Filtr yaradın
Fspecial funksiyasından istifadə edərək 'Meanfilt' adlı bir dəyişən yaradın. Orta süzgəc yaratmaq üçün 'orta funksiya' daxil edin və sürüşmə pəncərə ölçüsü üçün [90 90] daxil edin.
Adım 16: Orta Süzgəci Kontrastlı Görüntü ilə Birləşdirin
Mas_mean adlı yeni bir dəyişən yaradın və I_contrast şəklini çəkmək və əvvəllər yaradılmış ortalama filtri tətbiq etmək üçün imfilter funksiyasından istifadə edin.
Addım 17: Pikselləri Çıxararaq Yeni Bir Orta Maska Edin
Mask_mean2 adlı bir dəyişən yaradın və imsubtract funksiyasından istifadə edərək I_contrastdakı hər bir pikselin dəyərini mask_mean -dakı müvafiq pikseldən çıxarın.
Addım 18: İkili Süzülmüş Şəkil yaradın
Imbinarize istifadə edərək boz rəngli şəkilləri ağ -ağa çevirin. Giriş mask_mean2, "adaptiv", "Ön plan Qütbü", "qaranlıq", "Həssaslıq", 0.6. Bu yeni görüntünü mask_binarize etmək üçün təyin edin.
Addım 19: Süzülmüş Şəkillərdə Tapılan Kiçik Blobları çıxarın
Mask_binarize üzərindəki bwareaopen funksiyasından istifadə edərək 100 pikseldən az əlaqəli obyektləri silin və eşik dəyərini 100 olaraq təyin edin. Dəyişəni bw olaraq təyin edin.
Addım 20: Disk Strukturlaşdırma Elementi yaradın
Strel funksiyasından istifadə edərək bir disk quruluş elementi yaradın (radiusu 2 ilə). Bunu təyin edin.
Addım 21: Morfoloji Yaxın Əməliyyatlar həyata keçirin
Bw götürün və obyekt üzərində morfoloji yaxın əməliyyat aparmaq üçün imclose funksiyasını struktur elementə tətbiq edin.
Addım 22: Ən az 8 -də Bağlantıya Sahə Obyektləri Tapın
Bw alın və bwconncomp istifadə edərək şəkildəki ən az 8 bağlantısı olan obyektləri tapın. Nömrənin çıxışını cc_1 olaraq təyin edin.
Addım 23: Maksimum Bağlı Piksel Sayını Tapın
CC -də hər bir hüceyrədə "numel" funksiyasını yerinə yetirmək üçün cellfun funksiyasından istifadə edin. Bu, PixelIdxList hüceyrəsindəki elementlərin sayını tapır. "NumPixels" ə dəyər təyin edin.
NumPIxels -də maksimum dəyərləri tapın. Ən böyük maksimumu "ən böyük" ə və maksimum dəyər indeksini "idx" ə təyin edin.
Addım 24: Maksimum Piksel Dəyərlərini 0 olaraq təyin edin və> = 26 Piksel Bağlantısı ilə Pikselləri Tapın
= 26 Piksel Bağlantısı "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Piksel Bağlantısı "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Piksel Bağlantısı "src =" {{file.large_url | əlavə et: 'auto = webp & frame = 1 & height = 300' %} ">
= 26 Piksel Bağlantısı "src =" {{file.large_url | əlavə et: 'auto = webp & frame = 1 & height = 300' %} ">
"Bw" şəkilindəki ən böyük dəyərləri olan pikselləri 0 olaraq təyin edin və pikselləri qara edin.
Bwconncomp istifadə edərək şəkildəki ən az 26 piksel bağlantısı olan obyektləri tapın. Cc_1 dəyişəninə təyin edin.
Addım 25: Şəkildəki qan damarlarını çıxarın
[0, 0.9] aralığında bwpropfilt funksiyasından istifadə edərək görüntüdə hələ də mövcud olan qan damarlarını çıxarın.
[0.9, 1] istisna olunur, çünki 1 -ə yaxın dəyərlər xətti göstərir. "Gəmiləri Sil" ə tapşırın.
Addım 26: Şəkil Ekranı
Süzülmüş hər bir görüntünü alt planda göstərin. Göstər. 'haşiyə' və 'sıx' girişləri ilə hər bir görüntüyü alt sahə quruluşunda göstərir. Hansı filtrin istifadə edildiyini ayırd etmək üçün hər bir görüntüyə bir başlıq əlavə edin.
Addım 27: Gəmiləri çıxarın və Qan Bloblarını sayın
1. "RemoveVessels" i götürün və şəkildəki obyektlərin centroidlərini müəyyən etmək üçün regionlarda "Centroid" xüsusiyyətini tətbiq edin. Bu cisimlər şəkildəki qan laxtalarına uyğun olmalıdır.
2. Centroid matrisin uzunluğunu alaraq təyin olunan qan laxtalarının sayını hesablayın.
Addım 28: Müəyyən edilmiş qan pıhtılarının sayına görə retina görüntüsünü diaqnoz edin
Təsbit edilən qan pıhtılarının sayına əsaslanaraq şəkli diaqnoz etmək üçün if ifadələrini istifadə edin.
Təsbit edilən sentroidlərin sayı 5 -dən az və ya bərabər idisə, görüntü normal olaraq təyin edildi.
Centroidlərin sayı 5 -dən çox olsaydı, şəkilə diabetik retinopatiya diaqnozu qoyulurdu.
Nəticə fprintf istifadə edərək əmr pəncərəsinə yazdırılır.
Addım 29: 5 -dən çox Blob varsa …
Diaqnozlu şəkillər üçün yuxarıdakı təlimatları başqa bir ifadə olaraq təkrarlayın. Blobların sayı 5 -dən çox olarsa bu hissə işləyəcək.
İf ifadəsini bitirin.
Addım 30: 2 və 3 kimi rəqəm rəqəmləri olan normal şəkillər üçün filtrləmə prosesini təkrarlayın
Nömrə (şəkil nömrəsindəki rəqəmlərin sayı) 2 və 3 -ə bərabərdirsə, orijinalın qalan hissəsi üçün prosesi təkrarlayın. Bu, normal şəkillər üçün for döngəsini tamamlayır.
For döngüsünü bitirin.
Addım 31: Diaqnoz qoyulan şəkillər üçün bütün prosesi təkrarlayın
"Numaralar_to_extract_diagnosed" matrisi ilə sadalanan diaqnostik şəkilləri istifadə edərək bütün prosesi təkrarlayın.
Hər bir rəqəmi keçdiyinizə əmin olun (i) və rəqəmə (i+10) qoyun, belə ki diaqnoz qoyulan rəqəmlər 11 -dən 20 -dək şəkillər kimi açılacaqdır.
Addım 32: Statistik Analiz
1. 'Aktual_Diagnosis_Matrix' nəticələri txt faylında tapılan rəsmi diaqnozla müqayisə etmək üçün istifadə olunur. İlk 10 sıfır, ilk 10 görüntünün normal olması lazım olduğunu göstərir. Son 10 şəkil göstərir ki, son 10 şəkil diabetik retinopatiya kimi təsnif edilməlidir.
2. 'sayı_düzəyi' yaratmaq üçün istifadə olunan ikiqat bərabərlik işarəsi, 'döngədən yaradılmış' Aktual_Diagnosis_Matrix 'elementlərinin dəyərini' loop 'dan' Diagnosis_Matrix 'ilə müqayisə edərək məntiqi bir sıra yaradır.
Diaqnoza uyğun gələn hər bir element üçün 1 əlavə olunacaq, yəni bu şəkil düzgün diaqnoz qoyulub. Səhv olarsa, matrisə 0 əlavə edəcək.
Sonra, bunların cəmini götürərək bütün bunları əlavə edir. Başqa sözlə, düzgün diaqnoz qoyulmuş şəkillərin cəmini tapır.
3. 'Final_percentage_c Corc', kodun diabetik retinopatiyaya nə qədər dəqiq diaqnoz qoyulduğunun hesablanmış faizidir. Doğru diaqnoz qoyulan şəkillərin sayı 20 -yə bölünür (şəkillərin ümumi sayı) və 100 -ə vurularaq uğurlu diaqnozların faizi tapılır.
Addım 33: Güvən Aralığı Tapın
1. Bir funksiya olaraq adlandırmaq üçün ModWald.m yüklədiyinizə əmin olun. Funksiya olmadan, dəyişdirilmiş Wald metodundan istifadə edərək, etibar intervalını özünüz hesablamalı olacaqsınız.
2. ModWald funksiyası 2 girişə malikdir, burada birincisi düzgün müəyyən edilmiş şəkillərin sayı, ikincisi isə şəkillərin ümumi miqdarıdır.
3. ModWald funksiyası, seçilmiş məlumatların dəqiqliyi üçün nisbətlərin etibarlılıq intervalının aşağı və yuxarı sərhədlərini çıxaracaq. Başqa sözlə, kodun doğruluğunun əsl faizinin yalan olduğu bir faiz aralığını verəcəksiniz.
4. Statistikanı və etibar aralığını əmr pəncərəsinə çıxarmaq üçün aşağıda fprintf istifadə edin.
> fprintf ('%. Retinal görüntülərin yüzdə 0f rəsmi diaqnozuna görə düzgün diaqnoz qoyuldu. / n / n', Final_fiziki_düzgün)
> fprintf ('Kodumuzun diabetik retinopatiyaya düzgün diaqnoz qoyacağı əsl faiz / n 20 nümunəli şəkilə əsaslanaraq [%.3f, %.3f] aralığına düşəcək / n', aşağı_bağlı, yuxarı_bağlı)
Tövsiyə:
Avtomatik Otaq İşıq və Fan İdarəedicisi İki Yönlü Ziyarətçi Sayğacı ilə: 3 addım
Avtomatik Otaq İşıq və Fan Nəzarətçisi İki Yönlü Ziyarətçi Sayğacı ilə: Çox vaxt stadionda, ticarət mərkəzində, ofislərdə, sinif otaqlarında ziyarətçi sayğaclarını görürük. İçəridə heç kim olmadıqda adamları necə sayırlar və işığı necə açırlar? Bu gün ikitərəfli ziyarətçi sayğacı olan avtomatik otaq işıq nəzarət cihazı layihəsiylə buradayıq
Arduino ilə Servo və DHT11 Temperatur və Nəmlik Sensorundan istifadə edərək Avtomatik Soyutma Fanı: 8 addım
Arduino ilə Servo və DHT11 Temperatur və Rütubət Sensorundan istifadə edərək Avtomatik Soyutma Fanı: Bu dərslikdə necə başlamağı öyrənəcəyik & temperatur müəyyən bir səviyyədən yuxarı qalxdıqda bir fanı döndərin
ESP32 ilə PWM - Arduino IDE ilə ESP 32 -də PWM ilə LED Karartma: 6 addım
ESP32 ilə PWM | Arduino IDE ilə ESP 32 -də PWM ilə LED Karartma: Bu təlimatlarda Arduino IDE istifadə edərək ESP32 ilə PWM siqnallarının necə yaradılacağını görəcəyik. PWM əsasən hər hansı bir MCU -dan analoq çıxışı yaratmaq üçün istifadə olunur və bu analog çıxış 0V ilə 3.3V arasında ola bilər (esp32 vəziyyətində) & dan
Su anbarı olan WiFi Avtomatik Bitki Besleyicisi - Bağlı/Açıq Kultivasiya Quraşdırması - Uzaqdan İzləmə ilə Avtomatik Su Bitkiləri: 21 Addım
Su anbarı olan WiFi Avtomatik Bitki Bəsləyicisi - Bağlı/Açıq Kultivasiya Quraşdırması - Uzaqdan İzləmə ilə Avtomatik olaraq Su Bitkiləri: Bu təlimatda bitkiləri avtomatik olaraq sulayan və Adosia platformasından istifadə edərək uzaqdan izlənilə bilən xüsusi bir qapalı/açıq bitki qidalandırıcı sisteminin necə qurulacağını göstərəcəyik
Ev avtomatlaşdırılması: Tiva TM4C123G istifadə edərək Bluetooth vasitəsi ilə Dimmer İdarəetmə ilə Avtomatik Şalter Lövhəsi: 7 addım
Ev Avtomatlaşdırması: Tiva TM4C123G istifadə edərək Bluetooth vasitəsi ilə Dimmer İdarəetmə ilə Avtomatik Anahtarlama Paneli: İndiki vaxtda həyatımızı həqiqətən asanlaşdıran televizorlarımız və digər elektron sistemlərimiz üçün uzaqdan idarəetmə vasitələri var. Boru işıqlarını, fanatları və digər elektrik cihazlarını idarə etmək imkanı verən ev avtomatlaşdırması haqqında heç düşünmüsünüzmü?