Isi kandungan:

Diagnosis Automatik Retinopati Diabetes Melalui MATLAB: 33 Langkah
Diagnosis Automatik Retinopati Diabetes Melalui MATLAB: 33 Langkah

Video: Diagnosis Automatik Retinopati Diabetes Melalui MATLAB: 33 Langkah

Video: Diagnosis Automatik Retinopati Diabetes Melalui MATLAB: 33 Langkah
Video: Diabetic retinopathy - microaneurysms 2024, November
Anonim
Diagnosis Automatik Diabetes Retinopati Melalui MATLAB
Diagnosis Automatik Diabetes Retinopati Melalui MATLAB
Diagnosis Automatik Diabetes Retinopati Melalui MATLAB
Diagnosis Automatik Diabetes Retinopati Melalui MATLAB

(Lihat garis besar kod di atas)

Retinopati diabetes adalah penyakit mata yang berkaitan dengan diabetes yang disebabkan oleh kadar gula darah tinggi. Tahap gula darah yang tinggi menyebabkan pembuluh darah di retina membengkak, yang menyebabkan pembuluh darah membesar dan bahkan kebocoran saluran, yang menyebabkan bintik-bintik gelap pada gambar retina. Dengan kod ini, kami bertujuan untuk menggunakan penampilan titik kebocoran saluran darah sebagai petunjuk retinopati diabetes latar belakang, walaupun teknik diagnosis lebih lanjut diperlukan di dunia nyata. Matlamat kod ini adalah untuk mengautomasikan pemprosesan gambar dan mendiagnosis gambar retina untuk mengenal pasti tanda-tanda retinopati diabetes yang ditunjukkan melalui bintik-bintik gelap pada gambar retina.

10 gambar retina normal dan 10 gambar retina yang didiagnosis diproses melalui kod yang pertama kali membaca dan menyaring gambar dan kemudian mengukur bintik-bintik gelap untuk menentukan apakah terdapat gejala retinopati diabetes, berdasarkan ambang yang ditentukan. Hasilnya kemudian dicetak ke tetingkap arahan untuk penafsiran penonton.

Langkah 1: Prasyarat

Prasyarat
Prasyarat

1. Pastikan program MATLAB dimuat turun di komputer anda.

2. Muat turun fail txt yang terdapat di pautan. (Tekan 'ctrl + s' untuk menyimpan ke direktori yang sama dengan Kod MATLAB)

Langkah 2: Prasyarat (jangan)

Prasyarat (jangan)
Prasyarat (jangan)
Prasyarat (jangan)
Prasyarat (jangan)

4. Buka MATLAB dan ketik 'uiimport' ke tetingkap arahan.

5. Pilih fail officialdiagnoses.txt dan import ke MATLAB sebagai matriks sel.

6. Pastikan anda melihat 'diagnosis rasmi' sebagai pemboleh ubah di ruang kerja.

Langkah 3: Prasyarat (jangan)

Prasyarat (jangan)
Prasyarat (jangan)

7. Muat turun fungsi ModWald.m, yang dapat diperoleh dari kod di atas atau memuat turunnya dari Canvas.

(Kod disediakan oleh Profesor King dan Profesor Choi)

Langkah 4: Prasyarat (jangan)

Prasyarat (jangan)
Prasyarat (jangan)

8. Muat turun 400 gambar mentah dari bahagian data Projek STARE.

Langkah 5: Bersihkan Matlab untuk Bersedia untuk Menjalankan Kod

Bersihkan Matlab untuk Bersedia untuk Menjalankan Kod
Bersihkan Matlab untuk Bersedia untuk Menjalankan Kod

Tambahkan ke kod:

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

2. clearvars - kecuali officialdiagnoses (Membersihkan semua pemboleh ubah kecuali fail rasmi txt yang diimport sebelumnya)

3. cclc (Kosongkan Tetingkap Perintah)

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

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

