Съдържание:
- Стъпка 1: Стъпка 1: Зареждане на изображение
- Стъпка 2: Стъпка 2: Филтриране на шума и хистограма
- Стъпка 3: Стъпка 3: Задаване на прагове
- Стъпка 4: Създаване на GUI
- Стъпка 5: Видео демонстрация
Видео: Белодробна сегментация на MatLab: 5 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:50
От: 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: Зареждане на изображение
Тази стъпка ще ви покаже оригиналната картина в сива скала. Променете „name_of_picture.png“на името на вашето изображение
ясно; clc; затвори всички;
%% Зареждане на изображения
raw_x_ray = 'име_на_картина.png';
I = imread (raw_x_ray);
фигура (101);
imshow (I);
цветова карта (сива);
заглавие („Рентгенова снимка в сиви скали“);
Стъпка 2: Стъпка 2: Филтриране на шума и хистограма
За да намерим прага за изображението в сива скала, разглеждаме хистограмата, за да видим дали има различни режими. Прочетете повече тук
I = wiener2 (I, [5 5]);
фигура (102);
подплот (2, 1, 1);
imshow (I);
подплот (2, 1, 2);
имист (I, 256);
Стъпка 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);
край
край
Препоръчано:
MATLAB Лесно разпознаване на лице: 4 стъпки
MATLAB Лесно разпознаване на лица: Основната цел на тези инструкции е да покаже колко лесно ще бъде обработката на изображението. С помощта на MATLAB Откриването и проследяването на лица е важно и активно поле за изследване, затова ще обясня как може да се направи с ум
Как да кодирате и публикувате Matlab 2016b в Word (Ръководство за начинаещи): 4 стъпки
Как да кодирате и публикувате Matlab 2016b в Word (Ръководство за начинаещи): Matlab е високоефективна езикова програма, която се използва за изчисляване на технически резултати. Той има способността да интегрира визуализации, изчисления и програмиране по удобен за потребителя начин. С тази програма потребителят може да публикува проблеми и решения
Контролиране на Raspberry Pi с помощта на Matlab: 5 стъпки
Контролиране на Raspberry Pi с помощта на Matlab: Хей, този урок е за контролиране на вашето безглаво малиново пи с помощта на matlab. Може да се наложи да инсталирате matlab до най -новата версия за поддръжка на по -нова малинова pi платка
Роботизиран контролер на базата на Matlab: 9 стъпки
Базираният в Matlab ROS роботизиран контролер: Още от дете винаги съм мечтал да бъда Iron Man и все още го правя. Iron Man е един от онези герои, които са реално възможни и просто казано аз се стремя да стана Iron Man някой ден, дори ако хората ми се смеят или казват, че е невъзможно
Подобрения в програмирането на влакове в MATLAB: 6 стъпки
Подобрения в програмирането на влакове в MATLAB: Цел: Целта на тази програмирана система е да разгледа Arduino в малък мащаб и да приложи кодирането в по -голям мащаб, за да подобри потенциално някои характеристики за безопасност на железопътните системи Amtrak. За да направим това, добавихме сензор за влажност на почвата