Mündəricat:

MatLab Ağciyər Segmentasiyası: 5 addım
MatLab Ağciyər Segmentasiyası: 5 addım

Video: MatLab Ağciyər Segmentasiyası: 5 addım

Video: MatLab Ağciyər Segmentasiyası: 5 addım
Video: Right Pleural Effusion: Butterfly iQ Clinical Image 2024, Noyabr
Anonim
MatLab Ağciyər Segmentasiyası
MatLab Ağciyər Segmentasiyası

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

Addım 1: Şəkil Yüklənir
Addı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

Addım 2: Səs filtrasiyası və histogram
Addım 2: Səs filtrasiyası 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ı

Addım 3: Eşiklərin Ayarlanması
Addım 3: Eşiklərin Ayarlanması
Addım 3: Eşiklərin Ayarlanması
Addı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ə: