Как эффективно препроцессировать КТ-изображения для глубокого обучения

Посмотрим правде в глаза, обработка медицинских изображений - сложная задача. Современные медицинские аппараты для визуализации способны создавать большие объемы изображений с большим количеством информации. Однако извлечение этой информации из изображений требует глубокого понимания методов построения изображений. Как аспирант, изучающий обработку медицинских изображений и машинное обучение, я нахожу отсутствие хороших библиотек предварительной обработки для медицинских изображений, кроме хорошо известных pydicom и NiBabel. Мое недавнее участие в конкурсе RSNA по обнаружению внутричерепных кровоизлияний напомнило мне о важности качества предварительной обработки изображений.

Вот пример нормального изображения КТ головного мозга без предварительной обработки:

Где мозг? Где серое / белое вещество? Совершенно очевидно (без каламбура), что некоторая жизненно важная информация отсутствует в визуализированной КТ. Настоящая причина, по которой они не появляются, заключается в том, что мы пропустили очень важный шаг перед визуализацией. Когда радиологи смотрят изображения компьютерной томографии, в частности изображения компьютерной томографии головного мозга, одним из наиболее важных пунктов в их контрольном списке является использование окон. Люди способны воспринимать только оттенки серого в диапазоне от 0 до 255 (я полагаю, чуть больше 50), тогда как КТ-сканирование имеет единицы Хаунсфилда (HU) в диапазоне от -1000 до +2000. Я не собираюсь подробно описывать процесс преобразования HU в этом руководстве, но если вам интересно, вот полезная статья о HU.

Чтобы правильно отображать КТ-сканирование, используется оконное управление для преобразования чисел HU в значения шкалы серого. Это очень просто сделать с помощью miptools:

Первое управление окнами - это простое управление окнами с метаданными, которое можно указать, задав windowing='simple'. Это извлекает центр и ширину окна вашего DICOM-файла и соответственно обрезает изображение до указанного диапазона. Наше преобразованное изображение должно выглядеть так:

Теперь мы можем хотя бы увидеть мозг на нашем изображении, верно? Мы также можем закодировать больше информации в преобразованное изображение с помощью окон bsb (мозг, субдураль, кровь). Это может показаться сложным, но мы просто преобразуем наше изображение в 3 окна: окно мозга (Центр: 40, Ширина: 80), субдуральное окно (Центр: 80, Ширина: 200) и окно кости (Центр: 600, Ширина: 2000). ). В конце мы объединяем 3 окна как 3 канала нашего преобразованного изображения. При выполнении строки 7 из фрагмента кода должно получиться следующее изображение:

Изображение, показанное выше, преобразовано с помощью окна BSB. Несмотря на то, что он выглядит как красная версия нашего изображения, преобразованного в метаданные, он кодирует больше информации и, вероятно, лучше для целей глубокого обучения. Напомним, цветные изображения можно представить в виде трехмерных массивов. Чем больше информации мы сможем уместить в этих трех измерениях, тем больше наши глубокие сети смогут извлечь и узнать из наших обучающих изображений.

Другой метод предварительной обработки, который мы можем использовать, - это повторная выборка. В конкретном сканировании может быть расстояние между пикселями [0.5, 0.5], тогда как в сканированном изображении другого пациента расстояние между пикселями может быть [0.8, 0.8]. Важно поддерживать постоянный интервал между пикселями, иначе для наших сетей может быть сложно обобщить.

Указав resampling=True, мы можем пересчитать наш пиксельный интервал до [1, 1] с помощью всего одной строчки кода. Использование простого окна метаданных с повторной выборкой дает следующее изображение:

Существует множество передовых методов обработки медицинских изображений, но для простоты я не буду рассматривать их все в этом руководстве. Если вам понравилось читать эту статью, пожалуйста, проверьте и отметьте мой репозиторий исходного кода miptools. Я обещаю, что в ближайшем будущем будет добавлено больше функций, так как сейчас я очень занят в школе.