Mündəricat:

MATLAB ilə Diabetik Retinopatiyanın Avtomatik Diaqnozu: 33 Addım
MATLAB ilə Diabetik Retinopatiyanın Avtomatik Diaqnozu: 33 Addım

Video: MATLAB ilə Diabetik Retinopatiyanın Avtomatik Diaqnozu: 33 Addım

Video: MATLAB ilə Diabetik Retinopatiyanın Avtomatik Diaqnozu: 33 Addım
Video: Milk for Diabetes: Can Milk Raise Glucose Levels? | Healthy Drinks for Diabetics 2024, Noyabr
Anonim
MATLAB vasitəsilə Diabetik Retinopatiyanın Avtomatik Diaqnozu
MATLAB vasitəsilə Diabetik Retinopatiyanın Avtomatik Diaqnozu
MATLAB vasitəsilə Diabetik Retinopatiyanın Avtomatik Diaqnozu
MATLAB vasitəsilə Diabetik Retinopatiyanın Avtomatik Diaqnozu

(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

Ön şərtlər
Ö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)

Ön şərtlər (davam edir)
Ön şərtlər (davam edir)
Ön şərtlər (davam edir)
Ön şərtlər (davam edir)

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)

Ön şərtlər (davam edir)
Ön şərtlər (davam edir)

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)

Ön şərtlər (davam edir)
Ön şərtlər (davam edir)

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

Kodun Çalışmasına Hazırlaşmaq üçün Matlabı Təmizləyin
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

Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin
Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin
Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin
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)

Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin (davam edir)
Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin (davam edir)
Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin (davam edir)
Diabetik Retinopatiya Semptomları olan 10 Normal Göz Şəkili və 10 Şəkil seçin (davam edir)

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

2 Dəyişən (Normal və Diaqnozlu) yaradın və Hər birini 0 -a bərabər edin
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

Normal Şəkilləri Avtomatik Yükləmək üçün Döngə yaradın
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)

Normal Şəkilləri Avtomatik Yükləmək üçün Döngə yaradın (davamı yoxdur)
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

Şəklin sərhədlərini kəsin
Şə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

Boz miqyaslı bir şəkil yaradın
Boz miqyaslı 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

Ziddiyyətli bir şəkil yaradın
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

Kontrast Görüntüsünü artırın
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

Orta bir filtr yaradın
Orta bir 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

Orta Süzgəci Kontrastlı Görüntü ilə birləşdirin
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

Pikselləri çıxarmaqla yeni bir orta maska hazırlayın
Pikselləri çıxarmaqla yeni bir orta maska hazırlayın

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

İkili Süzülmüş Şəkil yaradın
İ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

Süzülmüş Şəkillərdə Tapılan Kiçik Ləkələri Silin
Süzülmüş Şəkillərdə Tapılan Kiçik Ləkələri Silin

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

Disk Strukturlaşdırma Elementi yaradın
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

Morfoloji Yaxın Əməliyyatlar həyata keçirin
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

Ən Az 8 -də Bağlanabilən Obyektləri Tapın
Ən Az 8 -də Bağlanabilən 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

Maksimum Bağlı Piksel Sayını Tapın
Maksimum Bağlı Piksel Sayını Tapın
Maksimum Bağlı Piksel Sayını Tapın
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

Şəkildəki qan damarlarını çıxarın
Şəkildəki qan damarlarını çıxarın

= 26 Piksel Bağlantısı "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp

Şəkil Ekranı
Şəkil Ekranı

= 26 Piksel Bağlantısı "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp

Gəmiləri çıxarın və Qan Bloblarını sayın
Gəmiləri çıxarın və Qan Bloblarını sayın

= 26 Piksel Bağlantısı "src =" {{file.large_url | əlavə et: 'auto = webp & frame = 1 & height = 300' %} ">

Müəyyən edilmiş qan laxtalarının sayına görə retina görüntüsünü diaqnoz edin
Müəyyən edilmiş qan laxtalarının sayına görə retina görüntüsünü diaqnoz edin

= 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 …

5 dən çox Blob varsa …
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

Şəkil Rəqəm Dəyərləri 2 və 3 olaraq Normal Şəkillər üçün Süzmə Prosesini Təkrarlayın
Şəkil Rəqəm Dəyərləri 2 və 3 olaraq Normal Şəkillər üçün Süzmə Prosesini Təkrarlayın
Şəkil Rəqəm Dəyərləri 2 və 3 olaraq Normal Şəkillər üçün Süzmə Prosesini Təkrarlayın
Şəkil Rəqəm Dəyərləri 2 və 3 olaraq Normal Şəkillər üçün Süzmə 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

Diaqnoz qoyulan şəkillər üçün bütün prosesi təkrarlayın
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

Statistik təhlil
Statistik təhlil

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

Güvən Aralığı Tapmaq
Güvən Aralığı Tapmaq

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ə: