Съдържание:
- Стъпка 1: Предпоставки
- Стъпка 2: Предпоставки (не)
- Стъпка 3: Предпоставки (не)
- Стъпка 4: Предпоставки (не)
- Стъпка 5: Почистете Matlab, за да се подготвите за стартиране на код
- Стъпка 6: Изберете 10 изображения с нормално око и 10 изображения със симптоми на диабетна ретинопатия
- Стъпка 7: Изберете 10 изображения с нормално око и 10 изображения със симптоми на диабетна ретинопатия (не)
- Стъпка 8: Създайте 2 променливи (нормални и диагностицирани) и ги задайте като равни на 0
- Стъпка 9: Създайте for for Loop за автоматично качване на нормални изображения
- Стъпка 10: Създайте цикъл за за автоматично качване на нормални изображения (не)
- Стъпка 11: Изрежете границите на изображението
- Стъпка 12: Създайте изображение в сив мащаб
- Стъпка 13: Създайте контрастно изображение
- Стъпка 14: Подобрете контрастното изображение
- Стъпка 15: Създайте среден филтър
- Стъпка 16: Комбинирайте филтъра за усредняване с контрастиращото изображение
- Стъпка 17: Направете нова средна маска чрез изваждане на пиксели
- Стъпка 18: Създайте двоично филтрирано изображение
- Стъпка 19: Премахнете по -малки петна, намерени във филтрираните изображения
- Стъпка 20: Създайте елемент за структуриране на диска
- Стъпка 21: Изпълнете морфологични операции за затваряне
- Стъпка 22: Намерете обектите със свързаност поне 8
- Стъпка 23: Намерете максималния брой свързани пиксели
- Стъпка 24: Задайте максималните стойности на пикселите на 0 и намерете пиксели с> = 26 пикселна свързаност
- Стъпка 25: Премахнете кръвоносните съдове в изображението
- Стъпка 26: Фигурален дисплей
- Стъпка 27: Премахнете съдовете и пребройте кръвни петна
- Стъпка 28: Диагностицирайте изображението на ретината въз основа на броя на идентифицираните кръвни съсиреци
- Стъпка 29: Ако има повече от 5 петна …
- Стъпка 30: Повторете процеса на филтриране за нормални изображения със стойности на цифрите на изображението като 2 и 3
- Стъпка 31: Повторете целия процес за диагностицираните изображения
- Стъпка 32: Статистически анализ
- Стъпка 33: Намиране на интервал на доверие
Видео: Автоматизирана диагностика на диабетна ретинопатия чрез MATLAB: 33 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:53
(Вижте схемата на кода по -горе)
Диабетната ретинопатия е заболяване на очите, свързано с диабет, причинено от високи нива на кръвната захар. Високите нива на кръвната захар причиняват подуване на кръвоносните съдове в ретините, което води до разширяване на кръвоносните съдове и дори до изтичане на съдове, което води до тъмни петна в изображенията на ретината. С този код се стремим да използваме появата на места на изтичане на кръвоносни съдове като индикатор за фонова диабетна ретинопатия, въпреки че в реалния свят ще са необходими допълнителни техники за диагностика. Целта на този код е да автоматизира обработката на изображения и диагностицирането на изображения на ретината, за да идентифицира признаци на диабетна ретинопатия, проявена чрез тъмни петна в изображенията на ретината.
10 нормални изображения на ретината и 10 диагностицирани изображения на ретината бяха обработени чрез код, който първо чете и филтрира изображенията, а след това определя количествено тъмните петна, за да определи дали са налице симптоми на диабетна ретинопатия, въз основа на даден праг. След това резултатите се отпечатват в командния прозорец за интерпретация на зрителя.
Стъпка 1: Предпоставки
1. Уверете се, че програмата MATLAB е изтеглена на вашия компютър.
2. Изтеглете txt файла, намерен в линка. (Натиснете ‘ctrl+s’, за да запишете в същата директория като кода MATLAB)
Стъпка 2: Предпоставки (не)
4. Отворете MATLAB и въведете „uiimport“в командния прозорец.
5. Изберете файла officialdiagnoses.txt и го импортирайте в MATLAB като матрица на клетка.
6. Уверете се, че виждате „officialdiagnoses“като променлива в работното пространство.
Стъпка 3: Предпоставки (не)
7. Изтеглете функцията ModWald.m, която можете да получите от горния код или да я изтеглите от Canvas.
(Код, предоставен от професор Кинг и професор Чой)
Стъпка 4: Предпоставки (не)
8. Изтеглете 400 необработени изображения от раздела с данни на проекта STARE.
Стъпка 5: Почистете Matlab, за да се подготвите за стартиране на код
Добавяне към кода:
1. затваряне на всички (затваря всички предишни отворени изображения)
2. clearvars - с изключение на официални диагнози (Изчиства всички променливи, с изключение на официалния диагноз txt файл, предварително импортиран)
3. cclc (Изчиства командния прозорец)
Стъпка 6: Изберете 10 изображения с нормално око и 10 изображения със симптоми на диабетна ретинопатия
1. Вземете текстовия файл за диагностика и извлечете имената на изображенията. Тези имена се съдържат в първата колона на текстовия файл, така че за да ги извлечете, въведете „officialdiagnoses (:, 1)“. Матрицата с имена на изображения е присвоена на променлива „all_image_numbers“
2. Преобразувайте променливата all_image_numbers от клетъчен масив в матричен, използвайки функцията cell2mat
Стъпка 7: Изберете 10 изображения с нормално око и 10 изображения със симптоми на диабетна ретинопатия (не)
3. Изберете 10 нормални изображения на очите, за да стартирате кода. Избраните изображения в този случай са 278, 199, 241, 235, 35, 77, 82, 164, 239, 170.
Поставете тези числа в матрица и ги присвойте на променлива, която ще бъде извикана при зареждане на изображенията.
4. Повторете стъпка 3 за изображения на ретината, които са диагностицирани с диабетна ретинопатия. Избраните изображения в този случай са 139, 137, 136, 135, 133, 140, 141, 116, 157, 188.
Стъпка 8: Създайте 2 променливи (нормални и диагностицирани) и ги задайте като равни на 0
Създайте тези променливи преди цикъла for, за да инициализирате номерата на цикъла.
Стъпка 9: Създайте for for Loop за автоматично качване на нормални изображения
1. Създайте цикъл for
2. Задайте променлива за броене (i, в този случай) на матрица от стойности 1-10. Тази променлива за броене ще се използва за извикване на всяко изображение поотделно
3. Вземете елемента i в матрицата с изображения, за да извлечете и преобразувате името на изображението от низ в число, използвайки функцията num2str.
Намерете броя на цифрите в името на изображението, като използвате функцията numel. Задайте тази стойност на променлива, digits_normal. Това число трябва да бъде 1 за едноцифрени числа, 2 за двуцифрени числа и 3 за трицифрени числа. Тази информация ще се използва за автоматично извикване на изображения.
Стъпка 10: Създайте цикъл за за автоматично качване на нормални изображения (не)
3. Създайте оператор if, съдържащ и трите възможности от предишните стъпки. Ако името на изображението има 1 цифра, изображението ще се нарича „im000“, ако има 2 цифри, изображението ще се нарича „im00“, а ако има 3, изображението ще се нарича „im0“.
4. Под всеки оператор if задайте променлива на imread „im“под съответния, if израз със съответния брой нули (както е описано по -горе), последван от i.
Стъпка 11: Изрежете границите на изображението
Вземете оригиналното изображение и приложете imcrop филтър, за да премахнете черните рамки и присвоите на променлива I_crop. Правоъгълникът за изрязване се определя с помощта на матрица [95, 95, 500, 410].
Стъпка 12: Създайте изображение в сив мащаб
Вземете изрязаното изображение и приложете филтъра rbg2gray, за да промените изображението на сиво. Присвойте това изображение на променлива I2.
Стъпка 13: Създайте контрастно изображение
Вземете изображението I2 и използвайте настройка, за да преоразмерите стойностите на интензитета.
Вземете стойности, които попадат в диапазона [0.2, 0.7] и ги преоразмерете до [0, 1]. Гамата е настроена на 0.8, за да направи изображението по -ярко. Присвойте новото изображение на I_adjusted.
Стъпка 14: Подобрете контрастното изображение
Направете I_adjucted изображение и използвайте функцията adapthisteq, за да подобрите контраста.
Синтаксисът на Adapthisteq изисква името на изображението, I_adjusted, „numTiles“, размера на numTiles, „nBins“и броя на контейнерите. Размерът на numTiles е зададен на [8 8], разделяйки изображението на 8x8 плочки, а броят на контейнерите е зададен на 28. Задайте изображението на I_constrast.
Стъпка 15: Създайте среден филтър
Създайте променлива, наречена „meanfilt“, използвайки функцията fspecial. Въведете „средна функция“, за да създадете филтър за осредняване и вмъкнете [90 90] за размера на плъзгащия се прозорец.
Стъпка 16: Комбинирайте филтъра за усредняване с контрастиращото изображение
Създайте нова променлива с име mask_mean и използвайте функцията imfilter, за да вземете изображението I_contrast и да приложите предварително създадения филтър за средна стойност.
Стъпка 17: Направете нова средна маска чрез изваждане на пиксели
Създайте променлива с име mask_mean2 и използвайте функцията imsubtract, за да извадите стойността на всеки пиксел в I_contrast от съответния пиксел в mask_mean.
Стъпка 18: Създайте двоично филтрирано изображение
Превърнете изображенията в сиво в черно и бяло, като използвате imbinarize. Input mask_mean2, ‘adaptive’, ‘ForegroundPolarity’, ‘dark’, ‘Sensitivity’, 0.6. Задайте това ново изображение на mask_binarize.
Стъпка 19: Премахнете по -малки петна, намерени във филтрираните изображения
Премахнете обекти с възможност за свързване по -малко от 100 пиксела, като използвате функцията bwareaopen на mask_binarize и задайте праговата стойност на 100. Задайте променливата като bw.
Стъпка 20: Създайте елемент за структуриране на диска
Създайте елемент за структуриране на диск (с радиус 2), като използвате функцията strel. Задайте го на se.
Стъпка 21: Изпълнете морфологични операции за затваряне
Вземете bw и приложете функцията за затваряне към структурния елемент, за да извършите морфологична операция за затваряне на обекта.
Стъпка 22: Намерете обектите със свързаност поне 8
Вземете bw и използвайте bwconncomp, за да намерите обектите с свързаност поне 8 в изображението. Присвойте изхода за номер на cc_1.
Стъпка 23: Намерете максималния брой свързани пиксели
Използвайте функцията cellfun, за да изпълните функцията „numel“на всяка клетка в CC. Това намира броя на елементите в клетката PixelIdxList. Задайте стойност на „numPixels“.
Намерете максималните стойности в numPIxels. Задайте най -големия максимум на „най -голям“, а индексът на максималната стойност на „idx“.
Стъпка 24: Задайте максималните стойности на пикселите на 0 и намерете пиксели с> = 26 пикселна свързаност
= 26 Пикселна свързаност "src =" https://content.instructables.com/ORIG/FXY/DTW3/JEOIIEL4/FXYDTW3JEOIIEL4-p.webp
= 26 Пикселна свързаност "src =" https://content.instructables.com/ORIG/FXO/GBX1/JEOIIELB/FXOGBX1JEOIIELB-p.webp
= 26 Пикселна свързаност "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
= 26 Пикселна свързаност "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300' %} ">
Задайте пикселите с най -големите стойности в изображението „bw“на 0, като направите пикселите черни.
Намерете обектите със свързаност най -малко 26 пиксела в изображението с помощта на bwconncomp. Присвояване на променлива cc_1.
Стъпка 25: Премахнете кръвоносните съдове в изображението
Премахнете кръвоносните съдове, които все още присъстват на изображението, като използвате функцията bwpropfilt с диапазон [0, 0.9].
[0,9, 1] се изключва, защото стойности, близки до 1, показват линия. Присвояване на „RemoveVessels“.
Стъпка 26: Фигурален дисплей
Показване на всяко филтрирано изображение в подплот. Имшоу. с „гранични“и „стегнати“входове, показва всяко изображение в структура на подплота. Добавете заглавие към всяко изображение, за да различите кой филтър е използван.
Стъпка 27: Премахнете съдовете и пребройте кръвни петна
1. Вземете „RemoveVessels“и приложете функцията „Centroid“в regionprops, за да идентифицирате центроидите на обектите в изображението. Тези обекти трябва да съответстват на кръвни съсиреци, присъстващи на изображението.
2. Пребройте броя на идентифицираните кръвни съсиреци, като вземете дължината на центроидната матрица.
Стъпка 28: Диагностицирайте изображението на ретината въз основа на броя на идентифицираните кръвни съсиреци
Използвайте if, за да диагностицирате изображението въз основа на броя на идентифицираните кръвни съсиреци.
Ако броят на идентифицираните центроиди е по -малък или равен на 5, изображението се идентифицира като нормално.
Ако броят на центроидите е по -голям от 5, изображението е диагностицирано с диабетна ретинопатия.
Резултатът се отпечатва в командния прозорец с помощта на fprintf.
Стъпка 29: Ако има повече от 5 петна …
Повторете горните инструкции за диагностицирани изображения като изявление else. Тази част ще се изпълнява, ако броят на петна е по -голям от 5.
Прекратете оператора if.
Стъпка 30: Повторете процеса на филтриране за нормални изображения със стойности на цифрите на изображението като 2 и 3
Повторете процеса за остатъка от оригинала if, когато numel (броят на цифрите в номера на изображението) е равен на 2 и 3. Това завършва цикъла for за нормалните изображения.
Прекратете цикъла for.
Стъпка 31: Повторете целия процес за диагностицираните изображения
Повторете целия процес, като използвате диагностицираните изображения, изброени в матрицата „номера_до_екстрактирани_диагностицирани“.
Не забравяйте да преминете през всяка цифра (i) и да я промените на цифра (i+10), така че диагностицираните цифри да се появят като изображения 11 до 20.
Стъпка 32: Статистически анализ
1. „Actual_Diagnosis_Matrix“се използва за сравняване на резултатите с официалната диагноза, намерена във файла txt. Първите 10 нули показват, че първите 10 изображения трябва да са нормални. Последните 10 показват, че последните 10 изображения трябва да бъдат класифицирани като диабетна ретинопатия.
2. Двойният знак за равенство, използван за създаване на „number_correct“, създава логически масив чрез сравняване на стойността на съответните елементи на „Actual_Diagnosis_Matrix“с „Diagnosis_Matrix“, създаден от цикъла for.
За всеки елемент, който съответства на диагнозата, ще се добави 1, което означава, че кодът правилно е диагностицирал това изображение. Ако е неправилно, той ще добави 0 към матрицата.
След това, като се вземе сумата от това, се събират всички. С други думи, той намира сумата от правилно диагностицирани изображения.
3. „Final_percentage_correct“е изчисленият процент от това колко точно кодът е диагностицирал диабетна ретинопатия. Броят на правилно диагностицираните изображения се дели на 20 (общият брой снимки) и се умножава по 100, за да се намери процентът на успешните диагнози.
Стъпка 33: Намиране на интервал на доверие
1. Уверете се, че сте изтеглили ModWald.m, за да го извикате като функция. Без функцията ще трябва сами да изчислите доверителния интервал, като използвате модифицирания метод на Wald.
2. Функцията ModWald има 2 входа, където първият е броят на правилно идентифицираните изображения, а вторият е общото количество изображения.
3. Функцията ModWald ще изведе долната и горната граница на доверителния интервал на пропорциите за точността на извадените данни. С други думи, ще дадете интервал от проценти, където ще бъде истинският процент от точността на кода.
4. Използвайте fprintf по -долу, за да изведете статистическите данни и доверителния интервал в командния прозорец.
> fprintf ('%. 0f процента от изображенията на ретината са правилно диагностицирани според официалната диагноза. / n / n', Final_percentage_correct)
> fprintf ('Истинският процент, при който нашият код правилно ще диагностицира диабетна ретинопатия, ще / n попадне в диапазона от [%.3f, %.3f], въз основа на 20 извадени изображения / n', долна_граница, горна_граница)
Препоръчано:
Контролиране на Led чрез приложението Blynk чрез Nodemcu през интернет: 5 стъпки
Управление на Led чрез приложението Blynk с помощта на Nodemcu през интернет: Здравейте на всички днес Ще ви покажем как можете да контролирате светодиод с помощта на смартфон по интернет
Помощ при паркиране Лесен ремонт / Диагностика: 4 стъпки
Помощ при паркиране Лесен ремонт / Диагностика: Добре, нека започнем, имам Chevrolet Avalanche от 2010 г. и той има 4 сензора за помощ при паркиране в задната броня. Този неразрешим може да се използва на и превозно средство доколкото ми е известно, независимо дали имате отпред или Rea или и двете. Затова отидох на любимия си
Твърди дискове: Диагностика, отстраняване на неизправности и поддръжка: 3 стъпки
Твърди дискове: Диагностика, отстраняване на проблеми и поддръжка: Какво е твърд диск?- Казано по-просто, твърдият диск е това, което съхранява всичките ви данни. Той съдържа твърдия диск, където всички ваши файлове и папки са физически разположени. Информацията се съхранява магнитно на диска, така че остава на устройството дори когато
Проект за измерване на мощността чрез DIY чрез Arduino Pro Mini: 5 стъпки
Проект за измерване на мощността чрез DIY чрез Arduino Pro Mini: Въведение Здравейте, общност на електрониката! Днес ще ви представя проект, който ви позволява да измервате напрежението и тока на уред и да го показвате заедно със стойностите на мощността и енергията. Измерване на ток/напрежение Ако искате да измервате
Домашна автоматизация: Автоматична комутационна платка с управление на димера чрез Bluetooth чрез Tiva TM4C123G: 7 стъпки
Домашна автоматизация: Автоматична комутационна платка с управление на димера чрез Bluetooth чрез Tiva TM4C123G: В днешно време имаме дистанционни управления за нашите телевизори и други електронни системи, които направиха живота ни наистина лесен. Чудили ли сте се някога за домашната автоматизация, която да даде възможност за управление на тръбни светлини, вентилатори и други електрически