Daftar Isi:

Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB: 33 Langkah
Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB: 33 Langkah

Video: Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB: 33 Langkah

Video: Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB: 33 Langkah
Video: Retinopati Diabetikum (Komplikasi DM) - Patogenesis Jalur Poliol, Jenis, Diagnosis, Tatalaksana 2024, November
Anonim
Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB
Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB
Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB
Diagnosis Otomatis Retinopati Diabetik Melalui MATLAB

(Lihat garis besar kode di atas)

Retinopati diabetik adalah penyakit mata terkait diabetes yang disebabkan oleh kadar gula darah yang tinggi. Kadar gula darah yang tinggi menyebabkan pembuluh darah di retina membengkak, yang menyebabkan pembuluh darah membesar dan bahkan kebocoran pembuluh darah, yang menyebabkan bintik-bintik gelap pada gambar retina. Dengan kode ini, kami bertujuan untuk menggunakan munculnya titik kebocoran pembuluh darah sebagai indikator latar belakang retinopati diabetik, meskipun teknik diagnosis lebih lanjut akan diperlukan di dunia nyata. Tujuan dari kode ini adalah untuk mengotomatisasi pemrosesan gambar dan mendiagnosis gambar retina untuk mengidentifikasi tanda-tanda retinopati diabetik yang ditunjukkan melalui bintik-bintik gelap pada gambar retina.

10 gambar retina normal dan 10 gambar retina yang didiagnosis diproses melalui kode yang pertama membaca dan menyaring gambar dan kemudian menghitung bintik-bintik gelap untuk menentukan apakah ada gejala retinopati diabetik, berdasarkan ambang batas yang diberikan. Hasilnya kemudian dicetak ke jendela perintah untuk interpretasi pemirsa.

Langkah 1: Prasyarat

Prasyarat
Prasyarat

1. Pastikan Anda telah mengunduh program MATLAB di komputer Anda.

2. Unduh file txt yang ada di tautan. (Tekan 'ctrl+s' untuk menyimpan ke direktori yang sama dengan Kode MATLAB)

Langkah 2: Prasyarat (lanjutan)

Prasyarat (lanjutan)
Prasyarat (lanjutan)
Prasyarat (lanjutan)
Prasyarat (lanjutan)

4. Buka MATLAB dan ketik 'uiimport' ke dalam jendela perintah.

5. Pilih file officialdiagnoses.txt dan impor ke MATLAB sebagai matriks sel.

6. Pastikan Anda melihat 'diagnosis resmi' sebagai variabel di ruang kerja.

Langkah 3: Prasyarat (lanjutan)

Prasyarat (lanjutan)
Prasyarat (lanjutan)

7. Unduh fungsi ModWald.m, yang dapat diperoleh dari kode di atas atau unduh dari Canvas.

(Kode disediakan oleh Profesor King dan Profesor Choi)

Langkah 4: Prasyarat (lanjutan)

Prasyarat (lanjutan)
Prasyarat (lanjutan)

8. Unduh 400 gambar mentah dari bagian data Proyek STARE.

Langkah 5: Bersihkan Matlab untuk Mempersiapkan Menjalankan Kode

Bersihkan Matlab untuk Mempersiapkan Menjalankan Kode
Bersihkan Matlab untuk Mempersiapkan Menjalankan Kode

Tambahkan ke kode:

1. tutup semua (Menutup semua gambar yang dibuka sebelumnya)

2. clearvars - kecuali diagnosis resmi (Menghapus semua variabel kecuali file txt diagnosis resmi yang sebelumnya diimpor)

3. cclc (Membersihkan Jendela Perintah)

Langkah 6: Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik

Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik

1. Ambil file teks diagnosis dan ekstrak nama gambar. Nama-nama ini terdapat di kolom pertama file teks sehingga untuk mengekstraknya ketik 'officialdiagnoses(:, 1)'. Matriks nama gambar ditetapkan ke variabel, " all_image_numbers"

2. Konversi variabel all_image_numbers dari array sel ke array matriks menggunakan fungsi cell2mat

Langkah 7: Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik (Lanjutan)

Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Diabetic Retinopathy (Lanjutan)
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Diabetic Retinopathy (Lanjutan)
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Diabetic Retinopathy (Lanjutan)
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Diabetic Retinopathy (Lanjutan)

3. Pilih 10 gambar mata normal untuk menjalankan kode. Gambar yang dipilih dalam kasus ini adalah 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Tempatkan angka-angka ini dalam matriks dan tetapkan ke variabel yang akan dipanggil saat memuat gambar.

4. Ulangi langkah 3 untuk gambar retina yang telah didiagnosis dengan retinopati diabetik. Gambar yang dipilih dalam kasus ini adalah 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.

Langkah 8: Buat 2 Variabel (Normal dan Didiagnosis) dan Tetapkan Masing-masing Sama dengan 0

Buat 2 Variabel (Normal dan Didiagnosis) dan Tetapkan Masing-masing Sama dengan 0
Buat 2 Variabel (Normal dan Didiagnosis) dan Tetapkan Masing-masing Sama dengan 0

Buat variabel-variabel ini sebelum for loop untuk menginisialisasi nomor loop.

Langkah 9: Buat for Loop untuk Mengunggah Gambar Normal Secara Otomatis

Buat for Loop untuk Mengunggah Gambar Normal Secara Otomatis
Buat for Loop untuk Mengunggah Gambar Normal Secara Otomatis

1. Buat perulangan for

2. Tetapkan variabel penghitungan (i, dalam hal ini) ke matriks dengan nilai 1-10. Variabel penghitungan ini akan digunakan untuk memanggil setiap gambar satu per satu

3. Ambil elemen i dalam matriks gambar untuk mengekstrak dan mengubah nama gambar dari string menjadi angka menggunakan fungsi num2str.

Temukan jumlah digit yang ada dalam nama gambar menggunakan fungsi angka. Tetapkan nilai ini ke variabel, digits_normal. Angka ini harus 1 untuk angka satu digit, 2 untuk angka dua digit, dan 3 untuk angka tiga digit. Informasi ini akan digunakan untuk memanggil gambar secara otomatis.

Langkah 10: Buat for Loop untuk Mengunggah Gambar Normal secara Otomatis (lanjutan)

Buat for Loop untuk Mengunggah Gambar Normal Secara Otomatis (con't)
Buat for Loop untuk Mengunggah Gambar Normal Secara Otomatis (con't)

3. Buat pernyataan if yang berisi ketiga kemungkinan dari langkah sebelumnya. Jika nama gambar memiliki 1 digit, gambar akan disebut sebagai "im000", jika memiliki 2 digit, gambar akan disebut sebagai "im00", dan jika memiliki 3 gambar akan disebut sebagai "im0".

4. Di bawah setiap pernyataan if, tetapkan variabel ke imread "im" di bawah pernyataan if yang sesuai dengan jumlah nol yang sesuai (seperti dijelaskan di atas), diikuti oleh i.

Langkah 11: Pangkas Perbatasan Gambar

Pangkas Perbatasan Gambar
Pangkas Perbatasan Gambar

Ambil gambar asli dan terapkan filter imcrop untuk menghilangkan batas hitam dan tetapkan ke variabel I_crop. Persegi panjang tanaman ditentukan menggunakan matriks [95, 95, 500, 410].

Langkah 12: Buat Gambar Skala Abu-abu

Buat Gambar Skala Abu-abu
Buat Gambar Skala Abu-abu

Ambil gambar yang dipotong dan terapkan filter rbg2gray untuk mengubah gambar menjadi skala abu-abu. Tetapkan gambar ini ke variabel I2.

Langkah 13: Buat Gambar Kontras

Buat Gambar Kontras
Buat Gambar Kontras

Ambil gambar I2 dan gunakan imadjust untuk mengubah skala nilai intensitas.

Ambil nilai yang berada dalam kisaran [0.2, 0.7] dan ubah skalanya menjadi [0, 1]. Gamma diatur ke 0,8 untuk membuat gambar lebih cerah. Tetapkan gambar baru ke I_adjusted.

Langkah 14: Tingkatkan Gambar Kontras

Tingkatkan Gambar Kontras
Tingkatkan Gambar Kontras

Ambil gambar I_adjusted dan gunakan fungsi adapthisteq untuk meningkatkan kontras.

Sintaks Adapthisteq memerlukan nama gambar, I_adjusted, 'numTiles', ukuran numTiles, 'nBins', dan jumlah bin. Ukuran numTiles diatur ke [8 8], membagi gambar menjadi ubin 8x8 dan jumlah nampan diatur ke 28. Tetapkan gambar ke I_constrast.

Langkah 15: Buat Filter Rata-Rata

Buat Filter Rata-rata
Buat Filter Rata-rata

Buat variabel bernama 'meanfilt' menggunakan fungsi fspecial. Masukkan 'fungsi rata-rata' untuk membuat filter rata-rata dan masukkan [90 90] untuk ukuran jendela geser.

Langkah 16: Gabungkan Filter Rata-Rata Dengan Gambar Kontras

Gabungkan Filter Rata-Rata Dengan Gambar Kontras
Gabungkan Filter Rata-Rata Dengan Gambar Kontras

Buat variabel baru bernama mask_mean dan gunakan fungsi imfilter untuk mengambil gambar I_contrast dan menerapkan filter mean yang dibuat sebelumnya.

Langkah 17: Buat Topeng Berarti Baru dengan Mengurangi Piksel

Buat Topeng Berarti Baru dengan Mengurangi Piksel
Buat Topeng Berarti Baru dengan Mengurangi Piksel

Buat variabel bernama mask_mean2 dan gunakan fungsi imsubtract untuk mengurangi nilai setiap piksel di I_contrast dari piksel yang sesuai di mask_mean.

Langkah 18: Buat Gambar Terfilter Biner

Buat Gambar yang Difilter Biner
Buat Gambar yang Difilter Biner

Ubah gambar skala abu-abu menjadi hitam putih menggunakan imbinarize. Masukkan mask_mean2, 'adaptif', 'ForegroundPolarity', 'gelap', 'Sensitivitas', 0,6. Tetapkan gambar baru ini ke mask_binarize.

Langkah 19: Hapus Gumpalan Kecil yang Ditemukan di Gambar yang Difilter

Hapus Gumpalan Kecil yang Ditemukan di Gambar yang Difilter
Hapus Gumpalan Kecil yang Ditemukan di Gambar yang Difilter

Hapus objek dengan konektivitas kurang dari 100 piksel menggunakan fungsi bwareaopen pada mask_binarize dan atur nilai ambang ke 100. Tetapkan variabel sebagai bw.

Langkah 20: Buat Elemen Penataan Disk

Buat Elemen Penataan Disk
Buat Elemen Penataan Disk

Buat elemen penataan disk (dengan radius 2) menggunakan fungsi strel. Tetapkan ke se.

Langkah 21: Lakukan Operasi Tutup Morfologis

Lakukan Operasi Tutup Morfologis
Lakukan Operasi Tutup Morfologis

Ambil bw dan terapkan fungsi imclose ke elemen struktural untuk melakukan operasi tutup morfologis pada objek.

Langkah 22: Temukan Objek Dengan Konektivitas Minimal 8

Temukan Objek Dengan Konektivitas Minimal 8
Temukan Objek Dengan Konektivitas Minimal 8

Ambil bw dan gunakan bwconncomp untuk menemukan objek dengan konektivitas minimal 8 pada gambar. Tetapkan output nomor ke cc_1.

Langkah 23: Temukan Jumlah Maksimum Piksel Terhubung

Temukan Jumlah Maksimum Piksel Terhubung
Temukan Jumlah Maksimum Piksel Terhubung
Temukan Jumlah Maksimum Piksel Terhubung
Temukan Jumlah Maksimum Piksel Terhubung

Gunakan fungsi cellfun untuk menjalankan fungsi “numel” pada setiap sel di CC. Ini menemukan jumlah elemen dalam sel PixelIdxList. Tetapkan Nilai ke "numPixels".

Temukan nilai maksimum di numPIxels. Tetapkan nilai maksimum terbesar ke "terbesar" dan indeks nilai maksimum ke "idx".

Langkah 24: Tetapkan Nilai Piksel Maks ke 0 dan Temukan Piksel Dengan >=26 Konektivitas Piksel

Hapus Pembuluh Darah di Gambar
Hapus Pembuluh Darah di Gambar
Tampilan Gambar
Tampilan Gambar
Hapus Pembuluh dan Hitung Gumpalan Darah
Hapus Pembuluh dan Hitung Gumpalan Darah
Diagnosis Gambar Retina Berdasarkan Jumlah Gumpalan Darah yang Teridentifikasi
Diagnosis Gambar Retina Berdasarkan Jumlah Gumpalan Darah yang Teridentifikasi

Atur piksel dengan nilai terbesar pada gambar “bw” ke 0, membuat piksel menjadi hitam.

Temukan objek dengan konektivitas minimal 26 piksel pada gambar menggunakan bwconncomp. Tetapkan ke variabel cc_1.

Langkah 25: Hapus Pembuluh Darah di Gambar

Hapus pembuluh darah yang masih ada pada gambar menggunakan fungsi bwpropfilt dengan kisaran [0, 0,9].

[0.9, 1] dikecualikan karena nilai yang mendekati 1 menunjukkan garis. Tetapkan ke "RemoveVessels".

Langkah 26: Tampilan Gambar

Tampilkan setiap gambar yang difilter dalam subplot. Imshow. dengan input 'border' dan 'tight', menampilkan setiap gambar dalam struktur subplot. Tambahkan judul ke setiap gambar untuk membedakan filter mana yang digunakan.

Langkah 27: Hapus Pembuluh dan Hitung Gumpalan Darah

1. Ambil "RemoveVessels" dan terapkan fitur 'Centroid' di regionprops untuk mengidentifikasi centroid objek dalam gambar. Benda-benda ini harus sesuai dengan gumpalan darah yang ada pada gambar.

2. Hitung jumlah bekuan darah yang diidentifikasi dengan mengambil panjang matriks centroid.

Langkah 28: Mendiagnosis Gambar Retina Berdasarkan Jumlah Gumpalan Darah yang Diidentifikasi

Gunakan pernyataan if untuk mendiagnosis gambar berdasarkan jumlah bekuan darah yang teridentifikasi.

Jika jumlah centroid yang teridentifikasi kurang dari atau sama dengan 5, maka citra teridentifikasi normal.

Jika jumlah centroid lebih besar dari 5, gambar didiagnosis dengan retinopati diabetik.

Hasilnya dicetak ke jendela perintah menggunakan fprintf.

Langkah 29: Jika Ada Lebih dari 5 Gumpalan…

Jika Ada Lebih dari 5 Gumpalan…
Jika Ada Lebih dari 5 Gumpalan…

Ulangi instruksi di atas untuk gambar yang didiagnosis sebagai pernyataan lain. Bagian ini akan berjalan jika jumlah gumpalan lebih besar dari 5.

Akhiri pernyataan if.

Langkah 30: Ulangi Proses Penyaringan untuk Gambar Normal Dengan Nilai Digit Gambar Sebagai 2 dan 3

Ulangi Proses Pemfilteran untuk Gambar Normal Dengan Nilai Digit Gambar Sebagai 2 dan 3
Ulangi Proses Pemfilteran untuk Gambar Normal Dengan Nilai Digit Gambar Sebagai 2 dan 3
Ulangi Proses Pemfilteran untuk Gambar Normal Dengan Nilai Digit Gambar Sebagai 2 dan 3
Ulangi Proses Pemfilteran untuk Gambar Normal Dengan Nilai Digit Gambar Sebagai 2 dan 3

Ulangi proses untuk sisa pernyataan if asli ketika angka (jumlah digit dalam nomor gambar) sama dengan 2 dan 3. Ini melengkapi perulangan for untuk gambar normal.

Akhiri perulangan for.

Langkah 31: Ulangi Seluruh Proses untuk Gambar yang Didiagnosis

Ulangi Seluruh Proses untuk Gambar yang Didiagnosis
Ulangi Seluruh Proses untuk Gambar yang Didiagnosis

Ulangi seluruh proses menggunakan gambar yang didiagnosis yang terdaftar oleh matriks “numbers_to_extract_diagnosed”.

Pastikan untuk menelusuri setiap gambar (i) dan mengubahnya menjadi gambar (i+10) sehingga angka yang didiagnosis akan muncul sebagai gambar 11 hingga 20.

Langkah 32: Analisis Statistik

Analisis statistik
Analisis statistik

1. 'Actual_Diagnosis_Matrix' digunakan untuk membandingkan hasil dengan diagnosis resmi yang ditemukan dalam file txt. 10 angka nol pertama menunjukkan bahwa 10 gambar pertama seharusnya normal. 10 yang terakhir menunjukkan bahwa 10 gambar terakhir harus diklasifikasikan sebagai retinopati diabetik.

2. Tanda sama dengan ganda yang digunakan untuk membuat 'number_correct' membuat larik logis dengan membandingkan nilai elemen yang sesuai dari 'Actual_Diagnosis_Matrix' dengan 'Diagnosis_Matrix' yang dibuat dari loop for.

Untuk setiap elemen yang cocok dengan diagnosis, angka 1 akan ditambahkan, artinya kode mendiagnosis gambar tersebut dengan benar. Jika salah itu akan menambahkan 0 ke matriks.

Kemudian, mengambil jumlah itu menambahkan semua yang. Dengan kata lain, ia menemukan jumlah gambar yang didiagnosis dengan benar.

3. 'Final_percentage_correct' adalah persentase yang dihitung dari seberapa akurat kode yang mendiagnosis retinopati diabetik. Jumlah gambar yang didiagnosis dengan benar dibagi 20 (jumlah total gambar) dan dikalikan dengan 100 untuk menemukan persentase diagnosis yang berhasil.

Langkah 33: Menemukan Interval Keyakinan

Menemukan Interval Keyakinan
Menemukan Interval Keyakinan

1. Pastikan Anda telah mengunduh ModWald.m untuk memanggilnya sebagai sebuah fungsi. Tanpa fungsi, Anda harus menghitung sendiri interval kepercayaan menggunakan metode Wald yang dimodifikasi.

2. Fungsi ModWald memiliki 2 input di mana yang pertama adalah jumlah gambar yang diidentifikasi dengan benar, dan yang kedua adalah jumlah total gambar.

3. Fungsi ModWald akan menampilkan batas bawah dan atas interval kepercayaan proporsi untuk keakuratan data sampel. Dengan kata lain, Anda akan memberikan interval persentase di mana persentase sebenarnya dari akurasi kode akan berada.

4. Gunakan fprintf di bawah ini untuk menampilkan statistik dan interval kepercayaan ke jendela perintah.

> fprintf('%.0f persen gambar retina didiagnosis dengan benar menurut diagnosis resmi. \n\n', Final_percentage_correct)

> fprintf('Persentase sebenarnya di mana kode kami akan mendiagnosis retinopati diabetik dengan benar\n akan\n jatuh ke dalam kisaran [%.3f, %.3f], berdasarkan 20 gambar sampel \n', batas_bawah, batas_atas)

Direkomendasikan: