Talaan ng mga Nilalaman:
- Hakbang 1: Hakbang 1: Naglo-load ng Larawan
- Hakbang 2: Hakbang 2: Pagsala ng Noise at Histogram
- Hakbang 3: Hakbang 3: Pagtatakda ng Mga Threshold
- Hakbang 4: Lumilikha ng GUI
- Hakbang 5: Demo ng Video
Video: MatLab Lung Segmentation: 5 Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:10
Ni: Phuc Lam, Paul Yeung, Eric Reyes
Ang pagkilala na ang mga pagkakamali sa paghihiwalay ng baga ay magbubunga ng maling impormasyon tungkol sa pagkilala sa isang lugar ng sakit at maaaring direktang makakaapekto sa proseso ng pagsusuri. Nabigo ang mga modernong diskarte sa tulong ng computer na makapaghatid ng tumpak na mga resulta kapag ang mga sakit sa baga ay mayroong mapaghamong mga hugis. Ang mga abnormal na hugis na ito ay maaaring sanhi ng pleural effusions, consolidations, atbp. Ang paglalapat ng diskarte sa paghihiwalay ng baga, kung saan ang mga hangganan ng baga ay nakahiwalay mula sa nakapalibot na thoracic tissue, maaaring kilalanin ng aming app ang mga hangganan sa mga input threshold ng gumagamit upang magbigay ng ganap na napapasadyang mga view ng mga hugis ng baga, Ang layunin ng proyektong ito ng MatLab ay upang lumikha ng isang madaling gamitin na interactive na paghihiwalay ng baga app upang matukoy ang mga kondisyon ng pathologic ng mga imahe ng X-ray ng baga. Ang aming hangarin ay upang lumikha ng isang mas mabisang paraan upang ilarawan at makilala ang mga hindi normal na baga upang mabigyan ang mga doktor at radiologist ng isang mas maaasahang paraan upang masuri ang mga sakit sa baga. Gamit ang tool ng taga-disenyo ng app sa MatLab, ang programa ay idinisenyo upang gumana nang partikular sa chest x-ray at compute tomography (CT) na mga pag-scan, ngunit nasubukan din ito upang gumana sa mga pag-scan ng MRI.
Ang mga tagubilin sa ibaba ay naglalaman ng aming diskarte sa pag-filter ng ingay (low-pass Wiener filter) pati na rin ang threshold ng imahe (sa pamamagitan ng paggamit ng intensity histogram ng grayscale na imahe) at paggamit ng isang morphological gradient (ang pagkakaiba sa pagitan ng pagluwang at pagguho ng isang imahe) upang kilalanin ang isang rehiyon ng interes. Ipapaliwanag ng tagubilin kung paano namin isinasama ang lahat ng mga elemento sa graphic user interface (GUI).
Tandaan:
1). Ang proyektong ito ay binigyang inspirasyon ng isang papel sa pagsasaliksik: "Paghihiwalay at Pagtatasa ng Imahe ng Mga Karaniwang Baga sa CT: Mga Kasalukuyang Diskarte, Hamon, at Mga Uso sa Hinaharap". Alin ang matatagpuan dito
2). Gumagamit kami ng mga imahe ng X-ray mula sa NIH: Clinical Center. Ang link ay matatagpuan dito
3). Ang tulong ng taga-disenyo ng app ay matatagpuan dito
4). Bago patakbuhin ang code: kailangan mong baguhin ang Dir path (sa linya 34) sa iyong direktoryo ng file at uri ng imahe (linya 35) (pinag-aaralan namin ang *.png).
Hakbang 1: Hakbang 1: Naglo-load ng Larawan
Ipapakita sa iyo ng hakbang na ito ang orihinal na larawan sa grey scale. Palitan ang 'name_of_picture.png' sa iyong pangalan ng imahe
malinaw; clc; isara ang lahat;
%% Naglo-load ng mga imahe
raw_x_ray = 'name_of_picture.png';
I = imread (raw_x_ray);
pigura (101);
imshow (I);
colormap (grey);
pamagat ('Grayscale X-Ray');
Hakbang 2: Hakbang 2: Pagsala ng Noise at Histogram
Upang makahanap ng threshold para sa kulay-abo na imahe ng scale, tinitingnan namin ang histogram upang makita kung ang isang natatanging mga mode. Magbasa pa dito
I = wiener2 (I, [5 5]);
pigura (102);
subplot (2, 1, 1);
imshow (I);
subplot (2, 1, 2);
imhist (I, 256);
Hakbang 3: Hakbang 3: Pagtatakda ng Mga Threshold
Pinapayagan ka ng hakbang na ito na itakda ang threshold ayon sa histogram. ang morphologicalGradient ay i-highlight ang rehiyon ng interes sa pula, at ang function visboundaries ay overlay ng nakabalangkas at nai-filter na imahe ng baga sa pula.
Sa pamamagitan ng paggamit ng mga regionprops, maaari nating makuha ang mga arrays ng solidity at pag-uri-uriin ang mga ito sa pababang. Susunod ay binari ko ang imahe ng grey sclae at inilapat ang morphlogical gradient na pamamaraan at mLoren Shurasking upang i-highlight ang rehiyon ng interes (ROI). Ang susunod na hakbang ay upang baligtarin ang imahe kaya ang baga ROI ay puti sa itim na background. Ginagamit ko ang function na showMaskAsOverlay upang ipakita ang 2 mask. Tandaan: ang code ay inspirasyon mula sa Loren Shure, link.
Lasly, lumilikha ako ng pulang balangkas sa pamamagitan ng paggamit ng mga bwbwboundaries at masking ang imahe ng filter at ang mga hangganan.
a_thresh = I> = 172; % itakda ang threshold na ito
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
props = regionprops (a_thresh, 'lahat');
pinagsunod-sunodSolidity = pag-uuri ([props. Solidity], 'pagbaba');
SB = pinagsunod-sunodSolidity (1);
kung ang SB == 1% SB ay tumatanggap lamang ng solidity == 1 mag-filter ng mga buto
binaryImage = imbinarize (I); pigura (103);
imshow (binaryImage); colormap (grey);
SE = strel ('square', 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
mask = imbinarize (morphologicalGradient, 0.03);
SE = strel ('square', 2);
mask = imclose (mask, SE);
mask = imfill (maskara, 'hole');
mask = bwareafilt (mask, 2); % control number ng area show
notMask = ~ maskara;
mask = mask | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
showMaskAsOverlay (0.5, mask, 'r'); % kailangan mong mag-download ng app / function na showMaskAsOverlay
BW2 = imfill (binaryImage, 'hole');
new_image = BW2;
new_image (~ mask) = 0; % baligtarin ang background at mga butas
B = bwboundaries (bagong_image); 2 na sukat lamang ang matatanggap ni%
pigura (104);
imshow (bagong_image);
hawakan mo
visboundaries (B);
magtapos
Hakbang 4: Lumilikha ng GUI
Ngayon, isinasama namin ang naunang code sa isang MATLAB app. Buksan ang App Designer sa MATLAB (Bago> App). Una, dinisenyo namin ang interface sa pamamagitan ng pag-click-hold-at pag-drag sa tatlong palakol sa gitna ng workspace. Susunod, nag-click-hold-drag kami ng dalawang mga pindutan, isang patlang ng pag-edit (teksto), isang patlang ng pag-edit (bilang), isang slider, at isang drop-down na menu. Dalawang palakol ay ipapakita ang bawat preview at susuriin ang imahe, at ang pangatlong palakol ay magpapakita ng isang histogram ng mga pixel para sa preview na "napiling" imahe. Ipapakita ng kahon ng patlang ng pag-edit (teksto) ang file path ng napiling imahe, at ang patlang ng pag-edit (numeric) ay ipapakita ang natukoy na pixel area ng baga.
Lumipat ngayon mula sa view ng disenyo sa view ng code sa App Designer. Ipasok sa code ang code para sa mga pag-aari sa pamamagitan ng pag-click sa pulang pindutang "Mga Katangian" na may plus sign sa tabi nito. Pinasimulan ang mga pag-aari na I, threshold, at mga rehiyonToExtract tulad ng sa code na ibinigay sa ibaba. Susunod, mag-right click sa isang pindutan sa kanang itaas na kanang bahagi ng workspace (ang Component Browser) at pumunta mula sa Mga Callback> Pumunta sa… callback. Idagdag ang code para sa "function SelectImage ButtonPush (app, kaganapan)." Pinapayagan ka ng code na ito na pumili ng isang imahe upang pag-aralan mula sa iyong computer gamit ang uigetfile. Matapos pumili ng isang imahe, lilitaw ang isang preview na imahe sa ilalim ng mga palakol na sinamahan ng isang histogram. Pagkatapos, i-right click ang iba pang pindutan at ulitin ang parehong pamamaraan upang lumikha ng isang function ng callback.
Idagdag sa code sa ilalim ng "function AnalyzeImage ButtonPush (app, kaganapan)." Gagawa ng code na ito ang pagbibilang ng pixel at pagtuklas ng blob sa preview ng imahe sa pag-aralan ang pindutan ng imahe (alinman sa na-click nang tama para sa code na ito). Matapos ma-program ang mga pindutan, ipaprograma namin ngayon ang slider at ang drop-down na menu. Mag-right click sa slider, lumikha ng isang function ng callback at idagdag sa code sa ilalim ng "function FilterThresholdSliderValueChanged (app, kaganapan)" hanggang sa katapusan. Pinapayagan nito ang slider na ayusin ang grey-intensity threshold.
Lumikha ng isang function ng callback para sa drop down menu, at idagdag sa code sa ilalim ng "function AreastoExtractDropDownValueChanged (app, kaganapan)" upang payagan ang drop down na menu upang mabago ang bilang ng mga patak na ipinapakita sa pinag-aralan na mga axis ng imahe. Ngayon, i-click ang bawat nilalang sa Component Browser at baguhin ang kanilang mga pag-aari ayon sa gusto mo, tulad ng pagbabago ng mga pangalan ng mga entity, pag-aalis ng mga palakol, at pagbabago ng pag-scale. I-drag at i-drop ang mga entity ng Component Browser sa View ng Disenyo sa isang layout na may pag-andar at madaling maunawaan. Mayroon ka na ngayong isang app sa MATLAB na maaaring pag-aralan ang mga imahe ng baga para sa pixel area!
mga pag-aari (Access = pribado) I = ; % dokumentong Larawan
threshold = 257; % threshold para sa binarizing grey intensity
mga rehiyonToExtract = 2;
magtapos
pagpapaandar SelectImage ButtonPush (app, kaganapan)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; % tukuyin ang invariate file na "pref"
[imageExt, path] = uigetfile ('*. png'); % grab ang variable na bahagi ng pangalan ng imahe
imageName = [Dir filesep imageExt]; % concatenate nakaka-engganyo at variable variable
app. I = imread (imageName); % basahin ang imahe
imshow (app. I, 'magulang', app. UIAxes); % ipakita ang imahe
app. FilePathEditField. Value = path; % display path ng file kung saan nagmula ang orihinal na imahe
magtapos
pag-andar AnalyzeImage ButtonPush (app, kaganapan)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); % filter ng pagtanggal ng tuldok
histogram (app. AxesHistogram, app. I, 256); % ipakita ang histogram ng imahe
a_thresh = originalImage> = app.threshold; % itakda ang threshold na ito
labelImage = bwlabel (a_thresh);
props = regionprops (a_thresh, 'lahat');
pinagsunod-sunodSolidity = pag-uuri ([props. Solidity], 'pagbaba');
SB = pinagsunod-sunodSolidity (1);
kung ang SB == 1% SB ay tumatanggap lamang ng solidity == 1 mag-filter ng mga buto
SE = strel ('square', 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
mask = imbinarize (morphologicalGradient, 0.03);
SE = strel ('square', 2);
mask = imclose (mask, SE);
mask = imfill (maskara, 'hole');
mask = bwareafilt (mask, app.regionsToExtract);
% control number ng area show
notMask = ~ maskara;
mask = mask | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'hole');
new_image = BW2;
new_image (~ mask) = 0;
B = bwboundaries (bagong_image); Maaari lamang tanggapin ni% ang 2 dimshow imshow (new_image, 'parent', app. UIAxes2);
hawakan (app. UIAxes2, 'on');
visboundaries (B);
itakda (gca, 'YDir', 'reverse');
lungArea = bwarea (new_image);
app. PixelAreaEditField. Value = lungArea;
magtapos
magtapos
pag-andar FilterThresholdSliderValueChanged (app, kaganapan)
app.threshold = app. FilterThresholdSlider. Value;
magtapos
pagpapaandar AreastoExtractDropDownValueChanged (app, kaganapan) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
magtapos
magtapos
Inirerekumendang:
MATLAB Madaling Pagtuklas ng Mukha: 4 na Hakbang
MATLAB Madali na Pagtuklas ng Mukha: Ang pangunahing layunin ng mga itinuturo na ito ay upang maipakita kung gaano kadali, magiging ang pagpoproseso ng imahe, Sa tulong ng pagtuklas ng MATLABFace at pagsubaybay ay isang mahalagang at aktibong larangan ng pagsasaliksik, kaya't bakit ko ipaliwanag kung paano ito magagawa wit
Paano Mag-code at Mag-publish ng Matlab 2016b sa Word (Gabay sa Mga Nagsisimula): 4 na Hakbang
Paano Mag-code at Mag-publish ng Matlab 2016b sa Word (Gabay sa Mga Nagsisimula): Ang Matlab ay isang programa sa wika na may mahusay na pagganap na ginagamit upang makalkula ang mga teknikal na resulta. Ito ay may kakayahang pagsamahin ang mga visual, pagkalkula, at programa sa isang madaling gamitin na paraan. Sa program na ito, maaaring mag-publish ang gumagamit ng mga problema at solusyon
Pagkontrol sa Raspberry Pi Gamit ang Matlab: 5 Hakbang
Pagkontrol sa Raspberry Pi Gamit ang Matlab: Hoy, ang tutorial na ito ay tungkol sa pagkontrol sa iyong walang ulo na raspberry pi gamit ang matlab. Maaaring kailanganin mong i-install ang matlab sa pinakabagong bersyon para sa suporta sa mas bagong board na raspberry pi
Matlab-based ROS Robotic Controller: 9 Mga Hakbang
Matlab-based ROS Robotic Controller: Mula pa noong bata ako, palagi kong pinangarap na maging Iron Man at ginagawa pa rin ito. Ang Iron Man ay isa sa mga character na kung saan ay makatotohanang posible at simpleng ilagay na hangad kong maging Iron Man balang araw kahit na pagtawanan ako ng mga tao o sabihin na impossib ito
Mga Pagpapahusay sa Programming ng Tren sa MATLAB: 6 na Hakbang
Mga Pagpapahusay sa Programming ng Tren sa MATLAB: Layunin: Ang layunin ng programang sistemang ito ay upang tumingin sa isang maliit na sukat ng Arduino at ilapat ang pag-coding sa isang mas malaking sukat upang potensyal na mapahusay ang ilang mga tampok sa kaligtasan ng mga system ng Amtrak Railroad. Upang magawa ito, nagdagdag kami ng isang sen ng kahalumigmigan sa lupa