Съдържание:

Белодробна сегментация на MatLab: 5 стъпки
Белодробна сегментация на MatLab: 5 стъпки

Видео: Белодробна сегментация на MatLab: 5 стъпки

Видео: Белодробна сегментация на MatLab: 5 стъпки
Видео: Двухсторонняя полисегментарная ПНЕВМОНИЯ после протезирования АОРТАЛЬНОГО КЛАПАНА на КТ 2 Мнение 2024, Юни
Anonim
Белодробна сегментация MatLab
Белодробна сегментация MatLab

От: Phuc Lam, Paul Yeung, Eric Reyes

Признавайки, че грешките в сегментирането на белите дробове ще доведат до невярна информация относно идентифицирането на болестна област и могат да повлияят директно на процеса на диагностика. Съвременните техники за компютърна помощ не успяха да дадат точни резултати, когато белодробните заболявания имат предизвикателни форми. Тези анормални форми могат да бъдат причинени от плеврални изливи, консолидации и др. Прилагайки техниката на белодробна сегментация, при която границите на белия дроб са изолирани от околните гръдни тъкани, нашето приложение може да идентифицира границите с праговете за въвеждане на потребителя, за да даде напълно персонализирани изгледи на формите на белите дробове, Целта на този проект на MatLab е да създаде удобно за потребителя интерактивно приложение за белодробна сегментация, за да открие патологични състояния на белодробните рентгенови изображения. Нашата цел е да създадем по -ефективен начин за илюстриране и идентифициране на анормални бели дробове, за да дадем на лекарите и рентгенолозите по -надежден начин за диагностициране на белодробни заболявания. Използвайки инструмента за проектиране на приложения в MatLab, програмата е предназначена да работи специално с рентгенови снимки на гръдния кош и компютърна томография (CT), но също така е тествана за работа с ядрено-магнитен резонанс.

Инструкциите по-долу съдържат нашата техника за филтриране на шума (нискочестотен филтър на Wiener), както и прага на изображението (чрез хистограма на интензитета на изображението в сивите скали) и използвайки морфологичен градиент (разликата между разширяването и ерозията на изображение) до идентифициране на регион от интерес. След това инструкцията ще обясни как интегрираме всички елементи в графичния потребителски интерфейс (GUI).

Забележка:

1). Този проект е вдъхновен от изследователска статия: „Сегментиране и анализ на изображението на анормални бели дробове при CT: настоящи подходи, предизвикателства и бъдещи тенденции“. Което може да се намери тук

2). Използваме рентгенови снимки от NIH: Clinical Center. Връзката може да се намери тук

3). Помощ за дизайнер на приложения можете да намерите тук

4). Преди да стартирате кода: трябва да промените пътя на Dir (в ред 34) във вашата файлова директория и тип на изображението (ред 35) (анализираме *.png).

Стъпка 1: Стъпка 1: Зареждане на изображение

Стъпка 1: Зареждане на изображение
Стъпка 1: Зареждане на изображение

Тази стъпка ще ви покаже оригиналната картина в сива скала. Променете „name_of_picture.png“на името на вашето изображение

ясно; clc; затвори всички;

%% Зареждане на изображения

raw_x_ray = 'име_на_картина.png';

I = imread (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 ще подчертае интересуващия регион в червено, а границите на функцията наслагват очертаното и филтрирано изображение на белия дроб в червено.

Използвайки регионални реквизити, можем да прецизираме масивите от солидност и да ги сортираме по низходящ. След това бинаризирам изображението на сивата sclae и прилагам метода на морфологичния градиент и mLoren Shurasking, за да подчертая интересуващата област (ROI). Следващата стъпка е да обърнете изображението така, че ROI на белите дробове да е бял на черен фон. Използвам функцията showMaskAsOverlay за показване на 2 маски. Забележка: кодът е вдъхновен от Loren Shure, връзка.

Ласли, създавам червени контури, като използвам bwbwboundaries и маскирам филтърното изображение и границите.

a_thresh = I> = 172; % зададе този праг

[labelImage, numberOfBlobs] = bwlabel (a_thresh);

reps = regionprops (a_thresh, 'всички');

sortSolidity = sort ([props. Solidity], 'низходящ');

SB = sortSolidity (1);

ако SB == 1 % SB приема само солидност == 1 филтрирайте костите

binaryImage = imbinarize (I); фигура (103);

imshow (binaryImage); цветова карта (сива);

SE = strel ('квадрат', 3);

морфологиченГрадиент = неизваден (имидилиращ (binaryImage, SE), imerode (binaryImage, SE));

маска = imbinarize (morphologicalGradient, 0,03);

SE = strel ('квадрат', 2);

маска = затваряне (маска, 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 = bwboundounds (new_image); % може да приеме само 2 измерения

фигура (104);

imshow (new_image);

дръж се

висграници (В);

край

Стъпка 4: Създаване на GUI

Сега интегрираме предишния код в приложение MATLAB. Отворете App Designer в MATLAB (Ново> Приложение). Първо, ние проектираме интерфейса чрез щракване и задържане и плъзгане по три оси в централното работно пространство. След това натискаме и задържаме и плъзгаме два бутона, едно поле за редактиране (текст), едно поле за редактиране (числово), един плъзгач и едно падащо меню. Всяка от двете оси ще покаже визуализацията и анализира изображението, а третата ос ще покаже хистограма от пиксели за визуализираното „избрано“изображение. Полето за редактиране (текст) ще покаже пътя на файла на избраното изображение, а полето за редактиране (числово) ще покаже откритата пикселна област на белите дробове.

Сега преминете от изглед на дизайн към изглед на код в App Designer. Въведете в кода кода за имоти, като щракнете върху червения бутон „Свойства“със знак плюс. Инициализирайте свойствата I, прага и регионитеToExtract както в кода, предоставен по -долу. След това щракнете с десния бутон върху бутон в горната дясна част на работното пространство (компонентния браузър) и отидете от Обратни повиквания> Отиди на … обратно повикване. Добавете кода за „функция SelectImageButtonPushed (приложение, събитие)“. Този код ви позволява да изберете изображение за анализ от вашия компютър с помощта на uigetfile. След като изберете изображение, под осите ще се появи изображение за предварителен преглед, придружено от хистограма. След това щракнете с десния бутон върху другия бутон и повторете същата процедура, за да създадете функция за обратно повикване.

Добавете кода под „функция AnalyzeImageButtonPushed (приложение, събитие)“. Този код ще извърши броене на пиксели и откриване на петна върху изображението за визуализация след бутона за анализ на изображението (който от двата щракнете с десния бутон за този код). След програмиране на бутоните, сега ще програмираме плъзгача и падащото меню. Щракнете с десния бутон върху плъзгача, създайте функция за обратно повикване и добавете кода под „функция FilterThresholdSliderValueChanged (приложение, събитие)“до края. Това позволява на плъзгача да регулира прага на интензитета на сивото.

Създайте функция за обратно повикване за падащото меню и добавете кода под „функция AreastoExtractDropDownValueChanged (приложение, събитие)“, за да позволите на падащото меню да променя броя на петна, показани по анализираните оси на изображението. Сега щракнете върху всеки обект в браузъра на компоненти и променете техните свойства по ваш вкус, като например промяна на имената на обектите, премахване на оси и промяна на мащаба. Плъзнете и пуснете обектите на браузъра на компонентите в изглед за проектиране до функционално и лесно за разбиране оформление. Вече имате приложение в MATLAB, което може да анализира изображения на белите дробове за пикселна площ!

свойства (Достъп = частен) I = ; % файл с изображение

праг = 257; %праг за бинаризиране на интензитета на сивото

regionToExtract = 2;

край

функция SelectImageButtonPushed (приложение, събитие)

clc; Dir = 'C: / Users / danie / Downloads / images_004 / images'; %дефиниране на неизменния файл "префикс"

[imageExt, път] = uigetfile ('*. png'); %вземете променливата част от името на изображението

imageName = [Dir filesep imageExt]; %обединени инвариантни и променливи нишки

app. I = imread (imageName); %прочетете изображението

imshow (app. I, 'parent', 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);

reps = regionprops (a_thresh, 'всички');

sortSolidity = sort ([props. Solidity], 'низходящ');

SB = sortSolidity (1);

ако SB == 1 % SB приема само солидност == 1 филтрирайте костите

SE = strel ('квадрат', 3);

морфологиченГрадиент = импутракт (имидилат (labelImage, SE), imerode (labelImage, SE));

маска = imbinarize (морфологиченГрадиент, 0,03);

SE = strel ('квадрат', 2);

маска = затваряне (маска, SE);

маска = непълване (маска, „дупки“);

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

% контролен номер на показване на площ

notMask = ~ маска;

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

BW2 = непълване (labelImage, 'дупки');

new_image = BW2;

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

B = bwboundounds (new_image); % може да приеме само 2 измерения imshow (new_image, 'parent', app. UIAxes2);

задръжте (app. UIAxes2, 'on');

висграници (В);

set (gca, 'YDir', 'reverse');

lungArea = bwarea (ново_изображение);

app. PixelAreaEditField. Value = lungArea;

край

край

функция FilterThresholdSliderValueChanged (приложение, събитие)

app.threshold = app. FilterThresholdSlider. Value;

край

функция AreastoExtractDropDownValueChanged (приложение, събитие) stringNumber = app. AreastoExtractDropDown. Value;

app.regionsToExtract = str2double (stringNumber);

край

край

Препоръчано: