Isi kandungan:
- Langkah 1: Langkah 1: Memuatkan Imej
- Langkah 2: Langkah 2: Penapisan Kebisingan dan Histogram
- Langkah 3: Langkah 3: Menetapkan Ambang
- Langkah 4: Membuat GUI
- Langkah 5: Demo Video
Video: Segmentasi Paru MatLab: 5 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:07
Oleh: Phuc Lam, Paul Yeung, Eric Reyes
Menyedari bahawa kesalahan dalam segmentasi paru-paru akan menghasilkan maklumat palsu mengenai pengenalan kawasan penyakit dan secara langsung boleh mempengaruhi proses diagnosis. Teknik bantuan komputer moden gagal memberikan hasil yang tepat apabila penyakit paru-paru mempunyai bentuk yang mencabar. Bentuk yang tidak normal ini boleh disebabkan oleh efusi pleura, penyatuan, dll. Menggunakan teknik segmentasi paru-paru, di mana batas paru-paru diasingkan dari tisu toraks sekitarnya, aplikasi kita dapat mengenal pasti batas dengan ambang input pengguna untuk memberikan pandangan yang dapat disesuaikan sepenuhnya. bentuk paru-paru, Tujuan projek MatLab ini adalah untuk membuat aplikasi segmentasi paru-paru interaktif yang mesra pengguna untuk mengesan keadaan patologi gambar sinar-X paru-paru. Tujuan kami adalah untuk mencipta kaedah yang lebih berkesan untuk menggambarkan dan mengenal pasti paru-paru yang tidak normal untuk memberi doktor dan ahli radiologi cara yang lebih dipercayai untuk mendiagnosis penyakit paru-paru. Dengan menggunakan alat pereka aplikasi di MatLab, program ini dirancang untuk bekerja secara khusus dengan imbasan sinar-x dada dan tomografi terkomputer (CT), tetapi juga diuji untuk berfungsi dengan imbasan MRI.
Arahan di bawah ini mengandungi teknik penapisan bunyi kami (penapis Wiener lulus rendah) serta ambang gambar (dengan menggunakan histogram intensiti gambar skala kelabu) dan menggunakan kecerunan morfologi (perbezaan antara pelebaran dan hakisan gambar) hingga mengenal pasti kawasan yang menarik. Arahan tersebut kemudian akan menjelaskan bagaimana kita menggabungkan semua elemen ke dalam antara muka pengguna grafik (GUI).
Catatan:
1). Projek ini diilhamkan oleh makalah penyelidikan: "Segmentasi dan Analisis Imej Paru-paru Tidak normal di CT: Pendekatan Semasa, Cabaran, dan Trend Masa Depan". Yang boleh didapati di sini
2). Kami menggunakan gambar sinar-X dari NIH: Pusat Klinikal. Pautan boleh didapati di sini
3). Bantuan pereka aplikasi boleh didapati di sini
4). Sebelum menjalankan kod: anda perlu menukar jalan Dir (dalam baris 34) ke direktori dan jenis gambar anda (baris 35) (kami sedang menganalisis *.png).
Langkah 1: Langkah 1: Memuatkan Imej
Langkah ini akan menunjukkan kepada anda gambar asal dalam skala kelabu. Tukar 'name_of_picture.png' ke nama gambar anda
jelas; clc; tutup semua;
%% Memuatkan gambar
raw_x_ray = 'name_of_picture.png';
I = imread (raw_x_ray);
rajah (101);
imshow (I);
colormap (kelabu);
tajuk ('Grayscale X-Ray');
Langkah 2: Langkah 2: Penapisan Kebisingan dan Histogram
Untuk mencari ambang gambar skala kelabu, kita melihat histogram untuk melihat apakah mod berbeza. Baca lebih lanjut di sini
I = wiener2 (I, [5 5]);
rajah (102);
subplot (2, 1, 1);
imshow (I);
subplot (2, 1, 2);
imhist (I, 256);
Langkah 3: Langkah 3: Menetapkan Ambang
Langkah ini membolehkan anda menetapkan ambang mengikut histogram. morphologicalGradient akan menonjolkan kawasan yang berminat dengan warna merah, dan fungsi visboundari melapisi gambar paru-paru yang digariskan dan disaring dengan warna merah.
Dengan menggunakan regionprops, kita dapat menentukan susunan kekukuhan dan menyusunnya secara menurun. Seterusnya saya binari gambar sklae kelabu dan terapkan kaedah kecerunan morflogik dan mLoren Shurasking untuk menonjolkan kawasan minat (ROI). Langkah seterusnya adalah membalikkan gambar sehingga ROI paru-paru berwarna putih di latar belakang hitam. Saya menggunakan fungsi showMaskAsOverlay untuk memaparkan 2 topeng. Catatan: kod itu diilhamkan dari pautan Loren Shure.
Dengan jayanya, saya membuat garis besar merah dengan menggunakan bwbwboundaries dan menutupi tapisan gambar dan sempadannya.
a_thresh = I> = 172; % menetapkan ambang ini
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
props = regionprops (a_thresh, 'semua');
sortedSolidity = sort ([props. Solidity], 'turun');
SB = disusunSolidity (1);
jika SB == 1% SB hanya menerima kekukuhan == 1 tapiskan tulang
binaryImage = imbinarize (I); rajah (103);
imshow (binaryImage); colormap (kelabu);
SE = strel ('persegi', 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
topeng = imbinarize (morfologiGradient, 0.03);
SE = strel ('persegi', 2);
topeng = imclose (topeng, SE);
topeng = imfill (topeng, 'lubang');
topeng = bwareafilt (topeng, 2); % kawalan bilangan kawasan menunjukkan
notMask = ~ topeng;
topeng = topeng | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0.5, topeng, 'r'); % anda harus memuat turun aplikasi / fungsi showMaskAsOverlay
BW2 = imfill (binaryImage, 'hole');
new_image = BW2;
new_image (~ topeng) = 0; % latar belakang dan lubang terbalik
B = bwboundaries (new_image); % hanya dapat menerima 2 dimensi
rajah (104);
imshow (new_image);
tahan
batas visitori (B);
akhir
Langkah 4: Membuat GUI
Sekarang, kami menggabungkan kod sebelumnya ke dalam aplikasi MATLAB. Buka Pereka Aplikasi dalam MATLAB (Baru> Aplikasi). Pertama, kami merancang antara muka dengan klik-tahan-dan menyeret tiga paksi ke ruang kerja tengah. Seterusnya, kami klik-tahan-seret dua butang, satu bidang edit (teks), satu bidang edit (berangka), satu gelangsar, dan satu menu lungsur. Dua paksi masing-masing akan menampilkan pratonton dan menganalisis gambar, dan sumbu ketiga akan menampilkan histogram piksel untuk pratonton gambar "terpilih". Kotak bidang edit (teks) akan memaparkan jalur file gambar yang dipilih, dan bidang edit (angka) akan memaparkan kawasan piksel paru-paru yang terdeteksi.
Sekarang beralih dari paparan reka bentuk ke paparan kod dalam Pereka Aplikasi. Masukkan dalam kod kod untuk sifat dengan mengklik butang "Properties" berwarna merah dengan tanda tambah darinya. Memulakan sifat I, ambang, dan wilayahToExtract seperti dalam kod yang disediakan di bawah. Seterusnya, klik kanan butang di bahagian kanan atas ruang kerja (Penyemak Imbas Komponen) dan pergi dari Panggilan Balik> Pergi ke… panggil balik. Tambahkan kod untuk "fungsi SelectImageButtonPushed (aplikasi, acara)." Kod ini membolehkan anda memilih gambar untuk dianalisis dari komputer anda menggunakan uigetfile. Setelah memilih gambar, gambar pratonton akan muncul di bawah sumbu disertai histogram. Kemudian, klik kanan butang lain dan ulangi prosedur yang sama untuk membuat fungsi panggilan balik.
Tambahkan kod di bawah "function AnalyzeImageButtonPushed (aplikasi, acara)." Kod ini akan melakukan penghitungan piksel dan pengesanan gumpalan pada gambar pratonton pada butang menganalisis gambar (mana yang anda klik kanan untuk kod ini). Setelah memprogramkan butang, kita sekarang akan memprogram slaid dan menu drop-down. Klik kanan slaid, buat fungsi panggilan balik dan tambahkan kod di bawah "fungsi FilterThresholdSliderValueChanged (aplikasi, acara)" hingga akhir. Ini membolehkan slaid menyesuaikan ambang keamatan kelabu.
Buat fungsi panggilan balik untuk menu lungsur turun, dan tambahkan kod di bawah "fungsi AreastoExtractDropDownValueChanged (aplikasi, acara)" untuk membolehkan menu tarik turun mengubah jumlah gumpalan yang ditunjukkan pada paksi gambar yang dianalisis. Sekarang, klik setiap entiti dalam Komponen Penyemak Imbas dan ubah sifatnya mengikut keinginan anda, seperti menukar nama entiti, membuang sumbu, dan mengubah skala. Seret dan lepaskan entiti Penyemak Imbas Komponen dalam Paparan Reka Bentuk ke susun atur yang berfungsi dan mudah difahami. Anda kini mempunyai aplikasi dalam MATLAB yang dapat menganalisis gambar paru-paru untuk kawasan piksel!
sifat (Akses = peribadi) I = ; % fail gambar
ambang = 257; ambang% untuk intensiti kelabu binarizing
wilayahToExtract = 2;
akhir
fungsi SelectImageButtonPushed (aplikasi, acara)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; % menentukan fail invariate "awalan"
[imageExt, path] = uigetfile ('*. png'); % ambil bahagian berubah dari nama gambar
imageName = [Dir filesep imageExt]; % merangkumi rentetan invariate dan pemboleh ubah
app. I = imread (imageName); % membaca gambar
imshow (app. I, 'induk', app. UIAxes); % memaparkan gambar
app. FilePathEditField. Value = jalan; % jalan fail paparan dari mana asal gambar
akhir
fungsi AnalyzeImageButtonPushed (aplikasi, acara)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); % penapis penghapusan titik
histogram (app. AxesHistogram, app. I, 256); % memaparkan histogram gambar
a_thresh = originalImage> = app.threshold; % menetapkan ambang ini
labelImage = bwlabel (a_thresh);
props = regionprops (a_thresh, 'semua');
sortedSolidity = sort ([props. Solidity], 'turun');
SB = disusunSolidity (1);
jika SB == 1% SB hanya menerima kekukuhan == 1 tapiskan tulang
SE = strel ('persegi', 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
topeng = imbinarize (morfologiGradient, 0.03);
SE = strel ('persegi', 2);
topeng = imclose (topeng, SE);
topeng = imfill (topeng, 'lubang');
mask = bwareafilt (topeng, app.regionsToExtract);
% kawalan bilangan kawasan menunjukkan
notMask = ~ topeng;
topeng = topeng | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'lubang');
new_image = BW2;
new_image (~ topeng) = 0;
B = bwboundaries (new_image); % hanya boleh menerima 2 dimensi tayangan (new_image, 'parent', app. UIAxes2);
tahan (app. UIAxes2, 'on');
batas visitori (B);
set (gca, 'YDir', 'terbalik');
lungArea = bwarea (new_image);
app. PixelAreaEditField. Value = lungArea;
akhir
akhir
fungsi FilterThresholdSliderValueChanged (aplikasi, acara)
app.threshold = app. FilterThresholdSlider. Value;
akhir
fungsi AreastoExtractDropDownValueChanged (app, event) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
akhir
akhir
Disyorkan:
MATLAB Pengesanan Muka Mudah: 4 Langkah
MATLAB Easy Face Detection: Tujuan utama instruksional ini adalah untuk menunjukkan seberapa mudah, pemprosesan gambar akan dilakukan, Dengan bantuan MATLABFace pengesanan dan pengesanan telah menjadi bidang penyelidikan yang penting dan aktif, jadi itulah sebabnya saya akan menerangkan bagaimana ia dapat dilakukan dengan
Cara Mengekod dan Menerbitkan Matlab 2016b ke Word (Panduan Pemula): 4 Langkah
Cara Mengekod dan Menerbitkan Matlab 2016b ke Word (Panduan Pemula): Matlab adalah program bahasa berprestasi tinggi yang digunakan untuk mengira hasil teknikal. Ia memiliki kemampuan untuk mengintegrasikan visual, perhitungan, dan pengaturcaraan secara ramah pengguna. Dengan program ini, pengguna dapat menerbitkan masalah dan penyelesaian
Mengawal Raspberry Pi Menggunakan Matlab: 5 Langkah
Mengawal Raspberry Pi Menggunakan Matlab: Hei, tutorial ini adalah mengenai mengawal pi raspberry tanpa kepala anda menggunakan matlab. Anda mungkin perlu memasang matlab ke versi terbaru untuk mendapatkan sokongan kepada papan raspberry pi yang lebih baru
Pengawal Robotik ROS berasaskan Matlab: 9 Langkah
ROS Robotic Controller yang berpusat di Matlab: Sejak saya kecil, saya selalu bermimpi menjadi Iron Man dan masih melakukannya. Iron Man adalah salah satu watak yang boleh dilakukan secara realistik dan dengan mudahnya saya bercita-cita untuk menjadi Iron Man suatu hari nanti walaupun orang menertawakan saya atau mengatakan itu mustahil
Melatih Peningkatan Pengaturcaraan dalam MATLAB: 6 Langkah
Melatih Peningkatan Pengaturcaraan di MATLAB: Objektif: Matlamat sistem yang diprogramkan ini adalah untuk melihat Arduino skala kecil dan menerapkan pengekodan pada skala yang lebih besar untuk berpotensi meningkatkan ciri keselamatan tertentu dari sistem Amtrak Railroad. Untuk melakukan ini, kami telah menambahkan sen kelembapan tanah