Program Diagnostik Malaria Melalui Pemprosesan Imej di MATLAB: 7 Langkah

Program Diagnostik Malaria Melalui Pemprosesan Imej di MATLAB: 7 Langkah

Isi kandungan:

Anonim

Oleh: Rachel Goodman, Jasmin Morfin, Karilyn Odom, dan Brooke Koren

Menurut Pertubuhan Kesihatan Sedunia, terdapat kira-kira 212 juta kes malaria dan 429,000 kematian akibat malaria pada tahun 2015 sahaja, 90% daripadanya disebabkan oleh Plasmodium falciparum, parasit yang kita analisis; Walau bagaimanapun, langkah pencegahan telah menyebabkan kadar kematian malaria menurun sebanyak 29% sejak 2010. Pengesanan awal malaria adalah langkah penting dalam mengurangkan kadar kematian lagi. Dengan kod MATLAB kami, kami berharap dapat membuat diagnosis malaria lebih cepat dan lebih banyak pesakit boleh dilihat dan dirawat.

Kod MATLAB ini diprogram untuk mengambil gambar kira-kira 50,000 sel darah merah dan menentukan sama ada terdapat sel malarial dalam imej. Program ini direka bentuk untuk bekerja dengan mikroskop imbasan resolusi tinggi, bagaimanapun, pengguna juga boleh memuat naik imej sampel darah mereka sendiri. Kami berharap kod ini dapat membantu membuat diagnosis malaria lebih cepat dan mudah.

Arahan pertama kali akan memasuki proses batch yang memuat naik imej ke MATLAB dan antara muka pengguna yang terlibat dalam menentukan imej yang hendak diproses, maka mereka akan meneruskan pemprosesan sebenar gambar yang dipilih (grayscale, penyaringan, pembalik, binarizing, dll..). Selepas kami memproses imej itu, kami kemudian melayari gambar dalam 24th sehingga sel-sel itu cukup besar untuk parasit malaria dikenal pasti. Kami kemudian mempunyai gelung untuk menerangkan peta haba ke setiap ke-24 dan menjimatkannya sebagai jpeg.

Bekalan:

Langkah 1: Memuatkan Kumpulan Imej Sel

Semasa menyelidik untuk projek ini, matlamat kami adalah untuk mencari imej smear darah definisi tinggi yang kami boleh memproses dan menganalisis. Nasib baik, kami dapat mencari dengan tepat ini. Setiap gambar adalah 4,000 piksel dan apabila dizum masuk, sel-sel malaria masih dapat dikenalpasti dengan jelas. Oleh kerana kami terpaksa memotong foto ke 24, kami memutuskan untuk hanya menyertakan analisis kemungkinan lima sampel darah yang berlainan (imej) untuk mempermudahkan proses pemilihan.

Kami mula membangunkan GUI (antara muka pengguna grafik) dengan pengenalan fungsi input untuk pengguna untuk memilih fail yang mereka mahu kod untuk dianalisis. Fail itu kemudiannya diambil oleh pembolehubah "FiletoAnalyze" dan fail penuh kemudian dibaca oleh fungsi yang belum dibaca. Membaca imej kemudian membenarkan kami membuka dan memotongnya.

-----------------------------------------------------------------------------------------------

%% Memuatkan Fail

jelas; tutup semua; clc;

Dir = 'C: Users rache OneDrive Documents MATLAB SandBox'; % menetapkan Dir sebagai lokasi fail jpg

GetDir = dir ('SandBox *.jpg');

nfiles = length (GetDir);

FileNumtoAnalyze = input ('Taipkan nombor fail yang anda hendak analisa (1-5). N');

FiletoAnalyze = Dir filesep GetDir (FileNumtoAnalyze).name;

F = fullfile (FiletoAnalyze);

I = imread (F);

Langkah 2: Memproses Imej

Kami memulakan bahagian pemprosesan kod dengan mengubah imej menjadi greyscale. Ini dilakukan dengan mengambil gambar fail imej dan menggunakan fungsi "rgb2gray". Kami kemudian mengasah imej greyscale menggunakan fungsi "imsharpen". Imej mengasah meningkatkan kontras di sepanjang tepi di mana warna yang berbeza bertemu, dalam kes ini hitam dan putih. Kami menggunakan imcomplement untuk membalikkan imej kemudian memaparkannya bersebelahan menggunakan imshowpair. Semasa bermain-main dengan penapis, kami mendapati bahawa sejak sel-sel adalah sangat kecil dan banyak, apa-apa penapisan penting (seperti penapis median atau imopen) menjadikan sel-sel malaria tidak dapat dibezakan dari sel yang sihat. Atas sebab ini, tidak ada penapis yang digunakan dalam kod itu kecuali untuk mengasah imej.

-----------------------------------------------------------------------------------------------

GreyI = rgb2gray (I);

SharpI = imsharpen (GreyI);

bw = SharpI;

bw2 = imcomplement (bw);

imshowpair (bw, bw2, 'montaj')

Langkah 3: Mengikut Imej Ke 24hb

Mula-mula, kita melambangkan imej menjadi keenam. Kami melakukan ini dengan menggunakan imej dan grid untuk mencari tempat yang paling tepat untuk memecahnya. Setiap keenam kemudian disimpan sebagai rantau (baris pertama kod di bawah). Kami merancang enam wilayah di sebelah satu sama lain dengan mengulangi keseluruhan kod ini di bawah enam kali. WilayahA dan sebagainya kemudiannya berpecah ke 24 dengan cara yang sama seperti di atas. Setiap dua puluh empat dinamakan, dalam corak yang semakin meningkat, Wilayah 1 hingga Wilayah 24. Kami menyelamatkan masing-masing sebagai jpeg. Kami menggunakan fungsi fullfile untuk membina fail daripada jpegs dan menghantar imej ke fail yang kami mahu mereka berada, CellSaved. Kami menggunakan imwrite untuk menulis imej ke fail yang ditentukan oleh fullFileName.

-----------------------------------------------------------------------------------------------

WilayahA = bw2 (1: 735,800: 2000);

Rajah 1); % membuka angka kosong bahawa semua subplot akan diplotkan

subplot (3,2,1)

imshow (RegionA);

Wilayah1 = WilayahA (1: 368,1: 600);

baseFileName = 'Region1.jpg';

fullFileName = fullfile ('C: Users rache OneDrive Documents MATLAB CellSaved', baseFileName);

imwrite (Region1, fullFileName);

Langkah 4: Memohon Heatmap dan Menyimpan Imej Baru

Dalam bahagian kod ini, kami menggunakan colormap haba untuk semua kawasan. Ini menjadikan mereka kelihatan berwarna hijau dan merah. Merah adalah sel-sel yang dijangkiti dan hijau adalah segala-galanya. Untuk kemudian menarik warna dari imej, kami menyelamatkan hotmap sebagai jpeg.

-----------------------------------------------------------------------------------------------

D = 'C: Users rache OneDrive Documents MATLAB CellSaved';

Getdir = dir (fullfile (D, 'Region *.jpg'));

untuk i = 1: numel (GetDir)

F = fullfile (D, Getdir (i).name);

I = imread (F);

HP1 = HeatMap (I);

h = angka;

HP1 = HeatMap (I);

hFig = plot (HP1);

saveas (hFig, sprintf ('FIG% d.jpg', i))

akhir

Langkah 5: Meningkatkan Pengenalpastian Sel Malaria

Sebaik sahaja kita menyelamatkan angka-angka, kita dapat mengubah semua sisa hitam (garis besar sel darah merah) dalam peta haba ke hijau. Kami melakukan ini supaya apabila kami mengeluarkan imej merah dan terbalik, hanya sel yang dijangkiti malaria akan ditinggalkan. Kami mencapai ini dengan menetapkan setiap lapisan L (yang dibaca atau fail) sama ada merah, hijau, atau biru. Kami kemudian menetapkan hitam seperti apabila merah, hijau, dan biru semua sifar sama. Merah dan biru pembolehubah hitam kemudian ditetapkan kepada 0 manakala hijau ditetapkan pada 255 dan viola, garis besar sel hitam kemudian berwarna hijau. Pembolehubah L2 meletakkan tiga warna kembali bersama-sama.

-----------------------------------------------------------------------------------------------

C = 'C: Users alyse Documents MATLAB SandBox';

Getdir2 = dir (fullfile (C, 'FIG *.jpg'));

untuk j = 1: numel (Getdir2)

E = fullfile (C, Getdir2 (j).name);

L = imread (E);

merah = L (:,:, 1);

hijau = L (:,:, 2);

biru = L (:,:, 3);

hitam = merah == 0 & hijau == 0 & biru == 0;

merah (hitam) = 0;

hijau (hitam) = 255;

biru (hitam) = 0;

L2 = kucing (3, merah, hijau, biru);

Langkah 6: Membersihkan dan Mengira

Tugas seterusnya adalah mengira sel-sel malaria yang terdapat pada setiap 24 gambar. Strel fungsi mencipta elemen penstrukturan yang rata dengan lingkungan yang ditentukan. Dalam kes ini kita memilih persegi dan 3 unit. Num pemboleh ubah mengambil lapisan merah L2 dan kemudiannya diplotkan. Num2 pembolehubah tidak sama dengan hijau. Kemudian kami menggunakan imclose untuk menyambung sel-sel malaria dalam imej supaya kaunter akan mengambil setiap sel yang dijangkiti sebagai satu nilai tunggal sel. Kaunter memilih sempadan imej hitam dan putih dan melingkari mereka dengan setiap kiraan.

-----------------------------------------------------------------------------------------------

SE = strel ('persegi', 3);

SE.Neighborhood

num = L2 (:,:, 1);

angka, imshow (num)

num2 = L2 (:,:, 2);

num3 = imclose (bukan (num2), SE);

B = bwboundaries (num3);

imshow (num3)

teks (10,10, strcat (' color {red} Bilangan sel yang dijangkiti:', num2str (panjang (B))))

tahan

untuk k = 1: panjang (B)

sempadan = B {k};

plot (sempadan (:, 2), sempadan (:, 1), 'g', 'LineWidth', 0.2)

akhir

akhir% akhir untuk gelung dari langkah sebelumnya

Langkah 7: Menyebut dan Menampilkan Keputusan

Akhirnya, bahagian paling penting kod, menentukan berapa banyak sel-sel malaria imej sampel darah secara total. Pemboleh ubah Jumlah jumlah semua nombor sel yang dijangkiti sepanjang dua puluh empat imej. Oleh kerana terdapat kira-kira 50,000 sel dalam setiap imej, mengambil Jumlah dan membahagikan sebanyak 50,000 kemudian didarab dengan 100 memberikan peratusan sel yang dijangkiti dalam imej. Peratusan kemudiannya dipaparkan menggunakan fprintf. Sebaik sahaja memberitahu pengguna berapa banyak sel-sel yang dijangkiti ada di dalam imej dan yang lain memberitahu pengguna berapa peratus gambar itu adalah sel malaria.

-----------------------------------------------------------------------------------------------

Jumlah = jumlah (num2str (panjang (B)));

Jangkitan = (Jumlah / 50000) * 100;

fprintf ('Terdapat sejumlah% d sel yang dijangkiti dalam imej', Jumlah)

fprintf ('Imej adalah%.3f peratus sel malaria', Infeksi)