1. Ambil fail teks diagnosis dan ekstrak nama gambar. Nama-nama ini terdapat di lajur pertama fail teks sehingga untuk mengekstraknya taip 'officialdiagnoses (:, 1)'. Matriks nama gambar diberikan kepada pemboleh ubah, "all_image_numbers"

2. Tukarkan pemboleh ubah 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 (jangan)

Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik (jangan)
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik (jangan)
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik (jangan)
Pilih 10 Gambar Mata Normal dan 10 Gambar Dengan Gejala Retinopati Diabetik (jangan)

3. Pilih 10 gambar mata biasa untuk menjalankan kod. Gambar yang dipilih dalam kes ini ialah 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.

Letakkan nombor ini dalam matriks dan tetapkannya ke pemboleh ubah yang akan dipanggil semasa memuatkan gambar.

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

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

Buat 2 Pemboleh ubah (Normal dan Diagnosis) dan Tetapkan Masing-masing Sama dengan 0
Buat 2 Pemboleh ubah (Normal dan Diagnosis) dan Tetapkan Masing-masing Sama dengan 0

Buat pemboleh ubah ini sebelum loop untuk menginisialisasi nombor gelung.

Langkah 9: Buat gelung untuk memuat naik gambar normal secara automatik

Buat untuk Gelung untuk Muat Naik Gambar Normal secara automatik
Buat untuk Gelung untuk Muat Naik Gambar Normal secara automatik

1. Buat gelung untuk

2. Tetapkan pemboleh ubah pengiraan (i, dalam kes ini) ke matriks nilai 1-10. Pemboleh ubah pengiraan ini akan digunakan untuk memanggil setiap gambar secara individu

3. Ambil elemen i dalam matriks gambar untuk mengekstrak dan menukar nama gambar dari rentetan menjadi nombor menggunakan fungsi num2str.

Cari bilangan digit yang terdapat dalam nama gambar menggunakan fungsi numel. Berikan nilai ini kepada pemboleh ubah, digit_normal. Nombor ini hendaklah 1 untuk nombor satu digit, 2 untuk nombor dua digit, dan 3 untuk nombor tiga digit. Maklumat ini akan digunakan untuk memanggil gambar secara automatik.

Langkah 10: Buat gelung untuk memuat naik gambar normal secara automatik (jangan)

Buat untuk Gelung untuk Memuat Naik Gambar Normal secara automatik (jangan)
Buat untuk Gelung untuk Memuat Naik Gambar Normal secara automatik (jangan)

3. Buat pernyataan if yang mengandungi ketiga-tiga 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 pemboleh ubah untuk membaca "im" di bawah, jika pernyataan yang sesuai dengan bilangan nol yang sesuai (seperti yang dijelaskan di atas), diikuti oleh i.

Langkah 11: Pangkas Batas Gambar

Pangkas Batas Gambar
Pangkas Batas Gambar

Ambil gambar asal dan sapukan penapis imcrop untuk menghilangkan sempadan hitam dan tetapkan pada pemboleh ubah I_crop. Segi empat tepat tanaman ditentukan menggunakan matriks [95, 95, 500, 410].

Langkah 12: Buat Gambar berskala Kelabu

Buat Gambar berskala Kelabu
Buat Gambar berskala Kelabu

Ambil gambar yang dipotong dan terapkan penapis rbg2gray untuk menukar gambar ke skala kelabu. Tetapkan gambar ini kepada pemboleh ubah I2.

Langkah 13: Buat Gambar Berbeza

Buat Gambar Berbeza
Buat Gambar Berbeza

Ambil gambar I2 dan gunakan imadjust untuk menilai semula nilai intensiti.

Ambil nilai yang berada dalam julat [0.2, 0.7] dan nilai semula ke [0, 1]. Gamma diatur ke 0,8 untuk menjadikan gambar lebih cerah. Tetapkan gambar baru kepada I_adjusted.

Langkah 14: Tingkatkan Imej Kontras

Tingkatkan Imej Kontras
Tingkatkan Imej Kontras

Ambil gambar I_adjusted dan gunakan fungsi adaptthisteq untuk meningkatkan kontras.

Sintaks Adapthisteq memerlukan nama gambar, I_adjusted, ‘numTiles’, ukuran numTiles, ‘nBins’, dan jumlah tong sampah. Saiz numTiles diatur ke [8 8], membahagi gambar menjadi 8x8 jubin dan bilangan tong ditetapkan ke 28. Tetapkan gambar ke I_constrast.

Langkah 15: Buat Penapis Purata

Buat Penapis Purata
Buat Penapis Purata

Buat pemboleh ubah bernama 'meanfilt' menggunakan fungsi fspecial. Masukkan ‘fungsi purata’ untuk membuat penapis purata dan masukkan [90 90] untuk ukuran tetingkap gelangsar.

Langkah 16: Gabungkan Purata Penapis dengan Gambar Berbeza

Gabungkan Penapis Purata Dengan Gambar Berbeza
Gabungkan Penapis Purata Dengan Gambar Berbeza

Buat pemboleh ubah baru bernama mask_mean dan gunakan fungsi imfilter untuk mengambil gambar I_contrast dan untuk menerapkan filter rata-rata yang dibuat sebelumnya.

Langkah 17: Buat Topeng Maksud Baru dengan Mengurangkan Piksel

Buat Topeng Maksud Baru dengan Mengurangkan Piksel
Buat Topeng Maksud Baru dengan Mengurangkan Piksel

Buat pemboleh ubah bernama mask_mean2 dan gunakan fungsi imsubtract untuk mengurangkan nilai setiap piksel dalam I_contrast dari piksel yang sesuai di mask_mean.

Langkah 18: Buat Gambar Penapis Binari

Buat Gambar Penapis Binari
Buat Gambar Penapis Binari

Ubah gambar skala kelabu menjadi hitam putih menggunakan imbinarize. Masukan masukan_mean2, ‘adaptif’, ‘ForegroundPolarity’, ‘dark’, ‘Sensitivity’, 0.6. Tetapkan gambar baru ini untuk mask_binarize.

Langkah 19: Keluarkan Gumpalan yang Lebih Kecil yang Terdapat dalam Gambar yang Disaring

Buang Gumpalan yang Lebih Kecil yang Terdapat dalam Gambar yang Disaring
Buang Gumpalan yang Lebih Kecil yang Terdapat dalam Gambar yang Disaring

Keluarkan objek dengan sambungan kurang dari 100 piksel menggunakan fungsi bwareaopen pada mask_binarize dan tetapkan nilai ambang ke 100. Tetapkan pemboleh ubah sebagai bw.

Langkah 20: Buat Elemen Penstrukturan Cakera

Buat Elemen Penstrukturan Cakera
Buat Elemen Penstrukturan Cakera

Buat elemen penstrukturan cakera (dengan jejari 2) menggunakan fungsi strel. Berikannya kepada se.

Langkah 21: Lakukan Operasi Tutup Morfologi

Lakukan Operasi Tutup Morfologi
Lakukan Operasi Tutup Morfologi

Ambil bw dan terapkan fungsi imclose pada elemen struktur untuk melakukan operasi tutup morfologi pada objek.

Langkah 22: Cari Objek Dengan Kesambungan Paling Sedikit 8

Cari Objek Dengan Kesambungan sekurang-kurangnya 8
Cari Objek Dengan Kesambungan sekurang-kurangnya 8

Ambil bw dan gunakan bwconncomp untuk mencari objek dengan sambungan sekurang-kurangnya 8 dalam gambar. Tetapkan output nombor ke cc_1.

Langkah 23: Cari Bilangan Maksimum Piksel yang Disambungkan

Cari Bilangan Maksimum Piksel yang Disambungkan
Cari Bilangan Maksimum Piksel yang Disambungkan
Cari Bilangan Maksimum Piksel yang Disambungkan
Cari Bilangan Maksimum Piksel yang Disambungkan

Gunakan fungsi cellfun untuk melakukan fungsi "numel" pada setiap sel di CC. Ini menemui bilangan elemen dalam sel PixelIdxList. Tetapkan Nilai kepada "numPixels".

Cari nilai maksimum dalam numPIxels. Tetapkan maksimum terbesar ke "terbesar" dan indeks nilai maksimum ke "idx".

Langkah 24: Tetapkan Nilai Piksel Maksimum ke 0 dan Cari Piksel Dengan> = 26 Kesambungan Piksel

Buang Kapal Darah dalam Gambar
Buang Kapal Darah dalam Gambar

= 26 Kesambungan Pixel "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp

Paparan Gambar
Paparan Gambar

= 26 Kesambungan Pixel "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp

Keluarkan Kapal dan Hitung Gumpalan Darah
Keluarkan Kapal dan Hitung Gumpalan Darah

= 26 Kesambungan Pixel "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">

Mendiagnosis Gambar Retina Berdasarkan Bilangan Gumpalan Darah yang Dikenal
Mendiagnosis Gambar Retina Berdasarkan Bilangan Gumpalan Darah yang Dikenal

= 26 Kesambungan Pixel "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">

Tetapkan piksel dengan nilai terbesar dalam gambar "bw" ke 0, menjadikan piksel menjadi hitam.

Cari objek dengan sambungan sekurang-kurangnya 26 piksel dalam gambar menggunakan bwconncomp. Tetapkan kepada pemboleh ubah cc_1.

Langkah 25: Keluarkan Kapal Darah dalam Gambar

Tanggalkan saluran darah yang masih terdapat dalam gambar menggunakan fungsi bwpropfilt dengan julat [0, 0.9].

[0.9, 1] dikecualikan kerana nilai hampir dengan 1 menunjukkan garis. Tugaskan ke "RemoveVessels".

Langkah 26: Paparan Gambar

Paparkan setiap gambar yang ditapis dalam subplot. Imshow. dengan input 'sempadan' dan 'ketat', memaparkan setiap gambar dalam struktur subplot. Tambahkan tajuk untuk setiap gambar untuk membezakan penapis mana yang digunakan.

Langkah 27: Keluarkan Kapal dan Hitung Gumpalan Darah

1. Ambil "RemoveVessels" dan terapkan ciri "Centroid" di kawasanprop untuk mengenal pasti pusat objek dalam gambar. Objek ini harus sesuai dengan pembekuan darah yang terdapat dalam gambar.

2. Hitung bilangan gumpalan darah yang dikenal pasti dengan mengambil panjang matriks sentroid.

Langkah 28: Mendiagnosis Gambar Retina Berdasarkan Bilangan Gumpalan Darah yang Dikenal

Gunakan jika pernyataan untuk mendiagnosis gambar berdasarkan jumlah gumpalan darah yang dikenal pasti.

Sekiranya bilangan centroid yang dikenal pasti kurang dari atau sama dengan 5, gambar itu dikenal pasti normal.

Sekiranya bilangan centroid lebih besar daripada 5, gambar itu didiagnosis dengan retinopati diabetes.

Hasilnya dicetak ke tetingkap perintah menggunakan fprintf.

Langkah 29: Sekiranya Terdapat Lebih Dari 5 Gumpalan…

Sekiranya Terdapat Lebih Dari 5 Gumpalan…
Sekiranya Terdapat Lebih Dari 5 Gumpalan…

Ulangi arahan di atas untuk gambar yang didiagnosis sebagai pernyataan lain. Bahagian ini akan dijalankan sekiranya bilangan gumpalan lebih besar daripada 5.

Tamatkan penyataan if.

Langkah 30: Proses Penapisan Ulangan untuk Gambar Biasa Dengan Nilai Digit Gambar Sebagai 2 dan 3

