Mündəricat:
- Addım 1: Adım 1: Şəkil Yüklənir
- Addım 2: Adım 2: Səs -küy süzgəci və histogram
- Adım 3: Adım 3: Eşiklərin Ayarlanması
- Addım 4: GUI yaratmaq
- Addım 5: Video Demo
Video: MatLab Ağciyər Segmentasiyası: 5 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:43
Müəllif: Phuc Lam, Paul Yeung, Eric Reyes
Ağciyərlərin seqmentləşdirilməsindəki səhvlərin bir xəstəlik sahəsinin təyin edilməsi ilə əlaqədar yanlış məlumatlar verəcəyini və diaqnoz prosesinə birbaşa təsir edə biləcəyini qəbul etmək. Ağciyər xəstəlikləri çətin formalara malik olduqda, müasir kompüter yardım üsulları dəqiq nəticələr verə bilmədi. Bu anormal formalar plevral efüzyonlar, konsolidasiyalar və s. Səbəb ola bilər. Ağciyərin sərhədlərinin ətraf torakal toxumadan təcrid edildiyi ağciyərin seqmentləşdirilməsi texnikasını tətbiq edərək tətbiqimiz, istifadəçinin giriş eşikləri ilə sərhədləri müəyyən edərək tam fərdiləşdirilə bilən görünüşlər verə bilər. ağciyər formaları, Bu MatLab layihəsinin məqsədi ağciyərlərin rentgen görüntülərinin patoloji şərtlərini aşkar etmək üçün istifadəçi dostu bir interaktiv ağciyər seqmentləşdirmə proqramı yaratmaqdır. Hədəfimiz həkimlərə və radioloqlara ağciyər xəstəliklərinin diaqnozu üçün daha etibarlı bir yol vermək üçün anormal ağciyərləri göstərmək və tanımaq üçün daha təsirli bir yol yaratmaqdır. MatLab-dakı proqram dizayn alətindən istifadə edərək, proqram xüsusi olaraq sinə rentgen və kompüter tomoqrafiyası (KT) taramaları ilə işləmək üçün nəzərdə tutulmuşdur, lakin MRT taramaları ilə işləmək üçün də sınaqdan keçirilir.
Aşağıdakı təlimatlarda səs-küy süzmə texnikamız (aşağı keçidli Wiener filtri), eləcə də görüntü eşikləri (boz rəngli görüntünün intensivlik histoqramından istifadə etməklə) və morfoloji qradiyentdən (görüntünün genişlənməsi ilə eroziyası arasındakı fərq) istifadə olunur. maraqlandığınız bölgəni müəyyənləşdirin. Təlimat daha sonra bütün elementləri qrafik istifadəçi interfeysinə (GUI) necə inteqrasiya etdiyimizi izah edəcək.
Qeyd:
1). Bu layihə "CT -də anormal ağciyərlərin seqmentasiyası və görüntü analizi: cari yanaşmalar, çətinliklər və gələcək tendensiyalar" adlı bir araşdırma kitabından ilham almışdır. Hansı burada tapa bilərsiniz
2). NIH: Klinik Mərkəzin rentgen görüntülərindən istifadə edirik. Bağlantı burada tapa bilərsiniz
3). Tətbiq dizaynerinin köməyini burada tapa bilərsiniz
4). Kodu işə salmadan əvvəl: Dir yolunu (34 -cü sətirdə) fayl qovluğunuza və şəkil növünə (sətir 35) dəyişdirməlisiniz (*-p.webp
Addım 1: Adım 1: Şəkil Yüklənir
Bu addım orijinal şəkli boz rəngdə göstərəcək. 'Name_of_picture.png' şəkil adınıza dəyişdirin
aydın; clc; hamısını bağlamaq;
%% Şəkillər yüklənir
raw_x_ray = 'image_of_picture.png';
Mən = oxudum (xam_x_ray);
rəqəm (101);
imshow (I);
rəng xəritəsi (boz);
başlıq ('Boz rəngli X-Ray');
Addım 2: Adım 2: Səs -küy süzgəci və histogram
Boz miqyaslı görüntünün eşikini tapmaq üçün fərqli bir rejimin olub olmadığını görmək üçün histoqrama baxırıq. Ətraflı burada oxuyun
I = wiener2 (I, [5 5]);
rəqəm (102);
alt plan (2, 1, 1);
imshow (I);
alt plan (2, 1, 2);
imhist (I, 256);
Adım 3: Adım 3: Eşiklərin Ayarlanması
Bu addım, eşik həddini histoqrama görə təyin etməyə imkan verir. morfologicalGradient, qırmızı ilə maraqlandığı bölgəni vurgulayacaq və funksiya sərhədləri ağciyərin qırmızı ilə təsvir edilmiş və süzülmüş görüntüsünü örtər.
Regionprops istifadə edərək, möhkəmlik dizilərini dəqiqləşdirə və azalana görə sıralaya bilərik. Sonra boz rəngli görüntünü ikiqatlaşdırıram və maraq dairəsini (ROI) vurğulamaq üçün morfoloji gradient metodunu və mLoren Shurasking tətbiq edirəm. Növbəti addım, görüntünün ters çevrilməsidir ki, ağ ciyər ROI qara fonda ağ olsun. 2 maskanı göstərmək üçün showMaskAsOverlay funksiyasından istifadə edirəm. Qeyd: kod Loren Shure, linkdən ilhamlanıb.
Lazım olsa, bwbwboundaries istifadə edərək və filtr görüntüsünü və sərhədləri maskalayaraq qırmızı bir kontur yaradıram.
a_thresh = I> = 172; % bu həddi təyin etdi
[labelImage, numberOfBlobs] = bwlabel (a_thresh);
rekvizit = regionprops (a_thresh, 'hamısı');
sortedSolidity = sort ([props. Solidity], 'enmək');
SB = sortedSolidity (1);
əgər SB == 1 % SB yalnız möhkəmliyi qəbul edərsə == 1 sümükləri süzər
binaryImage = imbinarize (I); rəqəm (103);
imshow (binaryImage); rəng xəritəsi (boz);
SE = strel ('kvadrat', 3);
morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));
maska = imbinarize edin (morfoloji Gradient, 0.03);
SE = strel ('kvadrat', 2);
maska = imclose (maska, SE);
maska = doldurma (maska, 'deşiklər');
maska = bwareafilt (maska, 2); Sahə şousunun % nəzarət sayı
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Sahə', [-İnf, 5000 - eps (5000)]);
showMaskAsOverlay (0.5, maska, 'r'); showMaskAsOverlay tətbiqini/funksiyasını yükləməlisiniz
BW2 = imfill (binaryImage, 'deşiklər');
new_image = BW2;
new_image (~ maska) = 0; fon və deşikləri ters çevir
B = bwboundaries (new_image); % yalnız 2 ölçü qəbul edə bilər
rəqəm (104);
imshow (new_image);
gözlə
sərhədlər (B);
bitmək
Addım 4: GUI yaratmaq
İndi əvvəlki kodu MATLAB tətbiqinə inteqrasiya edirik. MATLAB -da Tətbiq Dizaynerini açın (Yeni> Tətbiq). Əvvəlcə interfeysi üç oxda mərkəz iş sahəsinə sürükləyərək basıb saxlayın. Sonra, iki düyməni, bir redaktə sahəsini (mətni), bir redaktə sahəsini (rəqəmsal), bir kaydırıcıyı və bir açılan menyunu basıb saxlayın. İki oxun hər biri görüntünün ön görünüşünü və təhlilini, üçüncü oxlar isə "seçilmiş" önizləmə üçün piksellərin histoqramını göstərəcək. Redaktə sahəsi (mətn) qutusu seçilmiş görüntünün fayl yolunu, redaktə sahəsi (rəqəmsal) isə ağciyərlərin aşkar edilmiş piksel sahəsini göstərəcək.
İndi App Designer -də dizayn görünüşündən kod görünüşünə keçin. Qırmızı "Xüsusiyyətlər" düyməsini basaraq əlavə işarəsi olan kodun xüsusiyyətlərini daxil edin. Aşağıdakı kodda olduğu kimi I, threshold və regionToExtract xüsusiyyətlərini işə salın. Sonra, iş sahəsinin sağ üst hissəsindəki bir düyməni (Komponent Brauzeri) sağ vurun və Geri Çağırışlar> Gedin… geri çağırma bölməsinə keçin. "SelectImageButtonPushed funksiyası (tətbiq, hadisə)" üçün kod əlavə edin. Bu kod, uigetfile istifadə edərək kompüterinizdən təhlil etmək üçün bir şəkil seçməyə imkan verir. Bir şəkil seçdikdən sonra, histogramın müşayiəti ilə oxların altında bir önizləmə görüntüsü görünəcək. Sonra digər düyməni sağ vurun və geri çağırma funksiyası yaratmaq üçün eyni proseduru təkrarlayın.
"AnalyzeImageButtonPushed funksiyası (tətbiq, hadisə)" altına kod əlavə edin. Bu kod, görüntünün təhlili düyməsindəki önizləmə görüntüsündə piksel sayma və ləkə aşkarlamasını yerinə yetirəcək (bu kodu hansını sağ tıkladınızsa). Düymələri proqramlaşdırdıqdan sonra, indi kaydırıcıyı və açılan menyunu proqramlaşdıracağıq. Kaydırıcıyı sağ basın, geri çağırma funksiyası yaradın və sonuna qədər "FilterThresholdSliderValueChanged funksiyası (tətbiq, hadisə)" altına kod əlavə edin. Bu, kaydırıcının boz-intensivlik həddini tənzimləməsinə imkan verir.
Açılan menyu üçün bir geri çağırma funksiyası yaradın və açılan menyunun təhlil edilən şəkil oxlarında göstərilən ləkələrin sayını dəyişdirməsinə icazə vermək üçün "AreastoExtractDropDownValueChanged (tətbiq, hadisə) funksiyası" nın altına kod əlavə edin. İndi, Komponent Brauzerindəki hər bir obyekti vurun və xüsusiyyətlərini zövqünüzə görə dəyişdirin, məsələn varlıqların adlarını dəyişdirmək, baltaları çıxarmaq və ölçüsünü dəyişdirmək. Dizayn Görünüşündə Bileşen Brauzerinin obyektlərini funksional və başa düşülən bir nizama sürükləyin. İndi MATLAB -da ağciyər şəkillərini piksel sahəsi üçün təhlil edə biləcək bir tətbiqiniz var!
xassələr (Access = özəl) I = ; % şəkil faylı
eşik = 257; boz intensivliyi binarizing üçün %eşik
regionToExtract = 2;
bitmək
SelectImageButtonPushed funksiyası (tətbiq, hadisə)
clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %"prefiks" dəyişməz faylını təyin edir
[imageExt, yol] = uigetfile ('*. png'); %şəkil adının dəyişən hissəsini tutur
imageName = [Direkt faylları imageExt]; dəyişməz və dəyişkən strinqləri birləşdirin
app. I = imread (imageName); %şəkli oxuyun
imshow (app. I, 'valideyn', app. UIAxes); %şəkli göstərin
app. FilePathEditField. Value = yol; Orijinal görüntünün haradan gəldiyini göstərən fayl yolu
bitmək
AnalyzeImageButtonPushed funksiyası (tətbiq, hadisə)
originalImage = app. I;
originalImage = wiener2 (app. I, [5 5]); %nöqtə çıxaran filtr
histogram (app. AxesHistogram, app. I, 256); %görüntünün histoqramını göstərin
a_thresh = originalImage> = app.threshold; % bu həddi təyin etdi
labelImage = bwlabel (a_thresh);
rekvizit = regionprops (a_thresh, 'hamısı');
sortedSolidity = sort ([props. Solidity], 'enmək');
SB = sortedSolidity (1);
əgər SB == 1 % SB yalnız möhkəmliyi qəbul edərsə == 1 sümükləri süzər
SE = strel ('kvadrat', 3);
morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));
maska = imbinarize edin (morfoloji Gradient, 0.03);
SE = strel ('kvadrat', 2);
maska = imclose (maska, SE);
maska = doldurma (maska, 'deşiklər');
maska = bwareafilt (maska, app.regionsToExtract);
Sahə şousunun % nəzarət sayı
notMask = ~ maska;
maska = maska | bwpropfilt (notMask, 'Sahə', [-İnf, 5000 - eps (5000)]);
BW2 = imfill (labelImage, 'deşiklər');
new_image = BW2;
new_image (~ maska) = 0;
B = bwboundaries (new_image); % yalnız 2 ölçü imshow qəbul edə bilər (new_image, 'parent', app. UIAxes2);
saxlayın (app. UIAxes2, 'on');
sərhədlər (B);
set (gca, 'YDir', 'tərs');
lungArea = bwarea (new_image);
app. PixelAreaEditField. Value = lungArea;
bitmək
bitmək
FilterThresholdSliderValueChanged funksiyası (tətbiq, hadisə)
app.threshold = app. FilterThresholdSlider. Value;
bitmək
AreastoExtractDropDownValueChanged funksiyası (tətbiq, hadisə) stringNumber = app. AreastoExtractDropDown. Value;
app.regionsToExtract = str2double (stringNumber);
bitmək
bitmək
Tövsiyə:
MATLAB Asan Üz Tanıma: 4 addım
MATLAB Asan Üz Tanıma: Bu təlimatların əsas məqsədi, görüntü işlənməsinin nə qədər asan olacağını göstərməkdir, MATLABFace -in köməyi ilə əhəmiyyətli və aktiv bir araşdırma sahəsi olmuşdur, buna görə izah edəcəyəm. ağılla necə edilə bilər
Matlab 2016b -ni Word -ə necə kodlaşdırmaq və nəşr etmək olar (Başlayanlar Kılavuzu): 4 addım
Matlab 2016b-ni Word-ə necə kodlaşdırmaq və nəşr etmək olar (Başlayanlar üçün Kılavuz): Matlab, texniki nəticələri hesablamaq üçün istifadə olunan yüksək performanslı bir dil proqramdır. Vizualları, hesablamaları və proqramlaşdırmanı istifadəçi dostu şəkildə inteqrasiya etmək qabiliyyətinə malikdir. Bu proqramla istifadəçi problemləri və həll yollarını dərc edə bilər
Matlab istifadə edərək Raspberry Pi nəzarət: 5 addım
Matlab istifadə edərək Raspberry Pi nəzarət: Hey, bu təlimat matlab istifadə edərək başsız moruq pi nəzarət etmək haqqında. Daha yeni moruq pi lövhəsinə dəstək olmaq üçün matlabı ən son versiyaya yükləməyiniz lazım ola bilər
Matlab əsaslı ROS Robotik Nəzarətçi: 9 addım
Matlab əsaslı ROS Robotik Nəzarətçisi: Uşaqlığımdan bəri həmişə Dəmir Adam olmağı xəyal etmişəm və indi də edirəm. Dəmir Adam gerçəkdən mümkün olan və bir gün Dəmir Adam olmağı arzuladığım adamlardan biridir, hətta insanlar mənə gülsələr də və ya mümkün olmadığını desələr də
MATLAB -da Proqramlaşdırma Təkmilləşdirmələri: 6 Addım
MATLAB -da Proqramlaşdırma Təkmilləşdirmələri: Məqsəd: Bu proqramlaşdırılmış sistemin məqsədi, Amtrak Railroad sistemlərinin müəyyən təhlükəsizlik xüsusiyyətlərini potensial olaraq artırmaq üçün kiçik ölçülü Arduino -ya baxmaq və kodlamanı daha geniş miqyasda tətbiq etməkdir. Bunu etmək üçün torpağa nəm əlavə etdik