Добрый день, хабрасообщество. Мне хотелось бы продолжить рассмотрение аспектов реализации DICOM Viewer'а, и сегодня речь пойдёт о функциональных возможностях.
![](https://habrastorage.org/r/w1560/files/6f2/047/85d/6f204785def84f6ebc5a8ae42f86206a.png)
Итак, поехали.
Мультипланарная реконструкция позволяет создавать изображения из оригинальной плоскости в аксиальную, фронтальную, сагиттальную или произвольную плоскости. Для того чтобы построить MPR, необходимо построить объёмную 3D-модель и «разрезать» её в нужных плоскостях. Как правило, наилучшее качество MPR получается при компьютерной томографии(КТ), потому что в случае КТ можно создать 3D модель с разрешением, одинаковым во всех плоскостях. Поэтому выходное MPR получается с таким же разрешением, какое было у исходных изображений, полученных из КТ. Хотя бывают и МРТ с хорошим разрешением. Вот пример мультипланарной реконструкции:
![](https://habrastorage.org/r/w1560/files/945/373/bc0/945373bc07864137b37f441d414ba23c.png)
Зелёным — аксиальная плоскость (слева вверху);
Красным — фронтальная плоскость (справа вверху);
Синим — сагиттальная плоскость (слева внизу);
Жёлтым — произвольная плоскость (справа внизу).
Положение правого нижнего снимка определяется жёлтой линией на виде сбоку (левый верхний). Это и есть изображение, полученное «разрезанием» 3D-модели наклонной плоскостью. Для получения значения плотности в конкретной точки плоскости используется трилинейная интерполяция.
![](https://habrastorage.org/r/w1560/files/2d5/4e7/14c/2d54e714c0c741eb9a21fbfeb5604aa0.png)
То же самое, что и MPR, только вместо произвольной плоскости можно взять кривую, как показано на рисунке. Используется, например, в стоматологии для панорамного снимка зубов.
Каждая точка на кривой задаёт исходную точку трассировки, а нормаль к кривой в этой точке соответствует направлению оси Y в двухмерном изображении для этой точки. Оси X изображения соответствует сама кривая. То есть в каждой точке двухмерного изображения направление оси X – это касательная к кривой в соответствующей точке на кривой.
Значения минимальной интенсивности показывают мягкие ткани. Тогда как значения максимальной интенсивности соответствуют наиболее ярким участкам трёхмерного объекта — это либо наиболее плотные ткани, либо органы, насыщенные контрастным веществом. Минимальное/среднее/максимальное значение интенсивности берётся в диапазоне (как показано на рисунке пунктирными линиями). Минимальное значение по всей модели будет принимать воздух.
Алгоритм вычисления MIP очень простой: выбираем плоскость на 3D модели — пусть будет плоскость XY. Потом проходим по оси Z и выбираем максимальное значение интенсивности на заданном диапазоне и отображаем его на 2D плоскости:
![](https://habrastorage.org/r/w1560/files/81e/c59/4c7/81ec594c7e30449fb24de139fa8555e9.png)
Изображение, полученное путём проекции средней интенсивности, близко к обычному рентгеновскому снимку:
![](https://habrastorage.org/r/w1560/files/ceb/ecc/67e/cebecc67e3144e629c978cdb7740dd65.png)
Некоторые виды радиологических исследований не дают должного эффекта без использования контрастного препарата, поскольку не отражают некоторые виды тканей и органов. Это связано с тем, что в организме человека есть ткани, плотность которых примерно одинакова. Чтобы отличать такие ткани друг от друга, используют контрастное вещество, которое придаёт крови большую интенсивность. Также контрастное вещество используется для визуализации сосудов при ангиографии.
Ангиография — это приём, позволяющий визуализировать системы кровотоков (вены и сосуды) различных органов. Для этого используется контрастное вещество, которое вводят в исследуемый орган, и рентгеновский аппарат, создающий снимки во время ввода контрастного вещества. Таким образом на выходе аппарата получается набор снимков с разной степенью визуализации кровотоков:
![](https://habrastorage.org/r/w1560/files/ccc/cd3/8b2/ccccd38b26e343b9a8dc250e2912f878.png)
Однако вместе с венами и сосудами на снимках видны ткани других органов, например, черепа. Режим DSA (Digital subtraction angiography) позволяет визуализировать только кровотоки без каких-либо других тканей. Как это работает? Берём изображение серии, в котором кровотоки ещё не визуализированы контрастным веществом. Как правило, это первое изображение серии, так называемая маска:
![](https://habrastorage.org/r/w1560/files/2e5/6d9/d48/2e56d9d483be4f199bd2275f97daf095.png)
Затем вычитаем это изображение из всех остальных изображений серии. Получаем следующее изображение:
![](https://habrastorage.org/r/w1560/files/9e1/aa4/273/9e1aa42732d04e9e8883b41e041435b4.png)
На этом изображении хорошо видны кровотоки и практически не видны другие ткани, что позволяет проводить более точную диагностику.
Инструмент Clipping Box позволяет увидеть кости и анатомические ткани в разрезе, а также показать внутренние органы изнутри. Инструмент реализуется на уровне рендера, просто ограничивая область рейтрейсинга.
![](https://habrastorage.org/r/w1560/files/de2/ca7/034/de2ca70344a94afd8fb6012535ecdcbc.png)
В реализации область рейтрейсинга ограничивается плоскостями с нормалями, направленными в сторону отсечения. То есть куб представляется шестью плоскостями.
Инструмент похож на предыдущий и позволяет удалять фрагмент объёма под произвольным многоугольником:
![](https://habrastorage.org/r/w1560/files/140/a87/55e/140a8755ee8c43f99b52077e686eb072.png)
Под вырезанием следует понимать зануление вокселей в 3D-моделе, попавших в область многоугольника.
Также есть инструмент «Ножницы», который позволяют удалять части 3D-модели по принципу связности. Реализация: при выделении объекта происходит циклический поиск близлежащих связных вокселей, пока все близлежащие воксели не будут просмотрены. Затем все просмотренные воксели удаляются.
В 3D можно производить измерения органов под любым углом, что невозможно для некоторых случаех в 2D.
![](https://habrastorage.org/r/w1560/files/57a/794/289/57a79428940b4ce28cee39ac6ec70e4b.png)
В режиме 3D можно также воспользоваться полигональной линейкой:
![](https://habrastorage.org/r/w1560/files/661/404/4dd/6614044ddef943cc88d5271bcec5d48c.png)
ПЭТ-КТ (англ. PET-CT) относительно новая технология, являющаяся исследовательским методом ядерной медицины. Является методом мультимодальной томографии. Четвёртым измерением в данном случае является модальность (PET и CT). Предназначена в основном для обнаружения раковых опухолей.
CT помогает получить анатомическую структуру человеческого тела:
![](https://habrastorage.org/r/w1560/files/dc6/028/756/dc602875646240f58cd92802dcf8490d.png)
а PET показывает определённые области концентрации радиоактивного вещества, которая напрямую связана с интенсивностью кровоснабжения данной области.
![](https://habrastorage.org/r/w1560/files/c27/4ca/121/c274ca121ba74841ad2b75401f90ae7f.png)
PET получает картину биохимической активности, детектируя в теле человека радиоактивные изотопы. Радиоактивное вещество скапливается в органах, насыщенных кровью. Затем радиоактивное вещество претерпевает позитронный бета-распад. Образовавшиеся позитроны в дальнейшем аннигилирует с электронами из окружающей ткани, в результате чего происходит излучение пар гамма-лучей, которые и детектируются аппаратом, и затем на основе полученной информации строится 3D изображение.
Выбор радиоактивного изотопа определяет биологический процесс, который желают отследить в процессе исследования. Процессом может быть метаболизм, транспорт веществ и др. Поведение процесса в свою очередь является ключом к верной диагностике заболевания. На изображении выше у пациента в области печени видна опухоль.
Но основываясь на PET трудно понять, в какой части тела находится область с максимальной концентрацией радиоактивного вещества. При соединении геометрии тела (CT) и областей, насыщенных кровью с высокой концентрацией радиоактивного вещества (PET), получаем:
![](https://habrastorage.org/r/w1560/files/5dd/b33/611/5ddb336115e0443586633b168cb46843.png)
В качестве радиоактивного вещества для PET применяются радиоактивные изотопы с разными периодами полураспада. Для образования всякого рода злокачественных образований используется фтор-18 (фтордезоксиглюкоза), йод-124 используется для диагностирования рака щитовидной железы, галлий-68 — для обнаружения нейроэндокринных опухолей.
Функционал Fusion формирует новую серию, в которой изображения обоих модальностей (и PET и CT) объединены. В реализации изображения обоих модальностей перемешиваются, а затем сортируются по оси Z (считаем, что X и Y – оси изображения). Фактически получается, что изображения в серии чередуются (PET, CT, PET, CT …). Эта серия в дальнейшем используется для отрисовки 2D fusion и 3D fusion. В случае 2D fusion изображения отрисовываются попарно(PET-CT) в порядке возрастания Z:
![](https://habrastorage.org/r/w1560/files/ead/dcc/14a/eaddcc14abce4b0496e0e5b68c6ea6f0.png)
В данном случае сначала был отрисовано изображение CT, затем PET.
3D fusion реализован для видеокарты на CUDA. На видеокарте отрисовываются одновременно обе 3D-модели — PET и CT и получается реальный мультимодальный fusion. На процессоре fusion тоже работает, но работает несколько иначе. Дело в том, что на процессоре обе модели представлены в памяти как отдельные окто-деревья. Следовательно, при отрисовке необходимо трассировать два дерева и синхронизировать пропуск прозрачных вокселей. А это бы значительно снизило скорость работы. Поэтому было решено просто накладывать результат рендера одной 3D-модели поверх другой.
Технология Cardiac CT используется для диагностики различных нарушений работы сердца, включая коронарную болезнь сердца, тромбоэмболия легочной артерии и другие заболевания.
4D Cardiac CT представляет собой 3D во времени. Т.е. получается небольшое видео, которое будем называть кинопетлёй, в которой каждый кадр будет представлять собой 3D-объект. Исходные данные представляют собой набор dicom-изображений сразу для всех кадров кинопетли. Для того чтобы преобразовать набор изображений в кинопетлю, необходимо сначала сгруппировать исходные изображения по кадрам, а затем для каждого кадра создать 3D. Построение 3D-объекта на уровне кадра происходит так же как и для любой серии dicom-изображений. Мы используем эвристическую сортировку изображений для группировки по кадрам, используя положение изображения на оси Z (считая что X и Y это оси изображения). Полагаем, что после группировки по кадрам, в каждом кадре получается одинаковое количество изображений. Переключение кадра фактически сводится к переключение 3D-модели.
5D Fusion Pet – CardiacCT — это 4D Cardiac CT с добавлением fusion с PET в качестве пятой размерности. В реализации сначала создаём две кинопетли: с CardiacCT и с PET. Затем делаем fuision соответствующих кадров кинопетель, что даёт нам отдельную серию. Затем строим 3D полученной серии. Выглядит это так:
В качестве примера виртуальной эндоскопии будем рассматривать виртуальную колоноскопию, поскольку она является наиболее распространённым видом виртуальной эндоскопии. Виртуальная колоноскопия позволяет на основе данных КТ построить объёмную реконструкцию области брюшной полости и по этой трёхмерной реконструкции произвести диагностику. Во вьюере есть инструмент полёт камеры (fly-through) с навигацией по MPR:
![](https://habrastorage.org/r/w1560/files/481/2a8/b7f/4812a8b7fd5b4a4a9c03d5d41b85fcfb.png)
который в том числе позволяет автоматически следовать анатомической структуре. В частности позволяет просматривать внутрикишечную область в автоматическом режиме. Вот как это выглядит:
Полёт камеры представляет серию последовательных перемещений по внутрикишечной области. Для каждого шага вычисляется вектор перемещения камеры в следующую часть анатомической структуры. Вычисление производится на основе прозрачных вокселей в следующей части анатомической структуры. Фактически вычисляется некий средний воксель среди прозрачных. Начальный вектор перемещения задаётся вектором камеры. В инструменте Полёт камеры используется исключительно перспективная проекция.
Также есть функционал для автоматической сегментации кишечника, т.е. функционал для отделения кишечной области от остальной анатомии:
![](https://habrastorage.org/r/w1560/files/e08/4b1/baa/e084b1baa5604c10bc03a16a4861a5e9.png)
Возможна также навигация по сегментированной 3D-модели (кнопка Show camera orientation), которая по клику мыши на 3D-моделе перемещает камеру на соответствующую позицию в исходной анатомии.
Сегментация реализуется с помощью волнового алгоритма. Полагается, что анатомия замкнутая в том смысле, что она не контактирует с другими органами и внешним пространством.
Отдельным модулем во viewer'е реализовано чтение данных из Waveform и их отрисовка. DICOM ECG Waveform это специальный формат хранение данных отведений электрокардиограмм, определяемый стандартом DICOM. Данные электрокардиограммы представляют собой двенадцать отведений — 3 стандартных, 3 усиленных и 6 грудных. Данные каждого отведения представляют собой последовательность измерений электрического напряжения на поверхности тела. Для того чтобы отрисовать напряжения, нужно знать масштаб по вертикали в мм/мВ и масштаб по горизонтали в мм/сек:
![](https://habrastorage.org/r/w1560/files/e1a/fd4/f1b/e1afd4f1bfc045f5bba814b17990e9ec.png)
В качестве вспомогательных атрибутов также отрисовывается сетка для простоты измерения расстояний и масштаб в левом верхнем углу. Варианты масштаба подобраны с учётом врачебной практики: по вертикали — 10 и 20 мм/мВ, по горизонтали — 25 и 50 мм/сек. Также реализованы инструменты для измерения расстояния по горизонтали и вертикали.
DICOM-Viewer, помимо прочего, представляет собой полноценный DICOM-клиент. Есть возможность производить поиск на PACS-сервере, получать из него данные и др. Функции DICOM-клиента реализованы с помощью открытой библиотеки DCMTK. Рассмотрим типичный use-case работы DICOM-клиента на примере viewer'а. Производим поиск стадий на удалённом PACS-сервере:
![](https://habrastorage.org/r/w1560/files/be5/162/3dc/be51623dc066486b9f014aeeff1de8b5.png)
При выборе стадии внизу отображаются серии для выбранной стадии и количество изображений в них. Сверху справа указывается PACS-сервер, на котором будет произведён поиск. Поиск можно параметризовать, уточняя критерии поиска: PID, дата исследования, имя пациента и др. Поиск на клиенте реализуется командой C-FIND SCU с помощью библиотеки DCMTK, которая работает на одном из уровней: STUDY, SERIES и IMAGE.
Далее изображения выбранной серии можно загрузить, используя команды С-GET-SCU и C-MOVE-SCU. Протокол DICOM обязывает стороны соединения, т.е. клиента и сервера, заранее договориться, какие типы данных они собираются передавать через это соединение. Под типом данных понимается комбинация значений параметров SOPClassUID и TransferSyntax. SOPClassUID определяет тип операции, которую планируется выполнять через данное соединение. Наиболее часто используемые SOPClassUID'ы: Verification SOP Class (пинг сервера), Storage Service Class (сохранение изображений), Printer Sop Class (выполнение печати на DICOM-принтере), CT Image Storage (сохранение изображений КТ), MR Image Storage (сохранение изображение МРТ) и другие. TransferSyntax определяет формат бинарного файла. Популярные TransferSyntax'ы: Little Endian Explicit, Big Endian Implicit, JPEG Lossless Nonhierarchical (Processes 14). То есть, чтобы передать МРТ изображения в формате Little Endian Implicit, то в соединение необходимо добавить пару MR Image Storage — Little Endian Explicit.
![](https://habrastorage.org/r/w1560/files/aa4/298/c00/aa4298c00d18468cb4a0944451a54829.png)
Загруженные изображения сохраняются в локальное хранилище и, при повторном просмотре, загружаются из него, что позволяет увеличить производительность viewer'а. Сохранённые серии помечаются жёлтым значком в верхнем левом углу первого изображения серии.
Также DicomViewer как DICOM-клиент умеет записывать диски с исследованиями в формате DICOMDIR. Формат DICOMDIR реализуется в виде бинарного файла, который содержит относительные пути ко всем DICOM-файлам, которые записываются на диск. Реализуется с помощью библиотеки DCMTK. При чтении диска считываются пути ко всем файлам из DICOMDIR и после этого загружаются. Для добавления в DICOMDIR стадий и серий был разработан такой интерфейс:
![](https://habrastorage.org/r/w1560/files/c37/64d/ef0/c3764def04934a62b4005efe86b6b57f.png)
Вот и всё, что я хотел рассказать про функционал DicomViewer'а. Как всегда очень приветствуется обратная связь от квалифицированных специалистов.
Ссылка на Viewer:
DICOM Viewer x86
DICOM Viewer x64
Примеры данных:
MANIX — для общих примеров (MPR, 2D, 3D и т.д.)
COLONIX — для виртуальной колоноскопии
FIVIX — 4D CARDIAC-CT
CEREBRIX — Fusion PET-CT
![](https://habrastorage.org/files/6f2/047/85d/6f204785def84f6ebc5a8ae42f86206a.png)
Итак, поехали.
Инструментарий в 2D
Мультипланарная реконструкция (MPR)
Мультипланарная реконструкция позволяет создавать изображения из оригинальной плоскости в аксиальную, фронтальную, сагиттальную или произвольную плоскости. Для того чтобы построить MPR, необходимо построить объёмную 3D-модель и «разрезать» её в нужных плоскостях. Как правило, наилучшее качество MPR получается при компьютерной томографии(КТ), потому что в случае КТ можно создать 3D модель с разрешением, одинаковым во всех плоскостях. Поэтому выходное MPR получается с таким же разрешением, какое было у исходных изображений, полученных из КТ. Хотя бывают и МРТ с хорошим разрешением. Вот пример мультипланарной реконструкции:
![](https://habrastorage.org/files/945/373/bc0/945373bc07864137b37f441d414ba23c.png)
Зелёным — аксиальная плоскость (слева вверху);
Красным — фронтальная плоскость (справа вверху);
Синим — сагиттальная плоскость (слева внизу);
Жёлтым — произвольная плоскость (справа внизу).
Положение правого нижнего снимка определяется жёлтой линией на виде сбоку (левый верхний). Это и есть изображение, полученное «разрезанием» 3D-модели наклонной плоскостью. Для получения значения плотности в конкретной точки плоскости используется трилинейная интерполяция.
Мультипланарная реконструкция по произвольной кривой (curved MPR)
![](https://habrastorage.org/files/2d5/4e7/14c/2d54e714c0c741eb9a21fbfeb5604aa0.png)
То же самое, что и MPR, только вместо произвольной плоскости можно взять кривую, как показано на рисунке. Используется, например, в стоматологии для панорамного снимка зубов.
Каждая точка на кривой задаёт исходную точку трассировки, а нормаль к кривой в этой точке соответствует направлению оси Y в двухмерном изображении для этой точки. Оси X изображения соответствует сама кривая. То есть в каждой точке двухмерного изображения направление оси X – это касательная к кривой в соответствующей точке на кривой.
Проекция минимальной/средней/максимальной интенсивности (MIP)
Значения минимальной интенсивности показывают мягкие ткани. Тогда как значения максимальной интенсивности соответствуют наиболее ярким участкам трёхмерного объекта — это либо наиболее плотные ткани, либо органы, насыщенные контрастным веществом. Минимальное/среднее/максимальное значение интенсивности берётся в диапазоне (как показано на рисунке пунктирными линиями). Минимальное значение по всей модели будет принимать воздух.
Алгоритм вычисления MIP очень простой: выбираем плоскость на 3D модели — пусть будет плоскость XY. Потом проходим по оси Z и выбираем максимальное значение интенсивности на заданном диапазоне и отображаем его на 2D плоскости:
![](https://habrastorage.org/files/81e/c59/4c7/81ec594c7e30449fb24de139fa8555e9.png)
Изображение, полученное путём проекции средней интенсивности, близко к обычному рентгеновскому снимку:
![](https://habrastorage.org/files/ceb/ecc/67e/cebecc67e3144e629c978cdb7740dd65.png)
Некоторые виды радиологических исследований не дают должного эффекта без использования контрастного препарата, поскольку не отражают некоторые виды тканей и органов. Это связано с тем, что в организме человека есть ткани, плотность которых примерно одинакова. Чтобы отличать такие ткани друг от друга, используют контрастное вещество, которое придаёт крови большую интенсивность. Также контрастное вещество используется для визуализации сосудов при ангиографии.
Режим DSA для ангиографии
Ангиография — это приём, позволяющий визуализировать системы кровотоков (вены и сосуды) различных органов. Для этого используется контрастное вещество, которое вводят в исследуемый орган, и рентгеновский аппарат, создающий снимки во время ввода контрастного вещества. Таким образом на выходе аппарата получается набор снимков с разной степенью визуализации кровотоков:
![](https://habrastorage.org/files/ccc/cd3/8b2/ccccd38b26e343b9a8dc250e2912f878.png)
Однако вместе с венами и сосудами на снимках видны ткани других органов, например, черепа. Режим DSA (Digital subtraction angiography) позволяет визуализировать только кровотоки без каких-либо других тканей. Как это работает? Берём изображение серии, в котором кровотоки ещё не визуализированы контрастным веществом. Как правило, это первое изображение серии, так называемая маска:
![](https://habrastorage.org/files/2e5/6d9/d48/2e56d9d483be4f199bd2275f97daf095.png)
Затем вычитаем это изображение из всех остальных изображений серии. Получаем следующее изображение:
![](https://habrastorage.org/files/9e1/aa4/273/9e1aa42732d04e9e8883b41e041435b4.png)
На этом изображении хорошо видны кровотоки и практически не видны другие ткани, что позволяет проводить более точную диагностику.
Инструментарий в 3D
Инструмент куб видимости (Clipping Box)
Инструмент Clipping Box позволяет увидеть кости и анатомические ткани в разрезе, а также показать внутренние органы изнутри. Инструмент реализуется на уровне рендера, просто ограничивая область рейтрейсинга.
![](https://habrastorage.org/files/de2/ca7/034/de2ca70344a94afd8fb6012535ecdcbc.png)
В реализации область рейтрейсинга ограничивается плоскостями с нормалями, направленными в сторону отсечения. То есть куб представляется шестью плоскостями.
Инструментарий редактирования объема — вырезание многоугольником
Инструмент похож на предыдущий и позволяет удалять фрагмент объёма под произвольным многоугольником:
![](https://habrastorage.org/files/140/a87/55e/140a8755ee8c43f99b52077e686eb072.png)
Под вырезанием следует понимать зануление вокселей в 3D-моделе, попавших в область многоугольника.
Также есть инструмент «Ножницы», который позволяют удалять части 3D-модели по принципу связности. Реализация: при выделении объекта происходит циклический поиск близлежащих связных вокселей, пока все близлежащие воксели не будут просмотрены. Затем все просмотренные воксели удаляются.
Линейка в 3D
В 3D можно производить измерения органов под любым углом, что невозможно для некоторых случаех в 2D.
![](https://habrastorage.org/files/57a/794/289/57a79428940b4ce28cee39ac6ec70e4b.png)
В режиме 3D можно также воспользоваться полигональной линейкой:
![](https://habrastorage.org/files/661/404/4dd/6614044ddef943cc88d5271bcec5d48c.png)
Инструментарий в 4D
Совмещение нескольких томографических серий в 3D (Fusion PET-CT)
ПЭТ-КТ (англ. PET-CT) относительно новая технология, являющаяся исследовательским методом ядерной медицины. Является методом мультимодальной томографии. Четвёртым измерением в данном случае является модальность (PET и CT). Предназначена в основном для обнаружения раковых опухолей.
CT помогает получить анатомическую структуру человеческого тела:
![](https://habrastorage.org/files/dc6/028/756/dc602875646240f58cd92802dcf8490d.png)
а PET показывает определённые области концентрации радиоактивного вещества, которая напрямую связана с интенсивностью кровоснабжения данной области.
![](https://habrastorage.org/files/c27/4ca/121/c274ca121ba74841ad2b75401f90ae7f.png)
PET получает картину биохимической активности, детектируя в теле человека радиоактивные изотопы. Радиоактивное вещество скапливается в органах, насыщенных кровью. Затем радиоактивное вещество претерпевает позитронный бета-распад. Образовавшиеся позитроны в дальнейшем аннигилирует с электронами из окружающей ткани, в результате чего происходит излучение пар гамма-лучей, которые и детектируются аппаратом, и затем на основе полученной информации строится 3D изображение.
Выбор радиоактивного изотопа определяет биологический процесс, который желают отследить в процессе исследования. Процессом может быть метаболизм, транспорт веществ и др. Поведение процесса в свою очередь является ключом к верной диагностике заболевания. На изображении выше у пациента в области печени видна опухоль.
Но основываясь на PET трудно понять, в какой части тела находится область с максимальной концентрацией радиоактивного вещества. При соединении геометрии тела (CT) и областей, насыщенных кровью с высокой концентрацией радиоактивного вещества (PET), получаем:
![](https://habrastorage.org/files/5dd/b33/611/5ddb336115e0443586633b168cb46843.png)
В качестве радиоактивного вещества для PET применяются радиоактивные изотопы с разными периодами полураспада. Для образования всякого рода злокачественных образований используется фтор-18 (фтордезоксиглюкоза), йод-124 используется для диагностирования рака щитовидной железы, галлий-68 — для обнаружения нейроэндокринных опухолей.
Функционал Fusion формирует новую серию, в которой изображения обоих модальностей (и PET и CT) объединены. В реализации изображения обоих модальностей перемешиваются, а затем сортируются по оси Z (считаем, что X и Y – оси изображения). Фактически получается, что изображения в серии чередуются (PET, CT, PET, CT …). Эта серия в дальнейшем используется для отрисовки 2D fusion и 3D fusion. В случае 2D fusion изображения отрисовываются попарно(PET-CT) в порядке возрастания Z:
![](https://habrastorage.org/files/ead/dcc/14a/eaddcc14abce4b0496e0e5b68c6ea6f0.png)
В данном случае сначала был отрисовано изображение CT, затем PET.
3D fusion реализован для видеокарты на CUDA. На видеокарте отрисовываются одновременно обе 3D-модели — PET и CT и получается реальный мультимодальный fusion. На процессоре fusion тоже работает, но работает несколько иначе. Дело в том, что на процессоре обе модели представлены в памяти как отдельные окто-деревья. Следовательно, при отрисовке необходимо трассировать два дерева и синхронизировать пропуск прозрачных вокселей. А это бы значительно снизило скорость работы. Поэтому было решено просто накладывать результат рендера одной 3D-модели поверх другой.
4D CardiacCT
Технология Cardiac CT используется для диагностики различных нарушений работы сердца, включая коронарную болезнь сердца, тромбоэмболия легочной артерии и другие заболевания.
4D Cardiac CT представляет собой 3D во времени. Т.е. получается небольшое видео, которое будем называть кинопетлёй, в которой каждый кадр будет представлять собой 3D-объект. Исходные данные представляют собой набор dicom-изображений сразу для всех кадров кинопетли. Для того чтобы преобразовать набор изображений в кинопетлю, необходимо сначала сгруппировать исходные изображения по кадрам, а затем для каждого кадра создать 3D. Построение 3D-объекта на уровне кадра происходит так же как и для любой серии dicom-изображений. Мы используем эвристическую сортировку изображений для группировки по кадрам, используя положение изображения на оси Z (считая что X и Y это оси изображения). Полагаем, что после группировки по кадрам, в каждом кадре получается одинаковое количество изображений. Переключение кадра фактически сводится к переключение 3D-модели.
5D Fusion Pet – CardiacCT
5D Fusion Pet – CardiacCT — это 4D Cardiac CT с добавлением fusion с PET в качестве пятой размерности. В реализации сначала создаём две кинопетли: с CardiacCT и с PET. Затем делаем fuision соответствующих кадров кинопетель, что даёт нам отдельную серию. Затем строим 3D полученной серии. Выглядит это так:
Виртуальная эндоскопия
В качестве примера виртуальной эндоскопии будем рассматривать виртуальную колоноскопию, поскольку она является наиболее распространённым видом виртуальной эндоскопии. Виртуальная колоноскопия позволяет на основе данных КТ построить объёмную реконструкцию области брюшной полости и по этой трёхмерной реконструкции произвести диагностику. Во вьюере есть инструмент полёт камеры (fly-through) с навигацией по MPR:
![](https://habrastorage.org/files/481/2a8/b7f/4812a8b7fd5b4a4a9c03d5d41b85fcfb.png)
который в том числе позволяет автоматически следовать анатомической структуре. В частности позволяет просматривать внутрикишечную область в автоматическом режиме. Вот как это выглядит:
Полёт камеры представляет серию последовательных перемещений по внутрикишечной области. Для каждого шага вычисляется вектор перемещения камеры в следующую часть анатомической структуры. Вычисление производится на основе прозрачных вокселей в следующей части анатомической структуры. Фактически вычисляется некий средний воксель среди прозрачных. Начальный вектор перемещения задаётся вектором камеры. В инструменте Полёт камеры используется исключительно перспективная проекция.
Также есть функционал для автоматической сегментации кишечника, т.е. функционал для отделения кишечной области от остальной анатомии:
![](https://habrastorage.org/files/e08/4b1/baa/e084b1baa5604c10bc03a16a4861a5e9.png)
Возможна также навигация по сегментированной 3D-модели (кнопка Show camera orientation), которая по клику мыши на 3D-моделе перемещает камеру на соответствующую позицию в исходной анатомии.
Сегментация реализуется с помощью волнового алгоритма. Полагается, что анатомия замкнутая в том смысле, что она не контактирует с другими органами и внешним пространством.
Система просмотра ЭКГ (Waveform)
Отдельным модулем во viewer'е реализовано чтение данных из Waveform и их отрисовка. DICOM ECG Waveform это специальный формат хранение данных отведений электрокардиограмм, определяемый стандартом DICOM. Данные электрокардиограммы представляют собой двенадцать отведений — 3 стандартных, 3 усиленных и 6 грудных. Данные каждого отведения представляют собой последовательность измерений электрического напряжения на поверхности тела. Для того чтобы отрисовать напряжения, нужно знать масштаб по вертикали в мм/мВ и масштаб по горизонтали в мм/сек:
![](https://habrastorage.org/files/e1a/fd4/f1b/e1afd4f1bfc045f5bba814b17990e9ec.png)
В качестве вспомогательных атрибутов также отрисовывается сетка для простоты измерения расстояний и масштаб в левом верхнем углу. Варианты масштаба подобраны с учётом врачебной практики: по вертикали — 10 и 20 мм/мВ, по горизонтали — 25 и 50 мм/сек. Также реализованы инструменты для измерения расстояния по горизонтали и вертикали.
DICOM-Viewer как DICOM-клиент
DICOM-Viewer, помимо прочего, представляет собой полноценный DICOM-клиент. Есть возможность производить поиск на PACS-сервере, получать из него данные и др. Функции DICOM-клиента реализованы с помощью открытой библиотеки DCMTK. Рассмотрим типичный use-case работы DICOM-клиента на примере viewer'а. Производим поиск стадий на удалённом PACS-сервере:
![](https://habrastorage.org/files/be5/162/3dc/be51623dc066486b9f014aeeff1de8b5.png)
При выборе стадии внизу отображаются серии для выбранной стадии и количество изображений в них. Сверху справа указывается PACS-сервер, на котором будет произведён поиск. Поиск можно параметризовать, уточняя критерии поиска: PID, дата исследования, имя пациента и др. Поиск на клиенте реализуется командой C-FIND SCU с помощью библиотеки DCMTK, которая работает на одном из уровней: STUDY, SERIES и IMAGE.
Далее изображения выбранной серии можно загрузить, используя команды С-GET-SCU и C-MOVE-SCU. Протокол DICOM обязывает стороны соединения, т.е. клиента и сервера, заранее договориться, какие типы данных они собираются передавать через это соединение. Под типом данных понимается комбинация значений параметров SOPClassUID и TransferSyntax. SOPClassUID определяет тип операции, которую планируется выполнять через данное соединение. Наиболее часто используемые SOPClassUID'ы: Verification SOP Class (пинг сервера), Storage Service Class (сохранение изображений), Printer Sop Class (выполнение печати на DICOM-принтере), CT Image Storage (сохранение изображений КТ), MR Image Storage (сохранение изображение МРТ) и другие. TransferSyntax определяет формат бинарного файла. Популярные TransferSyntax'ы: Little Endian Explicit, Big Endian Implicit, JPEG Lossless Nonhierarchical (Processes 14). То есть, чтобы передать МРТ изображения в формате Little Endian Implicit, то в соединение необходимо добавить пару MR Image Storage — Little Endian Explicit.
![](https://habrastorage.org/files/aa4/298/c00/aa4298c00d18468cb4a0944451a54829.png)
Загруженные изображения сохраняются в локальное хранилище и, при повторном просмотре, загружаются из него, что позволяет увеличить производительность viewer'а. Сохранённые серии помечаются жёлтым значком в верхнем левом углу первого изображения серии.
Также DicomViewer как DICOM-клиент умеет записывать диски с исследованиями в формате DICOMDIR. Формат DICOMDIR реализуется в виде бинарного файла, который содержит относительные пути ко всем DICOM-файлам, которые записываются на диск. Реализуется с помощью библиотеки DCMTK. При чтении диска считываются пути ко всем файлам из DICOMDIR и после этого загружаются. Для добавления в DICOMDIR стадий и серий был разработан такой интерфейс:
![](https://habrastorage.org/files/c37/64d/ef0/c3764def04934a62b4005efe86b6b57f.png)
Вот и всё, что я хотел рассказать про функционал DicomViewer'а. Как всегда очень приветствуется обратная связь от квалифицированных специалистов.
Ссылка на Viewer:
DICOM Viewer x86
DICOM Viewer x64
Примеры данных:
MANIX — для общих примеров (MPR, 2D, 3D и т.д.)
COLONIX — для виртуальной колоноскопии
FIVIX — 4D CARDIAC-CT
CEREBRIX — Fusion PET-CT