Proses Penapisan Ulangan untuk Gambar Biasa Dengan Nilai Digit Gambar Sebagai 2 dan 3
Proses Penapisan Ulangan untuk Gambar Biasa Dengan Nilai Digit Gambar Sebagai 2 dan 3
Proses Penapisan Ulangan untuk Imej Normal Dengan Nilai Digit Gambar Sebagai 2 dan 3
Proses Penapisan Ulangan untuk Imej Normal Dengan Nilai Digit Gambar Sebagai 2 dan 3

Ulangi proses untuk baki yang asli jika pernyataan apabila numel (bilangan digit dalam nombor gambar) sama dengan 2 dan 3. Ini melengkapkan gelung untuk gambar normal.

Tamatkan gelung untuk.

Langkah 31: Ulangi Seluruh Proses untuk Gambar Diagnosis

Ulangi Seluruh Proses untuk Gambar Diagnosis
Ulangi Seluruh Proses untuk Gambar Diagnosis

Ulangi keseluruhan proses menggunakan gambar yang didiagnosis yang disenaraikan oleh matriks "number_to_extract_diagnosed".

Pastikan untuk memeriksa setiap angka (i) dan ubah menjadi angka (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 hasilnya dengan diagnosis rasmi yang terdapat dalam fail txt. Sifar 10 pertama menunjukkan bahawa 10 gambar pertama mestilah normal. 10 gambar terakhir menunjukkan bahawa 10 gambar terakhir harus dikelaskan sebagai retinopati diabetes.

2. Tanda sama berganda yang digunakan untuk membuat 'number_correct' membuat susunan logik dengan membandingkan nilai elemen yang sesuai dari 'Actual_Diagnosis_Matrix' dengan 'Diagnosis_Matrix' yang dibuat dari loop for.

Untuk setiap elemen yang sesuai dengan diagnosis, 1 akan ditambahkan, yang bermaksud kod mendiagnosis gambar itu dengan betul. Sekiranya tidak betul ia akan menambah 0 ke matriks.

Kemudian, dengan mengambil jumlah itu menambah semua. Dengan kata lain, ia menjumpai jumlah gambar yang didiagnosis dengan betul.

3. 'Final_percentage_correct' adalah peratusan yang dikira seberapa tepat kod yang didiagnosis retinopati diabetes. Bilangan gambar yang didiagnosis dengan betul dibahagikan dengan 20 (jumlah gambar) dan didarabkan dengan 100 untuk mencari peratusan diagnosis yang berjaya.

Langkah 33: Mencari Selang Keyakinan

Mencari Selang Keyakinan
Mencari Selang Keyakinan

1. Pastikan anda memuat turun ModWald.m untuk memanggilnya sebagai fungsi. Tanpa fungsi, anda harus mengira selang keyakinan menggunakan kaedah Wald yang diubahsuai sendiri.

2. Fungsi ModWald mempunyai 2 input di mana yang pertama adalah jumlah gambar yang dikenal pasti dengan betul, dan yang kedua adalah jumlah keseluruhan gambar.

3. Fungsi ModWald akan mengeluarkan batas bawah dan atas selang keyakinan berkadar untuk ketepatan data sampel. Dengan kata lain, anda akan memberikan selang peratusan di mana peratusan ketepatan kod yang sebenar.

4. Gunakan fprintf di bawah untuk mengeluarkan statistik dan selang keyakinan ke tetingkap arahan.

> fprintf ('%. 0f peratus gambar retina didiagnosis dengan betul mengikut diagnosis rasmi. / n / n', Final_percentage_correct)

> fprintf ('Peratusan sebenar di mana kod kami akan mendiagnosis retinopati diabetes dengan betul akan berada dalam julat [%.3f,%.3f], berdasarkan 20 gambar sampel / n', bawah_batas, atas_bound)

Disyorkan: