İçindekiler:

MATLAB ile Diyabetik Retinopatinin Otomatik Tanısı: 33 Adım
MATLAB ile Diyabetik Retinopatinin Otomatik Tanısı: 33 Adım

Video: MATLAB ile Diyabetik Retinopatinin Otomatik Tanısı: 33 Adım

Video: MATLAB ile Diyabetik Retinopatinin Otomatik Tanısı: 33 Adım
Video: Bulanık Görüntü İşleme Kullanılarak Diyabetik Retinopati ve Makulopati Otomatik Tespit Sistemi 2024, Kasım
Anonim
MATLAB Yoluyla Diyabetik Retinopatinin Otomatik Tanısı
MATLAB Yoluyla Diyabetik Retinopatinin Otomatik Tanısı
MATLAB Yoluyla Diyabetik Retinopatinin Otomatik Tanısı
MATLAB Yoluyla Diyabetik Retinopatinin Otomatik Tanısı

(Yukarıdaki kod ana hatlarına bakın)

Diyabetik retinopati, yüksek kan şekeri seviyelerinin neden olduğu diyabetle ilişkili bir göz hastalığıdır. Yüksek kan şekeri seviyeleri, retinadaki kan damarlarının şişmesine neden olur, bu da damarların genişlemesine ve hatta damar sızıntılarına yol açarak retina görüntülerinde koyu lekelere yol açar. Bu kodla, gerçek dünyada daha ileri tanı teknikleri gerekli olsa da, arka plan diyabetik retinopatinin bir göstergesi olarak kan damarı sızıntı noktalarının görünümünü kullanmayı amaçlıyoruz. Bu kodun amacı, retina görüntülerinde karanlık noktalar aracılığıyla gösterilen diyabetik retinopati belirtilerini tanımlamak için görüntü işlemeyi ve retina görüntülerinin teşhisini otomatikleştirmektir.

10 normal retina görüntüsü ve 10 teşhis edilmiş retina görüntüsü, önce görüntüleri okuyan ve filtreleyen ve ardından belirli bir eşiğe dayalı olarak diyabetik retinopati semptomlarının mevcut olup olmadığını belirlemek için karanlık noktaları ölçen bir kod aracılığıyla işlendi. Sonuçlar daha sonra izleyici yorumu için komut penceresine yazdırılır.

Adım 1: Önkoşullar

Önkoşullar
Önkoşullar

1. MATLAB programını bilgisayarınıza indirdiğinizden emin olun.

2. Bağlantıda bulunan txt dosyasını indirin. (MATLAB Kodu ile aynı dizine kaydetmek için 'ctrl+s' tuşlarına basın)

2. Adım: Önkoşullar (devamı)

Önkoşullar (devamı)
Önkoşullar (devamı)
Önkoşullar (devamı)
Önkoşullar (devamı)

4. MATLAB'ı açın ve komut penceresine 'uiimport' yazın.

5. Officialdiagnoses.txt dosyasını seçin ve bir hücre matrisi olarak MATLAB'a aktarın.

6. Çalışma alanında bir değişken olarak "resmi teşhisleri" gördüğünüzden emin olun.

3. Adım: Önkoşullar (devamı)

Önkoşullar (devamı)
Önkoşullar (devamı)

7. Yukarıdaki koddan alabileceğiniz ModWald.m fonksiyonunu indirin veya Canvas'tan indirin.

(Profesör King ve Profesör Choi tarafından sağlanan kod)

4. Adım: Önkoşullar (devamı)

Önkoşullar (devamı)
Önkoşullar (devamı)

8. STARE Projesinin veri bölümünden 400 ham görüntüyü indirin.

Adım 5: Kod Çalıştırmaya Hazırlanmak için Matlab'ı Temizleyin

Kod Çalıştırmaya Hazırlanmak için Matlab'ı Temizleyin
Kod Çalıştırmaya Hazırlanmak için Matlab'ı Temizleyin

koda ekle:

1. tümünü kapat (Önceden açılan tüm resimleri kapatır)

2. clearvars - resmi teşhisler hariç (Daha önce içe aktarılan resmi teşhisler txt dosyası dışındaki tüm değişkenleri temizler)

3. cclc (Komut Penceresini Temizler)

