Оглавление:
- Шаг 1. Предварительные требования
- Шаг 2. Предварительные требования (продолжение)
- Шаг 3. Предварительные требования (продолжение)
- Шаг 4. Предварительные требования (продолжение)
- Шаг 5: Очистите Matlab для подготовки к запуску кода
- Шаг 6. Выберите 10 изображений нормальных глаз и 10 изображений с симптомами диабетической ретинопатии
- Шаг 7. Выберите 10 изображений нормального глаза и 10 изображений с симптомами диабетической ретинопатии (продолжение)
- Шаг 8: создайте 2 переменные (нормальную и диагностированную) и установите для каждой из них значение 0
- Шаг 9. Создайте цикл для автоматической загрузки обычных изображений
- Шаг 10. Создайте цикл для автоматической загрузки обычных изображений (продолжение)
- Шаг 11: Обрежьте границы изображения
- Шаг 12: Создайте изображение в оттенках серого
- Шаг 13: создайте контрастное изображение
- Шаг 14: улучшите контрастное изображение
- Шаг 15: создайте средний фильтр
- Шаг 16: объедините фильтр усреднения с контрастным изображением
- Шаг 17: создайте новую маску среднего значения путем вычитания пикселей
- Шаг 18: Создайте двоичное отфильтрованное изображение
- Шаг 19: удалите более мелкие капли, обнаруженные в отфильтрованных изображениях
- Шаг 20: Создайте элемент структурирования диска
- Шаг 21: Выполните морфологические операции закрытия
- Шаг 22. Найдите объекты с подключением не менее 8
- Шаг 23. Найдите максимальное количество подключенных пикселей
- Шаг 24. Установите максимальное значение пикселей на 0 и найдите пиксели с подключением> = 26 пикселей
- Шаг 25: удалите кровеносные сосуды на изображении
- Шаг 26: Отображение фигуры
- Шаг 27: Удалите сосуды и подсчитайте капли крови
- Шаг 28: Диагностика изображения сетчатки на основании количества идентифицированных сгустков крови
- Шаг 29: Если имеется более 5 BLOB-объектов…
- Шаг 30: повторите процесс фильтрации для нормальных изображений со значениями цифр 2 и 3
- Шаг 31: повторите весь процесс для диагностированных изображений
- Шаг 32: Статистический анализ
- Шаг 33: поиск доверительного интервала
Видео: Автоматическая диагностика диабетической ретинопатии с помощью MATLAB: 33 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:53
(См. Схему кода выше)
Диабетическая ретинопатия - это заболевание глаз, связанное с диабетом, вызванное высоким уровнем сахара в крови. Высокий уровень сахара в крови вызывает набухание кровеносных сосудов сетчатки, что приводит к расширению кровеносных сосудов и даже утечкам сосудов, что приводит к темным пятнам на изображениях сетчатки. С помощью этого кода мы стремимся использовать появление пятен утечки кровеносных сосудов в качестве индикатора фоновой диабетической ретинопатии, хотя в реальном мире потребуются дополнительные методы диагностики. Цель этого кода - автоматизировать обработку изображений и диагностику изображений сетчатки для выявления признаков диабетической ретинопатии, проявляющихся через темные пятна на изображениях сетчатки.
10 нормальных изображений сетчатки и 10 диагностированных изображений сетчатки были обработаны с помощью кода, который сначала считывает и фильтрует изображения, а затем количественно определяет темные пятна, чтобы определить, присутствуют ли симптомы диабетической ретинопатии, на основе заданного порогового значения. Затем результаты распечатываются в командном окне для интерпретации зрителем.
Шаг 1. Предварительные требования
1. Убедитесь, что на ваш компьютер загружена программа MATLAB.
2. Загрузите текстовый файл, найденный по ссылке. (Нажмите ‘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 - кроме officialdiagnoses (очищает все переменные, кроме официального 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. Создайте цикл для автоматической загрузки обычных изображений
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 и используйте imadjust, чтобы изменить масштаб значений интенсивности.
Возьмите значения, попадающие в диапазон [0,2, 0,7], и измените их масштаб на [0, 1]. Гамма установлена на 0,8, чтобы сделать изображение ярче. Назначьте новое изображение на I_adjusted.
Шаг 14: улучшите контрастное изображение
Возьмите изображение I_adjusted и используйте функцию 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: Создайте двоичное отфильтрованное изображение
Превратите изображения в градациях серого в черно-белые с помощью имбинаризации. Введите mask_mean2, «adaptive», «ForegroundPolarity», «dark», «Sensitivity», 0,6. Назначьте это новое изображение для mask_binarize.
Шаг 19: удалите более мелкие капли, обнаруженные в отфильтрованных изображениях
Удалите объекты с возможностью подключения менее 100 пикселей с помощью функции bwareaopen для mask_binarize и установите пороговое значение на 100. Назначьте переменной как bw.
Шаг 20: Создайте элемент структурирования диска
Создайте элемент структурирования диска (с радиусом 2) с помощью функции strel. Назначьте его se.
Шаг 21: Выполните морфологические операции закрытия
Возьмите bw и примените функцию imclose к структурному элементу, чтобы выполнить операцию морфологического закрытия объекта.
Шаг 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 Pixel Connectivity "src =" {{file.large_url | add: 'auto = webp & frame = 1 & height = 300'%} ">
= 26 Pixel Connectivity "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 BLOB-объектов…
Повторите приведенные выше инструкции для диагностированных изображений в качестве оператора else. Эта часть будет запущена, если количество капель больше 5.
Завершите оператор if.
Шаг 30: повторите процесс фильтрации для нормальных изображений со значениями цифр 2 и 3
Повторите процесс для оставшейся части исходных операторов if, когда numel (количество цифр в номере изображения) равно 2 и 3. На этом цикл for для обычных изображений завершается.
Завершите цикл for.
Шаг 31: повторите весь процесс для диагностированных изображений
Повторите весь процесс, используя диагностированные изображения, перечисленные в матрице «numbers_to_extract_diagnposed».
Обязательно просмотрите каждую цифру (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, чтобы вызывать его как функцию. Без функции вам пришлось бы самостоятельно рассчитывать доверительный интервал, используя модифицированный метод Вальда.
2. Функция ModWald имеет 2 входа, где первый - это количество правильно идентифицированных изображений, а второй - общее количество изображений.
3. Функция ModWald выведет нижнюю и верхнюю границы доверительного интервала пропорций для точности выборочных данных. Другими словами, вы дадите интервал процентов, в котором будет лежать истинный процент точности кода.
4. Используйте команду fprintf ниже, чтобы вывести статистику и доверительный интервал в командное окно.
> fprintf ('%. 0f процентов изображений сетчатки были правильно диагностированы согласно официальному диагнозу. / n / n', Final_percentage_correct)
> fprintf ('Истинный процент, при котором наш код будет правильно диагностировать диабетическую ретинопатию, будет / n попадать в диапазон [%.3f,%.3f], на основе 20 образцов изображений / n', lower_bound, upper_bound)
Рекомендуемые:
Ассистент парковки Простой ремонт / диагностика: 4 шага
Ассистент парковки Легкий ремонт / диагностика: Хорошо, давайте приступим, у меня есть Chevrolet Avalanche 2010 года, и у него есть 4 датчика системы помощи при парковке в заднем бампере. Насколько мне известно, этот труднопроходимый автомобиль можно использовать и на автомобиле, независимо от того, впереди ли вы, или Реа, или и то, и другое. Итак, я пошел в избранное
Жесткие диски: диагностика, устранение неполадок и обслуживание: 3 шага
Жесткие диски: диагностика, устранение неполадок и обслуживание: что такое жесткий диск? - Проще говоря, жесткий диск - это то, что хранит все ваши данные. В нем находится жесткий диск, на котором физически расположены все ваши файлы и папки. Информация хранится на диске магнитным способом, поэтому она остается на диске, даже когда
Автоматическая кормушка для растений WiFi с резервуаром - Установка для выращивания в помещении / на открытом воздухе - Автоматическая поливка растений с дистанционным мониторингом: 21 шаг
Автоматическая кормушка для растений WiFi с резервуаром - Настройка выращивания в помещении / на открытом воздухе - Автоматическое поливание растений с удаленным мониторингом: в этом руководстве мы продемонстрируем, как настроить индивидуальную систему подачи растений в помещении / на открытом воздухе, которая автоматически поливает растения и может контролироваться удаленно с помощью платформы Adosia
Обнаружение опухолей головного мозга с помощью МРТ с помощью Matlab: 6 шагов
Обнаружение опухоли головного мозга с помощью МРТ с помощью Matlab: Авторы: Мадхумита Каннан, Генри Нгуен, Эшли Уррутия Авила, Мей Джин Этот код MATLAB представляет собой программу для определения точного размера, формы и местоположения опухоли, обнаруженной на снимках МРТ головного мозга пациента. Эта программа изначально предназначена для работы с детектором опухолей
Инвентаризация - быстрая диагностика ПК заменена, см. Ниже: 6 шагов
Инвентаризация - быстрая диагностика ПК теперь заменена, см. Ниже: Если вам когда-нибудь понадобится работать с компьютером, который находится не перед вами, вам потребуется точная инвентаризация. Эта инструкция появилась исключительно потому, что у коллеги возникли проблемы с поиском драйвера для ПК. Я буду использовать личный Aida32 с http://majorgeeks.com