Мазмұны:

MatLab өкпенің сегменттелуі: 5 қадам
MatLab өкпенің сегменттелуі: 5 қадам
Anonim
MatLab өкпенің сегменттелуі
MatLab өкпенің сегменттелуі

Авторы: Фук Лам, Пол Ёнг, Эрик Рейс

Өкпенің сегменттеуіндегі қателіктер аурудың аймағын анықтауға қатысты жалған ақпарат беретінін және диагностика процесіне тікелей әсер ететінін біле отырып. Компьютерлік көмек көрсетудің заманауи әдістері өкпе аурулары күрделі формаларға ие болғанда дәл нәтиже бере алмады. Бұл қалыптан тыс пішіндерге плевралық эффузия, консолидация және т.б. себеп болуы мүмкін, өкпенің шекарасы кеуде клеткасының ұлпасынан оқшауланған өкпені сегменттеу әдісін қолдана отырып, біздің қолданба толық реттелетін көріністерді беру үшін пайдаланушының кіру шегімен шекараны анықтай алады. өкпе пішіндері, Бұл MatLab жобасының мақсаты-өкпенің рентгендік суреттерінің патологиялық жағдайларын анықтау үшін пайдаланушыға ыңғайлы интерактивті өкпені сегменттеу қосымшасын құру. Біздің мақсат - дәрігерлер мен рентгенологтарға өкпе ауруларын диагностикалаудың неғұрлым сенімді әдісін беру үшін қалыпты емес өкпені суреттеу мен анықтаудың тиімді әдісін жасау. MatLab бағдарламалық жасақтама құралын қолдана отырып, бағдарлама кеуде рентгені мен компьютерлік томографиямен (КТ) арнайы жұмыс жасауға арналған, бірақ ол сонымен қатар МРТ сканерлерімен жұмыс жасау үшін сыналған.

Төмендегі нұсқаулықта шуды сүзу әдістемесі (төмен өткізгішті Wiener сүзгісі), сондай-ақ кескін табалдырығы (сұр түстің кескінінің қарқындылығы гистограммасын қолдану арқылы) және морфологиялық градиент (суреттің кеңеюі мен эрозиясы арасындағы айырмашылық) бар. қызығушылық аймағын анықтау. Нұсқаулық барлық элементтерді графикалық пайдаланушы интерфейсіне (GUI) қалай біріктіру керектігін түсіндіреді.

Ескерту:

1). Бұл жоба: «КТ -дағы қалыпты емес өкпенің сегменттелуі мен имидждік талдауы: қазіргі тәсілдер, қиындықтар мен болашақ тенденциялар» атты ғылыми мақаладан шабытталған. Қай жерден табуға болады

2). Біз NIH: клиникалық орталығының рентген суреттерін қолданамыз. Сілтемені мына жерден табуға болады

3). Қолданба дизайнерлерінің көмегін мына жерден табуға болады

4). Кодты іске қоспас бұрын: Dir жолын (34 -жолда) файл каталогына және кескін түріне (35 -жол) өзгерту керек (біз *-p.webp

1 -қадам: 1 -қадам: Суретті жүктеу

1 -қадам: кескінді жүктеу
1 -қадам: кескінді жүктеу

Бұл қадам сізге сұр масштабтағы түпнұсқа суретті көрсетеді. 'Name_of_picture.png' файлын сурет атауына өзгертіңіз

анық; clc; бәрін жабу;

%% Кескіндер жүктелуде

raw_x_ray = 'name_of_picture.png';

Мен = оқимын (raw_x_ray);

сурет (101);

imshow (I);

түс картасы (сұр);

атауы ('Сұр шкала рентгені');

2 -қадам: 2 -қадам: шуды сүзу және гистограмма

2 -қадам: шуды сүзу және гистограмма
2 -қадам: шуды сүзу және гистограмма

Сұр масштабты кескіннің табалдырығын табу үшін біз гистограмманы қарап, нақты режимдердің бар -жоғын білеміз. Толығырақ мына жерден оқыңыз

I = wiener2 (I, [5 5]);

сурет (102);

қосалқы жоспар (2, 1, 1);

imshow (I);

қосалқы жоспар (2, 1, 2);

имхист (I, 256);

3 -қадам: 3 -қадам: Шекті мәндерді орнату

3 -қадам: Шекті мәндерді орнату
3 -қадам: Шекті мәндерді орнату
3 -қадам: Шекті мәндерді орнату
3 -қадам: Шекті мәндерді орнату

Бұл қадам шекті гистограммаға сәйкес орнатуға мүмкіндік береді. morphologicalGradient қызыл түске қызығушылық аймағын бөлектейді, ал функцияның шекаралары өкпенің қызыл және фильтрленген суретін жабады.

Аймақтық болжамдарды қолдана отырып, біз беріктік массивтерін анықтай аламыз және оларды кему бойынша сұрыптай аламыз. Әрі қарай, мен сұр скаланың бейнесін екіге бөліп, морфологиялық градиент әдісін және mLoren Shurasking қызығушылық аймағын (ROI) ерекшелеу үшін қолданамын. Келесі қадам - суретті төңкеру, сондықтан өкпенің ROI ақ фонда қара болады. Мен 2 масканы көрсету үшін showMaskAsOverlay функциясын қолданамын. Ескерту: код Loren Shure сілтемесінен алынған.

Мен bwbwboundaries көмегімен және фильтр суреті мен шекарасын маскировкалау арқылы қызыл контур жасаймын.

a_thresh = I> = 172; % осы шекті орнатады

[labelImage, numberOfBlobs] = bwlabel (a_thresh);

реквизиттер = regionprops (a_thresh, 'барлығы');

sortedSolidity = сұрыптау ([props. Solidity], 'түсу');

SB = sortedSolidity (1);

егер SB == 1 % SB тек беріктікті қабылдайды == 1 сүйектерді сүзеді

binaryImage = imbinarize (I); сурет (103);

imshow (binaryImage); түс картасы (сұр);

SE = стрель ('шаршы', 3);

morphologicalGradient = imsubtract (imdilate (binaryImage, SE), imerode (binaryImage, SE));

маска = имбинаризация (морфологиялық Градиент, 0,03);

SE = стрель ('шаршы', 2);

маска = imclose (маска, SE);

маска = толтыру (маска, 'тесіктер');

маска = bwareafilt (маска, 2); Аймақтық шоудың % бақылау саны

notMask = ~ маска;

маска = маска | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);

showMaskAsOverlay (0.5, маска, 'r'); % showMaskAsOverlay қолданбасын/функциясын жүктеу керек

BW2 = imfill (binaryImage, 'тесіктер');

new_image = BW2;

new_image (~ маска) = 0; % инвертті фон мен тесіктер

B = bwboundaries (new_image); % тек 2 өлшемді қабылдай алады

сурет (104);

imshow (new_image);

күте тұр

шекаралар (В);

Соңы

4 -қадам: GUI құру

Енді біз алдыңғы кодты MATLAB қосымшасына біріктіреміз. Бағдарлама дизайнерін MATLAB -те ашыңыз (Жаңа> Қолданба). Біріншіден, біз интерфейсті үш осьте орталық жұмыс кеңістігіне шертіп ұстап тұру арқылы жасаймыз. Содан кейін біз екі түймені, бір өңдеу өрісін (мәтін), бір өңдеу өрісін (сандық), бір жүгірткіні және бір ашылмалы мәзірді басып тұрамыз. Екі ось әрқайсысы кескіннің алдын ала қарауын және талдауын көрсетеді, ал үшінші осьтер «таңдалған» суретті алдын ала қарау үшін пиксельдердің гистограммасын көрсетеді. Өңдеу өрісі (мәтін) өрісі таңдалған кескіннің файл жолын көрсетеді, ал өңдеу өрісі (сандық) өкпенің анықталған пиксель аймағын көрсетеді.

Енді App Designer бағдарламасында дизайн көрінісінен код көрінісіне ауысыңыз. Қызылға «Сипаттар» түймесін басып, қосу белгісі бар кодты енгізіңіз. Төменде берілген кодта көрсетілгендей I, threshold және regionToExtract сипаттарын инициализациялаңыз. Содан кейін, жұмыс кеңістігінің жоғарғы оң жағындағы түймені тінтуірдің оң жақ түймешігімен нұқыңыз (Компоненттер шолушысы) және Қайта қоңырау шалу> Өту … кері шақыруға өтіңіз. «SelectImageButtonPushed функциясы (қолданба, оқиға)» кодын қосыңыз. Бұл код компьютерден талдау үшін суретті таңдауға мүмкіндік береді uigetfile. Кескінді таңдағаннан кейін осьтердің астында гистограммамен бірге алдын ала қарау кескіні пайда болады. Содан кейін, басқа батырманы тінтуірдің оң жақ түймесімен басып, кері шақыру функциясын жасау үшін сол процедураны қайталаңыз.

«AnalyzeImageButtonPushed функциясы (қолданба, оқиға)» астындағы кодты қосыңыз. Бұл код кескінді талдау түймешігінде алдын ала қарау кескінінде пиксельді санауды және бөртпелерді анықтауға мүмкіндік береді (осы кодты қайсысын тінтуірдің оң жақ түймесімен бассаңыз да). Түймешіктерді бағдарламалағаннан кейін біз енді жүгірткі мен ашылмалы мәзірді бағдарламалаймыз. Жүгірткіні тінтуірдің оң жақ түймешігімен нұқыңыз, кері шақыру функциясын жасаңыз және соңына дейін «FilterThresholdSliderValueChanged функциясы (қолданба, оқиға)» астындағы кодты қосыңыз. Бұл жүгірткіге сұр-қарқындылық шекті реттеуге мүмкіндік береді.

Ашылмалы мәзір үшін кері шақыру функциясын жасаңыз және ашылмалы мәзірге талданатын кескін осьтерінде көрсетілген блоктар санын өзгертуге мүмкіндік беру үшін «AreastoExtractDropDownValueChanged (қолданба, оқиға)» функциясының астындағы кодты қосыңыз. Енді компоненттер шолғышындағы әрбір нысанды шертіңіз және олардың аттарын өзгерту, осьтерді алып тастау және масштабтауды өзгерту сияқты қасиеттерін өз қалауыңыз бойынша өзгертіңіз. Дизайн көрінісіндегі компоненттер шолғышының нысандарын функционалды және түсінікті орналасуға сүйреп апарыңыз. Енді сізде MATLAB -те өкпе суретін пиксельдік аймаққа талдай алатын қосымша бар!

қасиеттер (Access = жеке) I = ; % сурет файлы

шекті = 257; сұр интенсивтілікті бинаризациялаудың %шегі

regionToExtract = 2;

Соңы

SelectImageButtonPushed функциясы (қолданба, оқиға)

clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %«префикс» өзгермейтін файлды анықтайды

[imageExt, жол] = uigetfile ('*. png'); %сурет атауының айнымалы бөлігін алады

imageName = [Dires filesep imageExt]; %өзгермейтін және айнымалы стрингтерді біріктіреді

app. I = imread (imageName); %суретті оқиды

imshow (app. I, 'ата -ана', app. UIAxes); %суретті көрсетеді

app. FilePathEditField. Value = жол; %түпнұсқа кескін қайдан алынғанын көрсетеді

Соңы

AnalyzeImageButtonPushed функциясы (қолданба, оқиға)

originalImage = app. I;

originalImage = wiener2 (app. I, [5 5]); %нүкте жою сүзгісі

гистограмма (app. AxesHistogram, app. I, 256); %кескіннің гистограммасын көрсетеді

a_thresh = originalImage> = app.threshold; % осы шекті орнатады

labelImage = bwlabel (a_thresh);

реквизиттер = regionprops (a_thresh, 'барлығы');

sortedSolidity = сұрыптау ([props. Solidity], 'түсу');

SB = sortedSolidity (1);

егер SB == 1 % SB тек беріктікті қабылдайды == 1 сүйектерді сүзеді

SE = стрель ('шаршы', 3);

morphologicalGradient = imsubtract (imdilate (labelImage, SE), imerode (labelImage, SE));

маска = имбинаризация (морфологиялық Градиент, 0,03);

SE = стрель ('шаршы', 2);

маска = imclose (маска, SE);

маска = толтыру (маска, 'тесіктер');

маска = bwareafilt (маска, app.regionsToExtract);

Аймақтық шоудың % бақылау саны

notMask = ~ маска;

маска = маска | bwpropfilt (notMask, 'Area', [-Inf, 5000 - eps (5000)]);

BW2 = imfill (labelImage, 'тесіктер');

new_image = BW2;

new_image (~ маска) = 0;

B = bwboundaries (new_image); % тек 2 өлшемді imshow қабылдай алады (new_image, 'parent', app. UIAxes2);

ұстау (app. UIAxes2, «қосулы»);

шекаралар (В);

орнату (gca, 'YDir', 'кері');

lungArea = bwarea (new_image);

app. PixelAreaEditField. Value = lungArea;

Соңы

Соңы

FilterThresholdSliderValueChanged функциясы (қолданба, оқиға)

app.threshold = app. FilterThresholdSlider. Value;

Соңы

AreastoExtractDropDownValueChanged функциясы (қолданба, оқиға) stringNumber = app. AreastoExtractDropDown. Value;

app.regionsToExtract = str2double (stringNumber);

Соңы

Соңы

Ұсынылған: