Мазмуну:

MatLab Өпкө Сегментациясы: 5 кадам
MatLab Өпкө Сегментациясы: 5 кадам

Video: MatLab Өпкө Сегментациясы: 5 кадам

Video: MatLab Өпкө Сегментациясы: 5 кадам
Video: Бумажные игрушки антистресс - поделки для детей бумажные игрушки легко 2024, Июнь
Anonim
MatLab Өпкө Сегментациясы
MatLab Өпкө Сегментациясы

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

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

Төмөндөгү көрсөтмөлөрдө биздин ызы-чууну чыпкалоо техникасы (аз өтүүчү Wiener чыпкасы), ошондой эле сүрөттүн босогосу (боз түстөгү сүрөттүн интенсивдүүлүгүнүн гистограммасын колдонуу менен) жана морфологиялык градиентти колдонуу (сүрөттүн кеңейиши менен эрозиясынын ортосундагы айырма) камтылган. кызыккан аймакты аныктоо. Көрсөтмө анда бардык элементтерди графикалык колдонуучу интерфейсине (GUI) кантип бириктирээрибизди түшүндүрөт.

Эскертүү:

1). Бул долбоор "КТдагы анормалдуу өпкөлөрдүн сегменттелиши жана имиджин анализдөө: Учурдагы мамилелер, чакырыктар жана келечектеги тренддер" деген илимий макаладан шыктандырылган. Кайсынысын бул жерден тапса болот

2). Биз NIH: Клиникалык борбордун рентген сүрөттөрүн колдонуп жатабыз. Шилтемени бул жерден тапса болот

3). Колдонмо дизайнеринин жардамын бул жерден тапса болот

4). Кодду иштетүүдөн мурун: Дир жолун (34 -сапта) файл каталогуна жана сүрөттүн түрүнө (35 -сап) өзгөртүү керек (биз *-p.webp

1 -кадам: 1 -кадам: Сүрөттү жүктөө

1 -кадам: Сүрөт жүктөлүүдө
1 -кадам: Сүрөт жүктөлүүдө

Бул кадам оригиналдуу сүрөттү боз масштабда көрсөтөт. 'Name_of_picture.png' сүрөтүңүздүн атына өзгөртүңүз

ачык; clc; баарын жап;

%% Сүрөттөр жүктөлүүдө

raw_x_ray = 'name_of_picture.png';

I = окудум (raw_x_ray);

фигура (101);

imshow (I);

түс картасы (боз);

аталышы ('Боз түстүү рентген');

2 -кадам: 2 -кадам: Ызы чыпкалоо жана гистограмма

2 -кадам: Ызы чыпкалоо жана гистограмма
2 -кадам: Ызы чыпкалоо жана гистограмма

Боз масштабдуу сүрөттүн босогосун табуу үчүн, биз гистограммага карап, анын айырмаланган режимдерин көрөбүз. Кененирээк бул жерден окуңуз

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

цифра (102);

кошумча план (2, 1, 1);

imshow (I);

кошумча план (2, 1, 2);

imhist (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));

маска = imbinarize (morphologicalGradient, 0.03);

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

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

маска = imfill (маска, 'тешиктер');

маска = 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);

токто

чек аралар (B);

аяктоо

4 -кадам: GUI түзүү

Эми биз мурунку кодду MATLAB колдонмосуна бириктиребиз. Колдонмо дизайнерин MATLABдан ачыңыз (Жаңы> Колдонмо). Биринчиден, биз интерфейсти чыкылдатып кармап туруу жана үч огунда борбордун жумуш мейкиндигине сүйрөө аркылуу долбоорлойбуз. Андан кийин, биз эки баскычты, бир түзөтүү талаасын (текстти), бир түзөтүү талаасын (сандык), бир сыдырманы жана бир ачылуучу менюну басып кармап турабыз. Эки октун ар бири алдын ала көрүүнү жана сүрөттү талдайт, үчүнчү октор "тандалган" сүрөттү алдын ала көрүү үчүн пикселдердин гистограммасын көрсөтөт. Түзөтүү талаасы (текст) кутучасы тандалган сүрөттүн файл жолун, ал эми түзөтүү талаасы (сандык) өпкөнүн аныкталган пикселдик аймагын көрсөтөт.

Эми App Designerде дизайн көрүнүшүнөн код көрүнүшүнө өтүңүз. Кодго кошуу белгиси бар кызыл "Свойства" баскычын басып, касиеттердин кодун киргизиңиз. Мен, босогону жана regionToExtract касиеттерин төмөндө берилген коддо болгондой инициализациялоо. Андан кийин, жумуш мейкиндигинин жогорку оң жагындагы баскычты оң баскыч менен чыкылдатыңыз (Компоненттердин браузери) жана Callbacks> Go to … кайра чалууга өтүңүз. "SelectImageButtonPushed функциясы (колдонмо, окуя)" үчүн кодду кошуңуз. Бул код uigetfile аркылуу компьютериңизден анализдөө үчүн сүрөттү тандоого мүмкүндүк берет. Сүрөттү тандагандан кийин, гистограмманын коштоосунда огтордун астында алдын ала көрүү сүрөтү пайда болот. Андан кийин, башка баскычты оң баскыч менен чыкылдатып, кайра чалуу функциясын түзүү үчүн ошол эле процедураны кайталаңыз.

"AnalyzeImageButtonPushed функциясы (колдонмо, окуя)" астына кодду кошуңуз. Бул код сүрөттү анализдөө баскычында алдын ала көрүү сүрөтүндө пикселдерди эсептөө жана блокторду аныктоону аткарат (бул кодду кайсы бирин оң баскыч менен чыкылдатыңыз). Баскычтарды программалагандан кийин, биз азыр слайдер менен ачылуучу менюну программалайбыз. Сыдырманы оң баскыч менен чыкылдатып, кайра чалуу функциясын түзүңүз жана аягына чейин "ФилтрThresholdSliderValueChanged функциясы (колдонмо, окуя)" астындагы кодду кошуңуз. Бул сыдырмага боз интенсивдүүлүк босогосун тууралоого мүмкүндүк берет.

Ылдый түшүүчү меню үчүн кайра чалуу функциясын түзүңүз жана ачылуучу менюга талданган сүрөт огунда көрсөтүлгөн блоктордун санын өзгөртүүгө уруксат берүү үчүн "AreastoExtractDropDownValueChanged функциясын (колдонмо, окуя)" астына кодду кошуңуз. Эми, Компонент Браузериндеги ар бир объектти чыкылдатыңыз жана алардын касиеттерин жактырууңузга жараша өзгөртүңүз, мисалы, субъекттердин аттарын өзгөртүү, балталарды алып салуу жана масштабды өзгөртүү. Дизайн көрүнүшүндөгү компоненттер браузеринин объекттерин функционалдуу жана түшүнүктүү макетке сүйрөңүз. Сизде азыр MATLABда өпкө сүрөттөрүн пикселдик аянтка талдай турган тиркеме бар!

касиеттери (Кирүү = купуя) I = ; % сүрөт файлы

босого = 257; боз интенсивдүүлүгүн бинаризациялоо үчүн %босогосу

regionToExtract = 2;

аяктоо

SelectImageButtonPushed функциясы (колдонмо, окуя)

clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %"префиксти" өзгөрбөс файлын аныктайт

[imageExt, path] = uigetfile ('*. png'); %сүрөт аталышынын өзгөрмөлүү бөлүгүн басып алат

imageName = [Файл файлдары 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));

маска = imbinarize (morphologicalGradient, 0.03);

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

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

маска = imfill (маска, 'тешиктер');

маска = 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 өлчөмүн гана кабыл алат (new_image, 'parent', app. UIAxes2);

кармоо (app. UIAxes2, 'on');

чек аралар (B);

коюу (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);

аяктоо

аяктоо

Сунушталууда: