Назад
68

Особенности 3D медицинских данных

68

Введение

Основной источник трехмерных медицинских данных — компьютерная томография (КТ) и магнитно-резонансная томография (МРТ). С помощью этих методов непрерывное человеческое тело оцифровывается в виде дискретного трехмерного тензора размером (ширина x высота x число срезов).

Каждая ячейка такого тензора называется вокселем (voxel).

Каждый срез в нашем тензоре представляет собой двумерное изображение. Интенсивность его пикселей показывает, насколько сильно отражаются рентгеновские лучи от этой ткани (КТ) / интенсивность электромагнитного отклика атомов водорода в сильном магнитном поле (МРТ). Грубо говоря, в обоих случаях мы разной интенсивностью “подсвечиваем” разные ткани.

Интенсивность

Итак, значение вокселя отражает интенсивность, как в черно-белых двумерных фото.

В КТ интенсивность выражается в Hounsfield units (HU). В эту единицу измерения переводятся результаты измерений всех аппаратов КТ.

В МРТ нет такой же удобной шкалы, поэтому снимок одного человека на аппаратах разных производителей может отличаться. Следовательно, для МРТ нужна либо подходящая нормализация (несколько вариантов), либо данные аппаратов со всех производителей, которые будут на проде.

Рисунок 1. КТ в различных проекциях: трехмерное изображение с тремя ортогональными двумерными проекциями
Рисунок 2. МРТ с подписанными органами

Шкала Хаунсфилда (Hounsfield scale)

Все измерения в КТ переводятся в Hounsfield units (HU). Они измеряют рентгенопрозрачность — способность материала пропускать рентгеновские лучи. HU привязаны к физическим параметрам:

  • рентгенопрозрачность дистиллированной воды при стандартной температуре и давлении (СТД) равна 0 HU.
  • рентгенопрозрачность воздуха при СТД равна –1000 HU.
Рисунок 3. Таблица рентгенопрозрачности (в HU) для человеческого тела

Разные типы тканей имеют разную рентгенпрозрачность. Мы можем выбрать на шкале Хаунсфилда отрезок, в который будут попадать только нужные нам ткани, например, печень можно выделить как np.clip(image, a_min=40, a_max=60).

Окно определяется двумя характеристиками — шириной (window width, WW) и центром (window level, WL). Например, код выше можно переписать так:

window_width = 20
window_level = 50
image = np.clip(
    image, 
    a_min=window_level - window_width // 2, 
    a_max=window_level + window_width // 2,
)

Ширина окна влияет на контрастность: чем шире окно, тем меньше контрастность. При слишком узком окне мы удалим с изображения интересующие нас ткани, при слишком широком их контрастность будет низка. Можно комбинировать окна, передавая их модели как разные каналы, по аналогии с цветом в двумерном RGB изображении.

Рисунок 4. Одинаковое изображение с разными window width и window level

Теги

Самый распространенный формат хранения медицинских данных называется DICOM.

Этот формат используется больницами для хранения данных, а также для их экспорта из аппаратов КТ и МРТ. Он содержит изображение и огромный ворох тегов, среди которых есть нужные и ненужные разработчику. Например, производителя аппарата можно узнать по тегу “Manufacturer”. Большинство тегов заполняется автоматически, однако малая их часть вводится лаборантом. Из-за ручного ввода теги могут содержать ошибку. Тут можно ознакомиться с более подробным списком тегов. Другие популярные форматы имеют свои аналоги тегов, например header в NRRD.

Контрастность

Могут отличаться и условия получения изображения. Например, для обнаружения некоторых патологий пациенту вводят “контраст” — вещество, которое через кровеносную систему попадает в органы и делает контуры патологии более четкими. Снимки с контрастом и без него можно рассматривать как два разных домена.

Рисунок 5. КТ печени (сверху) и МРТ головного мозга (снизу) без контраста и с ним

Спейсинг

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

Для такого перехода нужно решить, сколько миллиметров в физическом мире занимает один воксель.

Размер вокселя в реальном мире называют “spacing”.

Спейсинг может отличаться вдоль каждой оси. Например: при спейсинге по осям (X, Y, Z), равном (1.5, 1.5, 2), тензор размером 128x128x92 будет занимать (128* 1.5) * (128 * 1.5) * (92 * 2) mm\( ^3 \). Эти значения получают из аппаратов КТ и МРТ. Они могут быть разными на разных устройствах, поэтому должны храниться в тегах.

Рисунок 6. Один и тот же тензор в разных спейсингах

Изменить спейсинг можно интерполяцией. Например, если у нас изображение размером (128, 128, 92) со спейсингом (1.5, 1.5, 2), а мы хотим получить (3, 3, 1), тогда нам нужно изменить размер до (128 * 1.5 / 3, 128 * 1.5 / 3, 128 * 2 / 1) = (64, 64, 184).

Сделать это можно обычной интерполяцией:

torch.nn.functional.interpolate(volume, size=target_shape, mode="trilinear")

Заключение

Итак, закрепим основные особенности 3D медицинских данных:

  • значения вокселей отражают некоторую “интенсивность”, в КТ все переводят в Hounsfield units (HU);
  • разные окна по HU выделяют разные типы тканей;
  • вместе с изображением мы получаем много информации из тегов;
  • часть изображений делают “с контрастом”, который упрощает поиск патологии для врача;
  • мы знаем физические размеры объектов на снимке, так как знаем спейсинг — соотношение между вокселями и миллиметрами.

Полезные ссылки

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!