Adım 6: 10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin

10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin
10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin
10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin
10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin

1. Tanı metin dosyasını alın ve görüntü adlarını çıkarın. Bu adlar metin dosyasının ilk sütununda yer alır, bu nedenle onları çıkarmak için 'officialdiagnoses(:, 1)' yazın. Görüntü adlarının matrisi, " all_image_numbers" adlı bir değişkene atanmıştır.

2. cell2mat işlevini kullanarak all_image_numbers değişkenini bir hücre dizisinden bir matris dizisine dönüştürün

7. Adım: 10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin (devamı)

10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin (devamı)
10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin (devamı)
10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin (devamı)
10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin (devamı)

3. Kodu çalıştırmak için 10 normal göz resmi seçin. Bu durumda seçilen görüntüler 278, 199, 241, 235, 35, 77, 82, 164, 239, 170 idi.

Bu sayıları bir matrise yerleştirin ve görüntüleri yüklerken çağrılacak bir değişkene atayın.

4. Diyabetik retinopati teşhisi konan retina görüntüleri için 3. adımı tekrarlayın. Bu durumda seçilen görüntüler 139, 137, 136, 135, 133, 140, 141, 116, 157, 188 idi.

Adım 8: 2 Değişken (Normal ve Tanılanmış) Oluşturun ve Her Birini 0'a Eşit Olarak Ayarlayın

2 Değişken (Normal ve Tanılanmış) Oluşturun ve Her Birini 0'a Eşit Olarak Ayarlayın
2 Değişken (Normal ve Tanılanmış) Oluşturun ve Her Birini 0'a Eşit Olarak Ayarlayın

Döngü numaralarını başlatmak için bu değişkenleri for döngüsünden önce oluşturun.

Adım 9: Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü oluşturun

Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü Oluşturun
Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü Oluşturun

1. Bir for döngüsü oluşturun

2. Bir sayma değişkenini (bu durumda i) 1-10 değerlerinin bir matrisine ayarlayın. Bu sayma değişkeni, her bir görüntüyü ayrı ayrı çağırmak için kullanılacaktır.

3. num2str işlevini kullanarak görüntü adını bir dizeden sayıya çıkarmak ve dönüştürmek için görüntülerin matrisindeki i öğesini alın.

Numel işlevini kullanarak görüntü adında bulunan basamak sayısını bulun. Bu değeri bir değişkene atayın, digits_normal. Bu sayı tek haneli sayılar için 1, çift haneli sayılar için 2 ve üç haneli sayılar için 3 olmalıdır. Bu bilgi, görüntüleri otomatik olarak aramak için kullanılacaktır.

Adım 10: Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü oluşturun (devamı)

Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü oluşturun (devamı)
Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü oluşturun (devamı)

3. Önceki adımlardan elde edilen üç olasılığı da içeren bir if ifadesi oluşturun. Resim adı 1 haneli ise im000, 2 haneli ise im00, 3 haneli ise im0 olarak adlandırılır.

4. Her if ifadesinin altında, karşılık gelen if ifadesinin altına uygun sayıda sıfır (yukarıda açıklandığı gibi) ve ardından i harfi gelecek şekilde “im” i okuyacak bir değişken atayın.

11. Adım: Resmin Kenarlıklarını Kırpın

Resmin Kenarlıklarını Kırp
Resmin Kenarlıklarını Kırp

Orijinal görüntüyü alın ve siyah kenarlıkları ortadan kaldırmak ve bir I_crop değişkenine atamak için bir ek kırpma filtresi uygulayın. Kırpma dikdörtgeni bir matris [95, 95, 500, 410] kullanılarak belirtilir.

Adım 12: Gri Ölçekli Bir Görüntü Oluşturun

Gri Ölçekli Bir Görüntü Oluşturun
Gri Ölçekli Bir Görüntü Oluşturun

Kırpılan görüntüyü alın ve görüntüyü gri tonlamalı olarak değiştirmek için rbg2gray filtresini uygulayın. Bu görüntüyü I2 değişkenine atayın.

Adım 13: Kontrastlı Bir Görüntü Oluşturun

Kontrastlı Bir Görüntü Oluşturun
Kontrastlı Bir Görüntü Oluşturun

