İçindekiler:
- Adım 1: Önkoşullar
- 2. Adım: Önkoşullar (devamı)
- 3. Adım: Önkoşullar (devamı)
- 4. Adım: Önkoşullar (devamı)
- Adım 5: Kod Çalıştırmaya Hazırlanmak için Matlab'ı Temizleyin
- Adım 6: 10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin
- 7. Adım: 10 Normal Göz Görüntüsü ve Diyabetik Retinopati Belirtileri Olan 10 Görüntü Seçin (devamı)
- Adım 8: 2 Değişken (Normal ve Tanılanmış) Oluşturun ve Her Birini 0'a Eşit Olarak Ayarlayın
- Adım 9: Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü oluşturun
- Adım 10: Normal Görüntüleri Otomatik Olarak Yüklemek için bir for Döngüsü oluşturun (devamı)
- 11. Adım: Resmin Kenarlıklarını Kırpın
- Adım 12: Gri Ölçekli Bir Görüntü Oluşturun
- Adım 13: Kontrastlı Bir Görüntü Oluşturun
- Adım 14: Kontrast Görüntüyü Geliştirin
- Adım 15: Ortalama Bir Filtre Oluşturun
- Adım 16: Ortalama Filtresini Kontrastlı Görüntüyle Birleştirin
- Adım 17: Pikselleri Çıkararak Yeni Bir Ortalama Maskesi Yapın
- Adım 18: İkili Filtrelenmiş Bir Görüntü Oluşturun
- 19. Adım: Filtrelenmiş Görüntülerde Bulunan Daha Küçük Blobları Kaldırın
- Adım 20: Bir Disk Yapılandırma Öğesi Oluşturun
- Adım 21: Morfolojik Kapatma İşlemlerini Gerçekleştirin
- Adım 22: Bağlantısı En Az 8 Olan Nesneleri Bulun
- 23. Adım: Maksimum Bağlı Piksel Sayısını Bulun
- Adım 24: Maksimum Piksel Değerlerini 0'a ayarlayın ve >=26 Piksel Bağlantılı Pikselleri Bulun
- Adım 25: Görüntüdeki Kan Damarlarını Çıkarın
- Adım 26: Şekil Ekranı
- 27. Adım: Damarları Çıkarın ve Kan Blobları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
- Adım 29: 5'ten Fazla Blob Varsa…
- Adım 30: Görüntü Basamak Değerleri 2 ve 3 Olan Normal Görüntüler İçin Filtreleme İşlemini Tekrarlayın
- Adım 31: Teşhis Edilen Görüntüler için Tüm İşlemi Tekrarlayın
- Adım 32: İstatistiksel Analiz
- Adım 33: Güven Aralığını Bulma
Video: MATLAB ile Diyabetik Retinopatinin Otomatik Tanısı: 33 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:20
(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
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ı)
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ı)
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ı)
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
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
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ı)
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
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
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ı)
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
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
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
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
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
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
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
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
İ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
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
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
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
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
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
"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…
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
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
"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
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
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:
Arduino İle Servo ve DHT11 Sıcaklık ve Nem Sensörü Kullanan Otomatik Soğutma Fanı: 8 Adım
Arduino İle Servo ve DHT11 Sıcaklık ve Nem Sensörü Kullanan Otomatik Soğutma Fanı: Bu derste nasıl başlatılacağını öğreneceğiz & sıcaklık belirli bir seviyenin üzerine çıktığında fanı döndürün
Temel Parametrelerin Otomatik Kontrolü ile Akvaryum Tasarımı: 4 Adım (Resimlerle)
Temel Parametrelerin Otomatik Kontrolü ile Akvaryum Tasarımı: Giriş Günümüzde deniz akvaryumu bakımı her akvaryumcu için mevcuttur. Bir akvaryum edinme sorunu zor değil. Ancak sakinlerin tam yaşam desteği, teknik arızalardan korunma, kolay ve hızlı bakım ve bakım için
ESP32 ile PWM - Arduino IDE ile ESP 32'de PWM ile LED Karartma: 6 Adım
ESP32 ile PWM | Arduino IDE ile ESP 32'de PWM ile LED Karartma: Bu talimatta Arduino IDE & PWM temel olarak herhangi bir MCU'dan analog çıkış üretmek için kullanılır ve bu analog çıkış 0V ile 3.3V (esp32 durumunda) arasında herhangi bir şey olabilir & itibaren
WiFi Otomatik Rezervuarlı Bitki Besleyici - İç/Dış Yetiştirme Kurulumu - Uzaktan İzleme ile Otomatik Su Tesisleri: 21 Adım
Rezervuarlı WiFi Otomatik Bitki Besleyici - İç/Dış Mekan Yetiştirme Kurulumu - Uzaktan İzleme ile Otomatik Su Tesisleri: Bu eğitimde, bitkileri otomatik olarak sulayan ve Adosia platformu kullanılarak uzaktan izlenebilen özel bir iç/dış bitki besleme sisteminin nasıl kurulacağını göstereceğiz
Usb Füze Fırlatıcınızı "Otomatik Hedefleyen Otomatik Taret!" Olarak Hackleyin: 6 Adım
Usb Füze Fırlatıcınızı "Otomatik Hedefleyen Otomatik Taret!" Olarak Hackleyin: Usb füze fırlatıcınızın kendi kendine nişan almasını nasıl sağlarsınız. Bu talimat, size usb füze fırlatıcınızı IR hedeflerini bulup nişan alacak bir otomatik taret içinde çevirmeyi öğretecektir. (üzgünüm sadece IR hedefleri)