Daftar Isi:
- Langkah 1: Langkah 1: Memuat Gambar
- Langkah 2: Langkah 2: Penyaringan Kebisingan dan Histogram
- Langkah 3: Langkah 3: Menetapkan Ambang Batas
- Langkah 4: Membuat GUI
- Langkah 5: Demo Video
Video: Segmentasi Paru-Paru MatLab: 5 Langkah
2024 Pengarang: John Day | [email protected]. Terakhir diubah: 2024-01-30 09:53
Oleh: Phuc Lam, Paul Yeung, Eric Reyes
Mengakui bahwa kesalahan dalam segmentasi paru-paru akan menghasilkan informasi yang salah mengenai identifikasi suatu area penyakit dan secara langsung dapat mempengaruhi proses diagnosis. Teknik bantuan komputer modern gagal memberikan hasil yang akurat ketika penyakit paru-paru memiliki bentuk yang menantang. Bentuk abnormal ini dapat disebabkan oleh efusi pleura, konsolidasi, dll. Menerapkan teknik segmentasi paru-paru, di mana batas paru-paru diisolasi dari jaringan toraks di sekitarnya, aplikasi kami dapat mengidentifikasi batas dengan ambang masukan pengguna untuk memberikan tampilan yang dapat disesuaikan sepenuhnya bentuk paru-paru, Tujuan dari proyek MatLab ini adalah untuk membuat aplikasi segmentasi paru interaktif yang mudah digunakan untuk mendeteksi kondisi patologis gambar sinar-X paru-paru. Tujuan kami adalah untuk menciptakan cara yang lebih efektif untuk mengilustrasikan dan mengidentifikasi paru-paru abnormal untuk memberi dokter dan ahli radiologi cara yang lebih andal untuk mendiagnosis penyakit paru-paru. Menggunakan alat perancang aplikasi di MatLab, program ini dirancang untuk bekerja secara khusus dengan pemindaian x-ray dada dan computed tomography (CT), tetapi juga diuji untuk bekerja dengan pemindaian MRI.
Petunjuk di bawah ini berisi teknik penyaringan kebisingan kami (filter Wiener low-pass) serta ambang batas gambar (dengan menggunakan histogram intensitas gambar skala abu-abu) dan menggunakan gradien morfologis (perbedaan antara dilatasi dan erosi gambar) untuk mengidentifikasi wilayah yang diminati. Instruksi kemudian akan menjelaskan bagaimana kita mengintegrasikan semua elemen ke dalam antarmuka pengguna grafis (GUI).
Catatan:
1). Proyek ini terinspirasi oleh makalah penelitian: "Segmentasi dan Analisis Gambar Paru-Paru Abnormal di CT: Pendekatan Saat Ini, Tantangan, dan Tren Masa Depan". Yang dapat ditemukan di sini
2). Kami menggunakan gambar sinar-X dari NIH: Clinical Center. Tautan dapat ditemukan di sini
3). Bantuan perancang aplikasi dapat ditemukan di sini
4). Sebelum menjalankan kode: Anda perlu mengubah jalur Dir (pada baris 34) ke direktori file Anda dan jenis gambar (baris 35) (kami menganalisis *.png).
Langkah 1: Langkah 1: Memuat Gambar
Langkah ini akan menampilkan gambar asli dalam skala abu-abu. Ubah 'name_of_picture.png' menjadi nama gambar Anda
jernih; kl; tutup semua;
%% Memuat gambar
raw_x_ray='name_of_picture.png';
saya=imread(raw_x_ray);
angka (101);
imshow(saya);
peta warna (abu-abu);
title('X-Ray Skala Abu-abu');
Langkah 2: Langkah 2: Penyaringan Kebisingan dan Histogram
Untuk menemukan ambang batas untuk gambar skala abu-abu, kami melihat histogram untuk melihat apakah ada mode yang berbeda. Baca selengkapnya disini
I=wiener2(I, [5 5]);
angka (102);
subplot(2, 1, 1);
imshow(saya);
subplot(2, 1, 2);
imhist(I, 256);
Langkah 3: Langkah 3: Menetapkan Ambang Batas
Langkah ini memungkinkan Anda untuk mengatur ambang batas sesuai dengan histogram. morphologicalGradient akan menyorot wilayah yang diinginkan dalam warna merah, dan fungsi visboundaries melapisi gambar paru-paru yang digariskan dan difilter dengan warna merah.
Dengan menggunakan regionprops, kita dapat menentukan susunan solidility dan mengurutkannya secara descending. Selanjutnya saya binarize gambar sclae abu-abu dan menerapkan metode gradien morfologis dan mLoren Shurasking untuk menyorot region of interest (ROI). Langkah selanjutnya adalah membalikkan gambar sehingga ROI paru-paru berwarna putih di latar belakang hitam. Saya menggunakan fungsi showMaskAsOverlay untuk menampilkan 2 topeng. Catatan: kode ini terinspirasi dari Loren Shure, tautan.
Terakhir, saya membuat garis merah dengan menggunakan batas bwbw dan menutupi gambar filter dan batas.
a_thresh = I >= 172; % tetapkan ambang ini
[labelImage, numberOfBlobs] = bwlabel(a_thresh);
props = regionprops(a_thresh, 'semua');
sortirSolidity = sort([props. Solidity], 'turun');
SB = diurutkan Soliditas(1);
jika SB == 1% SB hanya menerima soliditas == 1 menyaring tulang
binaryImage = imbinarize(I); angka (103);
imshow(gambar biner); peta warna (abu-abu);
SE = strel('persegi', 3);
morphologicalGradient = imsubtract(imdilate(binaryImage, SE), imerode(binaryImage, SE));
mask = imbinarize(morphologicalGradient, 0.03);
SE = strel('persegi', 2);
topeng = tutup(topeng, SE);
mask = imfill(masker, 'lubang');
topeng = bwareafilt(topeng, 2); % nomor kontrol pertunjukan area
notMask = ~mask;
topeng = topeng | bwpropfilt(notMask, 'Area', [-Inf, 5000 - eps(5000)]);
showMaskAsOverlay(0.5, topeng, 'r'); % Anda harus mengunduh aplikasi/fungsi showMaskAsOverlay
BW2 = imfill(binaryImage, 'lubang');
gambar_baru = BW2;
gambar_baru(~topeng) = 0; % membalikkan latar belakang dan lubang
B=bwboundaries(new_image); % hanya dapat menerima 2 dimensi
angka (104);
imshow(gambar_baru);
tunggu
visboundaries (B);
akhir
Langkah 4: Membuat GUI
Sekarang, kami mengintegrasikan kode sebelumnya ke dalam aplikasi MATLAB. Buka Perancang Aplikasi di MATLAB (Baru > Aplikasi). Pertama, kami mendesain antarmuka dengan mengklik-tahan-dan menyeret tiga sumbu ke ruang kerja tengah. Selanjutnya, kita klik-tahan-tarik dua tombol, satu bidang edit (teks), satu bidang edit (numerik), satu slider, dan satu menu drop-down. Dua sumbu masing-masing akan menampilkan pratinjau dan menganalisis gambar, dan sumbu ketiga akan menampilkan histogram piksel untuk gambar "terpilih" pratinjau. Kolom edit (teks) akan menampilkan jalur file dari gambar yang dipilih, dan kolom edit (numerik) akan menampilkan area piksel yang terdeteksi pada paru-paru.
Sekarang beralih dari tampilan desain ke tampilan kode di App Designer. Masukkan kode untuk properti dengan mengklik tombol merah "Properti" dengan tanda plus di sampingnya. Inisialisasi properti I, threshold, dan regionToExtract seperti pada kode yang disediakan di bawah ini. Selanjutnya, klik kanan tombol di sisi kanan atas ruang kerja (Browser Komponen) dan pergi dari Callbacks>Go to… callback. Tambahkan kode untuk "fungsi SelectImageButtonPushed (aplikasi, acara)." Kode ini memungkinkan Anda untuk memilih gambar untuk dianalisis dari komputer Anda menggunakan uigetfile. Setelah memilih gambar, gambar pratinjau akan muncul di bawah sumbu disertai dengan histogram. Kemudian, klik kanan tombol lainnya dan ulangi prosedur yang sama untuk membuat fungsi panggilan balik.
Tambahkan kode di bawah "fungsi AnalyzeImageButtonPushed (aplikasi, acara)." Kode ini akan melakukan penghitungan piksel dan deteksi gumpalan pada gambar pratinjau pada tombol analisis gambar (mana pun yang Anda klik kanan untuk kode ini). Setelah memprogram tombol, sekarang kita akan memprogram penggeser dan menu tarik-turun. Klik kanan penggeser, buat fungsi panggilan balik dan tambahkan kode di bawah "fungsi FilterThresholdSliderValueChanged(aplikasi, acara)" hingga akhir. Ini memungkinkan penggeser untuk menyesuaikan ambang batas intensitas abu-abu.
Buat fungsi panggilan balik untuk menu tarik-turun, dan tambahkan kode di bawah "fungsi AreastoExtractDropDownValueChanged(aplikasi, peristiwa)" untuk memungkinkan menu tarik-turun mengubah jumlah gumpalan yang ditampilkan pada sumbu gambar yang dianalisis. Sekarang, klik setiap entitas di Component Browser dan ubah propertinya sesuai keinginan Anda, seperti mengubah nama entitas, menghapus sumbu, dan mengubah penskalaan. Seret dan lepas entitas Component Browser dalam Design View ke tata letak yang fungsional dan mudah dipahami. Anda sekarang memiliki aplikasi di MATLAB yang dapat menganalisis gambar paru-paru untuk area piksel!
properti (Akses = pribadi)I = ; % file gambar
ambang = 257; %ambang batas untuk binarisasi intensitas abu-abu
regionToExtract = 2;
akhir
fungsi SelectImageButtonPushed (aplikasi, acara)
clc;Dir = 'C:\Users\danie\Downloads\images_004\images'; %define file invariat "awalan"
[imageExt, jalur] = uigetfile('*.png'); %ambil bagian variabel dari nama gambar
imageName = [Dir filessep imageExt]; %menggabungkan strain invariat dan variabel
app. I = imread(namagambar); %membaca gambarnya
imshow(app. I, 'parent', app. UIAxes); %tampilkan gambar
app. FilePathEditField. Value = jalur; %tampilkan jalur file dari mana gambar asli berasal
akhir
fungsi AnalyzeImageButtonPushed (aplikasi, acara)
originalImage = app. I;
originalImage = wiener2(app. I, [5 5]); %filter penghilang titik
histogram(app. AxesHistogram, app. I, 256); %tampilkan histogram gambar
a_thresh = originalImage >= app.threshold; % tetapkan ambang ini
labelImage = bwlabel(a_thresh);
props = regionprops(a_thresh, 'semua');
sortirSolidity = sort([props. Solidity], 'turun');
SB = terurut Soliditas(1);
jika SB == 1% SB hanya menerima soliditas == menyaring tulang
SE = strel('persegi', 3);
morphologicalGradient = imsubtract(imdilate(labelImage, SE), imerode(labelImage, SE));
mask = imbinarize(morphologicalGradient, 0.03);
SE = strel('persegi', 2);
topeng = tutup(topeng, SE);
mask = imfill(masker, 'lubang');
topeng = bwareafilt(topeng, app.regionsToExtract);
% jumlah kontrol area pertunjukan
notMask = ~mask;
topeng = topeng | bwpropfilt(notMask, 'Area', [-Inf, 5000 - eps(5000)]);
BW2 = imfill(labelImage, 'lubang');
gambar_baru = BW2;
gambar_baru(~topeng) = 0;
B = bwboundaries(gambar_baru); % hanya dapat menerima 2 dimensi imshow(new_image, 'parent', app. UIAxes2);
tahan(app. UIAxes2, 'on');
visboundaries (B);
set(gca, 'YDir', 'mundur');
lungArea = bwarea(gambar_baru);
app. PixelAreaEditField. Value = lungArea;
akhir
akhir
fungsi FilterThresholdSliderValueChanged (aplikasi, acara)
app.threshold = app. FilterThresholdSlider. Value;
akhir
function AreastoExtractDropDownValueChanged(app, event)stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double(stringNumber);
akhir
akhir
Direkomendasikan:
MATLAB Deteksi Wajah Mudah: 4 Langkah
MATLAB Deteksi Wajah Mudah: Tujuan utama dari instruksi ini adalah untuk menunjukkan betapa mudahnya pemrosesan gambar, Dengan bantuan MATLAB Deteksi dan pelacakan wajah telah menjadi bidang penelitian yang penting dan aktif, jadi itu sebabnya saya akan menjelaskan bagaimana hal itu dapat dilakukan dengan
Cara Membuat Kode dan Menerbitkan Matlab 2016b ke Word (Panduan Pemula): 4 Langkah
Cara Membuat Kode dan Menerbitkan Matlab 2016b ke Word (Panduan Pemula): Matlab adalah program bahasa berkinerja tinggi yang digunakan untuk menghitung hasil teknis. Ini memiliki kemampuan untuk mengintegrasikan visual, komputasi, dan pemrograman dengan cara yang ramah pengguna. Dengan program ini, pengguna dapat mempublikasikan masalah dan solusi
Mengontrol Raspberry Pi Menggunakan Matlab: 5 Langkah
Mengontrol Raspberry Pi Menggunakan Matlab: Hai, tutorial ini tentang mengontrol raspberry pi tanpa kepala menggunakan matlab. Anda mungkin harus menginstal matlab ke versi terbaru untuk mendukung papan raspberry pi yang lebih baru
Pengontrol Robot ROS berbasis Matlab: 9 Langkah
Pengontrol Robot ROS berbasis Matlab: Sejak saya masih kecil, saya selalu bermimpi menjadi Iron Man dan masih melakukannya. Iron Man adalah salah satu karakter yang secara realistis mungkin dan sederhananya saya bercita-cita untuk menjadi Iron Man suatu hari nanti bahkan jika orang menertawakan saya atau mengatakan itu tidak mungkin
Melatih Peningkatan Pemrograman di MATLAB: 6 Langkah
Peningkatan Pemrograman Kereta di MATLAB: Tujuan: Tujuan dari sistem terprogram ini adalah untuk melihat Arduino skala kecil dan menerapkan pengkodean pada skala yang lebih besar untuk berpotensi meningkatkan fitur keselamatan tertentu dari sistem Kereta Api Amtrak. Untuk melakukan ini, kami telah menambahkan sensor kelembaban tanah