I2 resmini çekin ve yoğunluk değerlerini yeniden ölçeklendirmek için imadjust'ı kullanın.

[0.2, 0.7] aralığına giren değerleri alın ve [0, 1] olarak yeniden ölçeklendirin. Görüntüyü daha parlak hale getirmek için gama 0,8'e ayarlanmıştır. Yeni görüntüyü I_adjusted'a atayın.

Adım 14: Kontrast Görüntüyü Geliştirin

Kontrast Görüntüyü Geliştirin
Kontrast Görüntüyü Geliştirin

I_adjusted görüntüsünü alın ve kontrastı geliştirmek için adapthisteq işlevini kullanın.

Adapthisteq sözdizimi, görüntü adını, I_adjusted, "numTiles", numTiles boyutunu, "nBins" ve kutu sayısını gerektirir. numTiles'ın boyutu [8 8] olarak ayarlandı, görüntüyü 8x8 döşemeye böldü ve bins sayısı 28'e ayarlandı. Görüntüyü I_constrast'a atayın.

Adım 15: Ortalama Bir Filtre Oluşturun

Ortalama Bir Filtre Oluşturun
Ortalama Bir Filtre Oluşturun

fspecial işlevini kullanarak 'meanfilt' adında bir değişken oluşturun. Ortalama alma filtresini oluşturmak için 'ortalama işlevi' girin ve kayan pencere boyutu için [90 90] ekleyin.

Adım 16: Ortalama Filtresini Kontrastlı Görüntüyle Birleştirin

Ortalama Filtresini Kontrastlı Görüntüyle Birleştirin
Ortalama Filtresini Kontrastlı Görüntüyle Birleştirin

mask_mean adında yeni bir değişken oluşturun ve I_contrast görüntüsünü almak ve önceden oluşturulmuş ortalama filtreyi uygulamak için imfilter işlevini kullanın.

Adım 17: Pikselleri Çıkararak Yeni Bir Ortalama Maskesi Yapın

Pikselleri Çıkararak Yeni Bir Ortalama Maskesi Oluşturun
Pikselleri Çıkararak Yeni Bir Ortalama Maskesi Oluşturun

mask_mean2 adında bir değişken oluşturun ve I_contrast içindeki her pikselin değerini mask_mean içindeki karşılık gelen pikselden çıkarmak için imsubtract işlevini kullanın.

Adım 18: İkili Filtrelenmiş Bir Görüntü Oluşturun

İkili Filtrelenmiş Bir Görüntü Oluşturun
İkili Filtrelenmiş Bir Görüntü Oluşturun

İmbinarize kullanarak gri tonlamalı görüntüleri siyah beyaza çevirin. Girdi mask_mean2, 'uyarlanabilir', 'ForegroundPolarity', 'dark', 'Sensitivity', 0.6. Bu yeni resmi mask_binarize'a atayın.

19. Adım: Filtrelenmiş Görüntülerde Bulunan Daha Küçük Blobları Kaldırın

Filtrelenmiş Görüntülerde Bulunan Küçük Blobları Kaldırın
Filtrelenmiş Görüntülerde Bulunan Küçük Blobları Kaldırın

mask_binarize üzerindeki bwareaopen işlevini kullanarak bağlantısı 100 pikselden az olan nesneleri kaldırın ve eşik değerini 100 olarak ayarlayın. Değişkeni bw olarak atayın.

Adım 20: Bir Disk Yapılandırma Öğesi Oluşturun

Disk Yapılandırma Öğesi Oluşturun
Disk Yapılandırma Öğesi Oluşturun

Strel işlevini kullanarak bir disk yapılandırma öğesi (2 yarıçaplı) oluşturun. Se'ye atayın.

Adım 21: Morfolojik Kapatma İşlemlerini Gerçekleştirin

Morfolojik Kapatma İşlemleri Gerçekleştirin
Morfolojik Kapatma İşlemleri Gerçekleştirin

Nesne üzerinde morfolojik bir kapatma işlemi gerçekleştirmek için bw'yi alın ve imclose işlevini yapısal elemana uygulayın.

Adım 22: Bağlantısı En Az 8 Olan Nesneleri Bulun

En Az 8 Bağlantılı Nesneleri Bulun
En Az 8 Bağlantılı Nesneleri Bulun

Görüntüde en az 8 bağlantısı olan nesneleri bulmak için bw alın ve bwconncomp kullanın. Sayı çıktısını cc_1'e atayın.

23. Adım: Maksimum Bağlı Piksel Sayısını Bulun

Maksimum Bağlı Piksel Sayısını Bulun
Maksimum Bağlı Piksel Sayısını Bulun
Maksimum Bağlı Piksel Sayısını Bulun
Maksimum Bağlı Piksel Sayısını Bulun

CC'deki her hücrede "numel" işlevini gerçekleştirmek için cellfun işlevini kullanın. Bu, PixelIdxList hücresindeki öğelerin sayısını bulur. “numPixels”e Değer Atayın.

numPIxels içindeki maksimum değerleri bulun. En büyük maksimumu “en büyük”e ve maksimum değerin indeksini “idx”e atayın.

Adım 24: Maksimum Piksel Değerlerini 0'a ayarlayın ve >=26 Piksel Bağlantılı Pikselleri Bulun

Görüntüdeki Kan Damarlarını Kaldır
Görüntüdeki Kan Damarlarını Kaldır
Şekil Ekranı
Şekil Ekranı
Damarları Kaldır ve Kan Bloblarını Say
Damarları Kaldır ve Kan Bloblarını Say
Tanımlanan Kan Pıhtılarının Sayısına Göre Retina Görüntüsünü Teşhis Edin
Tanımlanan Kan Pıhtılarının Sayısına Göre Retina Görüntüsünü Teşhis Edin

"bw" görüntüsündeki en büyük değerlere sahip pikselleri 0'a ayarlayın, pikselleri siyah yapın.

bwconncomp kullanarak görüntüdeki en az 26 piksel bağlantıya sahip nesneleri bulun. cc_1 değişkenine atayın.

Adım 25: Görüntüdeki Kan Damarlarını Çıkarın

[0, 0.9] aralığında bwpropfilt işlevini kullanarak görüntüde hala mevcut olan kan damarlarını çıkarın.

[0.9, 1] hariç tutulur çünkü 1'e yakın değerler bir çizgiyi gösterir. “Gemileri Kaldır” a atayın.

Adım 26: Şekil Ekranı

Filtrelenen her görüntüyü bir alt grafikte görüntüleyin. Göster. 'sınır' ve 'sıkı' girişlerle, her görüntüyü bir alt nokta yapısında görüntüler. Hangi filtrenin kullanıldığını ayırt etmek için her resme bir başlık ekleyin.

27. Adım: Damarları Çıkarın ve Kan Bloblarını Sayın

1. Görüntüdeki nesnelerin ağırlık merkezlerini belirlemek için “Kapları Kaldır”ı alın ve bölge proplarında “Centroid” özelliğini uygulayın. Bu nesneler, görüntüde bulunan kan pıhtılarına karşılık gelmelidir.

2. Merkez matrisinin uzunluğunu alarak tanımlanan kan pıhtılarının sayısını sayın.

Adım 28: Tanımlanan Kan Pıhtılarının Sayısına Dayalı Retina Görüntüsünü Tanılayın

Tanımlanan kan pıhtılarının sayısına göre görüntüyü teşhis etmek için if ifadelerini kullanın.

Tanımlanan merkez sayısı 5'e eşit veya daha azsa, görüntü normal olarak tanımlandı.

Merkez sayısı 5'ten büyükse, görüntü diyabetik retinopati ile teşhis edildi.

Sonuç, fprintf kullanılarak komut penceresine yazdırılır.

Adım 29: 5'ten Fazla Blob Varsa…

5'ten Fazla Blob Varsa…
5'ten Fazla Blob Varsa…

Teşhis edilen görüntüler için yukarıdaki talimatları başka bir ifade olarak tekrarlayın. Bu kısım, blob sayısı 5'ten büyükse çalışacaktır.

if ifadesini sonlandırın.

Adım 30: Görüntü Basamak Değerleri 2 ve 3 Olan Normal Görüntüler İçin Filtreleme İşlemini Tekrarlayın

Görüntü Basamak Değerleri 2 ve 3 Olan Normal Görüntüler İçin Tekrar Filtreleme İşlemi
Görüntü Basamak Değerleri 2 ve 3 Olan Normal Görüntüler İçin Tekrar Filtreleme İşlemi
Görüntü Basamak Değerleri 2 ve 3 Olan Normal Görüntüler İçin Tekrar Filtreleme İşlemi
Görüntü Basamak Değerleri 2 ve 3 Olan Normal Görüntüler İçin Tekrar Filtreleme İşlemi

Numel (görüntü numarasındaki basamak sayısı) 2 ve 3'e eşit olduğunda, orijinal if deyimlerinin geri kalanı için işlemi tekrarlayın. Bu, normal görüntüler için for döngüsünü tamamlar.

for döngüsünü sonlandırın.

Adım 31: Teşhis Edilen Görüntüler için Tüm İşlemi Tekrarlayın

Teşhis Edilen Görüntüler için Tüm İşlemi Tekrarla
Teşhis Edilen Görüntüler için Tüm İşlemi Tekrarla

"numbers_to_extract_diagnosed" matrisi tarafından listelenen teşhis edilen görüntüleri kullanarak tüm işlemi tekrarlayın.

Her şekli(i) gözden geçirdiğinizden ve onu şekil(i+10) olarak değiştirdiğinizden emin olun, böylece teşhis edilen rakamlar 11 ila 20 arası resimler olarak açılır.

Adım 32: İstatistiksel Analiz

İstatistiksel analiz
İstatistiksel analiz

1. 'Actual_Diagnosis_Matrix', sonuçları txt dosyasında bulunan resmi tanı ile karşılaştırmak için kullanılır. İlk 10 sıfır, ilk 10 görüntünün normal olması gerektiğini gösterir. Son 10 tanesi, son 10 görüntünün diyabetik retinopati olarak sınıflandırılması gerektiğini göstermektedir.

2. 'sayı_doğru' oluşturmak için kullanılan çift eşittir işareti, 'Actual_Diagnosis_Matrix'in karşılık gelen öğelerinin değerini for döngüsünden oluşturulan 'Diagnosis_Matrix' ile karşılaştırarak mantıksal bir dizi oluşturur.

Teşhisle eşleşen her öğe için 1 eklenecektir, bu da kodun o görüntüyü doğru şekilde teşhis ettiği anlamına gelir. Yanlışsa, matrise 0 ekleyecektir.

Sonra, bunun toplamını almak, hepsini toplar. Başka bir deyişle, doğru teşhis edilen görüntülerin toplamını bulur.

3. 'Nihai_yüzde_doğru' kodun diyabetik retinopati teşhisi koymasının ne kadar doğru olduğunun hesaplanan yüzdesidir. Doğru teşhis edilen görüntü sayısı 20'ye (toplam resim sayısı) bölünür ve başarılı teşhis yüzdesini bulmak için 100 ile çarpılır.

Adım 33: Güven Aralığını Bulma

Güven Aralığını Bulma
Güven Aralığını Bulma

1. ModWald.m'yi bir fonksiyon olarak çağırmak için indirdiğinizden emin olun. İşlev olmadan, değiştirilmiş Wald yöntemini kullanarak güven aralığını kendiniz hesaplamanız gerekir.

2. ModWald fonksiyonunun 2 girişi vardır; birincisi doğru tanımlanmış görüntülerin sayısı ve ikincisi ise toplam görüntü miktarıdır.

3. ModWald işlevi, örneklenen verilerin doğruluğu için oranların güven aralığının alt ve üst sınırlarını çıkaracaktır. Başka bir deyişle, kodun doğruluğunun gerçek yüzdesinin bulunacağı bir yüzde aralığı vereceksiniz.

4. İstatistikleri ve güven aralığını komut penceresine çıkarmak için aşağıdaki fprintf'i kullanın.

> fprintf('Retina görüntülerinin yüzde 0.0'ı resmi teşhise göre doğru teşhis edildi. \n\n', Final_percentage_correct)

> fprintf('Kodumuzun diyabetik retinopatiyi doğru bir şekilde teşhis edeceği gerçek yüzde\n, örneklenmiş 20 görüntüye dayalı olarak [%.3f, %.3f] aralığına düşecektir \n', alt_sınır, üst_sınır)

Önerilen: