Зачем это нужно


Для чего выполняется томографическое исследование? В большинстве случаев ради медицинской диагностики, иногда — в научных целях. Цель медицинской диагностики — выявить патологию, либо получить о ней дополнительную информацию, либо же убедиться, что её нет. Каким образом это достигается? В большинстве случаев путем последовательного ручного анализа срезов, сгенерированных томографом. Зачастую этого вполне достаточно. Но в некоторых случаях получить достаточно информации только на основе анализа плоских срезов невозможно или картина получается неполной: например, при поиске патологий сосудов или анализе некоторых переломов. Также, иногда необходима информация о взаимном расположении различных органов: особенно это актуально при планировании предстоящих операций. Получить такую информацию только на основе плоских срезов, в большинстве случаев, затруднительно. Тогда приходит на помощь трехмерная реконструкция томографических данных.


Примеры трехмерной реконструкции

Однако, при трехмерной реконструкции возникают свои проблемы: зачастую интересующие органы и окружающие их ткани имеют сходную плотность (рентгеновскую в случае КТ или интенсивность в случае МРТ — для разных типов томографии термины могут различаться, но мы будем использовать везде термин “плотность”, хотя для МРТ исследований он может быть и не совсем корректен). В этих случаях орган получается либо скрыт окружающими тканями, либо два близко расположенных органа очень сложно разделить.


Органы скрытые окружающими тканями и они же в разрезе

В подобных случаях и возникает необходимость в такой операции как сегментация: выделение интересующих органов в их границах с последующей их визуализацией, анализом (например, измерением объема, площади поверхности или статистики распределения плотности в объекте) или экспортом в каком-либо виде (зачастую в виде полигональной модели).


Сердце до сегментации и после

Экспорт в виде полигональной модели открывает ещё одну возможность: 3D-печать экспортированного органа для дальнейшего анализа, моделирования операции или даже печати протеза.

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

Как это делается


Базовые инструменты сегментации


Одним из наиболее интуитивных путей сегментации нужного органа является подход: отрезать всё лишнее. Для этого в нашем Инобитек DICOM-Просмотрщике имеется два интерактивных инструмента:

Вырезание полигоном. Инструмент применим только к трехмерной реконструкции. Возможны два варианта: удалить всё, попавшее в выделенную область, или, наоборот, удалить всё вокруг выделенной области.


Использование инструмента вырезания полигоном

Удаление видимых тканей ластиком в виде шара или цилиндра. Преимуществом этого инструмента является его локальность: если полигональное вырезание всегда делает дырку “насквозь” и в некоторых случаях для него невозможно подобрать такой ракурс, чтобы не задеть нужные ткани, то при удалении шаром или цилиндром всегда можно подобрать такой их размер, чтобы удалить только то, что нужно. Кроме того, этот инструмент можно применять на двумерных срезах МПР-реконструкции, что позволяет сразу подобраться к некоторым труднодоступным местам скрытым окружающими тканями, а также выполнять посрезовую ручную сегментацию нужного органа. У этого инструмента есть ещё одна особенность: в альтернативном режиме он может восстанавливать ранее удаленные другими инструментами ткани.


Удаление ластиком

Ещё одним интуитивным подходом является удаление какой-то связной области (например отдельную кость, визуально не контактирующую с другими костями) или наоборот всего, кроме этой связной области. В Инобитек DICOM-Просмотрщике оба этих варианта реализованы соответствующими инструментами (инструменты применимы только к трехмерной реконструкции). Кроме того, они имеют дополнительные параметры. Во-первых, можно задать минимальную толщину структуры, делающей объект связным, т.е. если две части объекта связаны некоторой структурой, толщина которой меньше указанного значения, то эти две части не будут считаться связными. Во-вторых, т.к. зачастую удаление вокселей по порогу видимости (а видимые воксели классифицируются именно по этому порогу) приводит к не очень естественной визуализации результатов редактирования, необходимо нарастить один или несколько слоев вокселей вокруг оставшихся после сегментации — второй параметр позволяет задать количество таких слоев. Кроме того, использование первого параметра также срезает острые выступы объектов, что во многих случаях нежелательно, и увеличение второго параметра может помочь решить эту проблему.


Удаление связных областей

Немного технических деталей, необходимых для понимания работы остальных инструментов
Здесь возникает важный момент: видимость вокселей. Для правильного понимания работы этого и остальных инструментов этот момент требует разъяснения. Как выполняется воксельная визуализация? В оригинале все воксели хранят значение плотности, но для отображения, каждому вокселю нужно назначить какое-то значение цвета и прозрачность (в нашем случае это значение RGBA). За это отвечает так называемая передаточная функция T:

$Crgba = T(I),$


где I — значение плотности, Crgba — RGBA значение, соответствующее этой плотности. Так как в реальности хранимые значения плотности целочисленные, функция T(I) может быть задана таблично и в таком случае называется цветовой таблицей (Color lookup table — CLUT). Передаточная функция может иметь произвольный вид и каждому виду передаточной функции соответствует отдельная цветовая таблица. В зависимости от выбранной цветовой таблицы трехмерная реконструкция будет выглядеть по разному: плотности одного диапазона, соответствующие одному типу тканей, могут быть скрыты, а плотности других диапазонов наоборот сделаны видимыми и раскрашены в выбранный цвет. Таким образом, разные цветовые таблицы позволяют визуализировать разные органы и ткани, либо одни и те же органы разным способом. Кроме того, цветовые таблицы могут быть параметризированны в зависимости от значения текущего окна плотности — это удобно, так как позволяет подбирать видимость нужных органов и тканей интерактивно, путем изменения ширины и уровня этого окна.


Один и тот же объем визуализированный с помощью разных цветовых таблиц

Какое значение всё это имеет для сегментации? Как видно на примере предыдущего инструмента, границы структуры определяются в том числе на основе текущей визуализации. Если две области объема являются связными при визуализации с использованием одной цветовой таблицы (например, кости связаны сухожилиями и мышцами), то при смене цветовой таблицы они могут оказаться не связанными (если визуализировать только кости). Таким образом, цветовая таблица и текущее окно плотности (поскольку цветовая таблица может от него зависеть, о чем и написано выше), являются параметрами, определяющим текущую сегментацию.


Cвязный и несвязный объект в зависимости от выбранной цветовой таблицы

Ещё одним параметром, определяющим текущую сегментацию является маска видимости. Что это такое? Выше мы описали инструменты, позволяющие удалять лишнии ткани. Но как происходит такое удаление? Оно выполняется с использованием маски видимости. В этой маске каждому вокселю соответствует один бит, который, соответственно, может иметь значение 0 — воксель удален, 1 — воксель не удален. Таким образом, инструменты, удаляющие лишние ткани, просто устанавливают нулевое значение маски тем вокселям, к которым они применяются. При использовании маски видимости появляется возможность скрывать органы и ткани независимо от цветовой таблицы, выбранной для визуализации.

Таким образом, текущая сегментация определяется тремя параметрами: цветовой таблицей, окном плотности и маской видимости. При изменении любого из этих параметров сегментация может изменится.
Тут наверное стоит сказать, что в данном случае понимается под термином “текущая сегментация” — имеется в виду результат процесса сегментации достигнутый на текущий момент. Этот результат также представлен в форме битовой маски — такой же, как маска видимости. Только в данном случае единичное значение маски вокселя означает его принадлежность к сегментированному объекту, а нулевое значение соответственно имеет обратный смысл — воксель не принадлежит сегментированному объекту. Понятно, что если маска видимости вокселя имеет нулевое значение, то и в маске сегментации он тоже всегда будет иметь нулевое значение. А вот какое значение в маске сегментации будет иметь воксель, имеющий единичное значение в маске видимости, зависит уже от цветовой таблицы. Это определяется на основе значения прозрачности, полученном из цветовой таблицы для плотности, соответствующей вокселю: воксель принадлежит сегментации, если значение прозрачности больше некоторого порога. Значение порога можно задавать в настройках и обычно оно равно 1-10% (100% — полностью непрозрачный воксель, 0% — полностью прозрачный). Необходимость использования порога связана с тем, что при визуализации, воксели со значением прозрачности меньше некоторого значения практически не видны, в результате чего может возникнуть несоответствие результата сегментации тому, что пользователь видит на экране.

Сегментированные структуры


Теперь, когда с основными понятиями процесса сегментации, надеюсь, всё более менее понятно, возникает вопрос: что делать после того, как мы сегментировали нужный нам орган или патологию? Наверное, проанализировать его, раз уж этому больше не мешают окружающие ткани и органы. Но что делать, если мы хотим сегментировать несколько объектов и визуализировать их совместно? Или что делать в том случае, когда проще сегментировать то, что мешает просмотру, и потом это скрыть? Ответом на эти и другие вопросы являются сегментированные структуры.

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

Как это реализовано? В нашем Инобитек DICOM-Просмотрщике есть специальная кнопка, которая открывает панель со списком сегментированных структур. В программе есть два окна, где присутствует панель сегментированных структур: окно трехмерной реконструкции и окно просмотра МПР. Логика работы с сегментированными структурами в этих окнах несколько различается.


Панель сегментированных структур на МПР


Панель сегментированных структур в 3D

В списке сегментированных структур всегда есть строка, которую нельзя удалить: базовый объем. В окне трехмерной реконструкции базовый объем можно редактировать, удаляя лишнии ткани. В окне просмотра МПР базовый объем редактировать нельзя — редактировать можно только остальные сегментированные структуры.

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


Маска на МПР

Каждую сегментированную структуру можно в любой момент скрыть или отобразить. Также для каждой сегментированной структуры показывается её объем — таким образом, путем сегментации можно измерять объемы органов и образований. Для всех сегментированных структур, кроме базового объема, вычисляется статистика: минимальное и максимальное значение плотности в структуре, а также её среднее значение и стандартное отклонение этого значения. Любой сегментированной структуре, кроме базового объема, можно задать цвет — в этом случае в используемой цветовой таблице все значения цвета меняются на заданное (прозрачность при этом не меняется, поэтому и сегментация не меняется, так как она зависит только от прозрачности, но не от цвета). Это удобно, так как зачастую несколько сегментированных структур имеют общую цветовую таблицу и задание цвета помогает различить их без необходимости назначать каждой сегментированной структуре свою цветовую таблицу.


Сегментированные структуры раскрашенные цветом

Полигональные модели


На основе любой сегментированной структуры можно построить её полигональную модель (сетку) — кусочную аппроксимацию поверхности сегментированной структуры полигональными элементами (треугольниками). Это один из важных результатов сегментации, так как практически любой софт, работающий с трехмерными моделями, подразумевает в качестве трехмерной модели полигональную сетку. К такому софту относятся средства визуализации, редактирования, численного моделирования и 3D-печати. То есть экспорт результатов сегментации в виде полигональной модели, позволяет работать с этими результатами в большинстве сторонних программ.

Для построения сеток используется алгоритм “марширующих кубов”, являющийся одновременно простым и наиболее эффективным для данной задачи. Так как воксельная модель состоит из кубических вокселей, при аппроксимации ее поверхности эта “кубичность” сохраняется и сетка выглядит “ступенчатой”. Чтобы от этого избавиться, сетку можно сгладить. Сглаживание производится методом Лапласа, заключающемся в том, что координаты каждой вершины сетки заменяются усредненной координатой всех соседних вершин. Процедура может быть повторена несколько раз — каждый новый проход делает сетку более гладкой. Количество проходов можно задать в параметрах построения сетки. Но нужно помнить, что каждый проход изменяется сетку, и немного отклоняет ее от реальной границы поверхности — чем больше проходов, тем больше отклонение. Кроме того, в некоторых случаях в результате сглаживания возможно взаимное пересечение элементов сетки (фактически пересечение поверхности самой с собой) или появление треугольников с нулевой площадью. Для некоторых задач это может быть недопустимым, поэтому большое количество проходов сглаживания нужно задавать с осторожностью.


Несглаженная и сглаженная сетки

Также в параметрах построения полигональной поверхности можно задать максимальное количество треугольников образующих сетку. Это может быть необходимо, например, для ускорения визуализации. Если этот параметр задан (отличен от нуля, ноль означает, что максимальное количество треугольников не ограничено), то, если количество треугольников после построения сетки алгоритмом “марширующих кубов” превышает указанное значение, будет выполнена процедура последовательного объединения треугольников, для уменьшения их общего количества до требуемого значения. Но, в некоторых случаях, если требуемое количество треугольников достаточно мало, в определенный момент объединение треугольников не может быть произведено, без изменения топологии сетки. В этом случае результирующее количество треугольников будет равно минимальному значению, которое можно достигнуть без изменения топологии сетки.

Полигональные модели могут быть не только экспортированы, но и импортированы в качестве сегментированных структур. В этом случае создается сегментированная структура специального вида — она содержит только импортированную сетку и для нее не определена никакая маска сегментации. Импорт полигональных моделей может быть полезен для планирования операций — импорт моделей хирургических инструментов, оснастки, протезов и имплантов позволяет визуализировать их совместно с анатомией и предварительно оценить процесс или результат операции. Для импортированных моделей доступен инструмент ручного позиционирования, позволяющий поместить их в требуемое место и в нужной ориентации совместно с трехмерной реконструкцией анатомии. Кроме того, сегментированные структуры, содержащие только сетку, могут быть вокселизированы. То есть для них будет создана маска видимости, содержащая только воксели, находящиеся внутри объема, ограниченного поверхностью сетки. Этот прием может быть использован для сохранения и восстановления результатов сегментации: для сегментированной структуры строится сетка, после чего она экспортируется, при последующем открытии того же исследования, сетка может быть импортирована и вокселизирована, в результате чего сегментированная структура будет восстановлена.

Бинарные операции над сегментированными структурами


Как уже упоминалось выше, иногда возникают ситуации, когда проще сначала сегментировать не напрямую то, что нам нужно, а вместо этого сегментировать какие то второстепенные объекты: например, что-то лишнее, что необходимо удалить, или отдельные части целой структуры, а потом выполнить над этим какие-то дополнительные операции: вычесть то, что нужно удалить или объединить части в целое. Такие операции называются бинарными. В Инобитек DICOM-Просмотрщике реализована 3 типа бинарных операций над сегментированными структурами:

  • вычитание
  • объединение
  • пересечение

В любой из этих операций участвуют две сегментированные структуры (одна из которых может быть базовым объемом). Одна из этих двух сегментированных структур является целевой: в неё будет помещен результат операции. Целевой всегда является текущая активная сегментированная структура. Вторая структура является дополнительной. При выполнении операций модифицируется маска видимости целевой структуры, но в самой операции участвуют маски сегментации структур, а не их маски видимости. То есть операции выполняются с учетом текущих цветовых таблиц.

При вычитании, из маски видимости целевой структуры вычитаются все воксели маски сегментации дополнительной структуры. То есть всё это выглядит так, что все видимые воксели дополнительной структуры становятся невидимыми в целевой структуре.


Сердце наполненное кровью, кровь, заполняющая сердце, миокард, полученный в результате вычитания

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


Ткани легкого, сосуды легкого, объединение

При пересечении, в маске видимости целевой структуры остаются только воксели, присутствующие одновременно в маске сегментации целевой и дополнительной структуры. То есть видимыми остаются только те воксели целевой структуры, которые были видимы одновременно в целевой и дополнительной структуре.


Сосуды, печень, их пересечение — сосуды печени

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

Другие инструменты сегментации


Хотя с использованием описанных выше инструментов можно выполнить практически любую сегментацию, в некоторых случаях это может быть неоправданно трудоемко и занять слишком много времени. В Инобитек DICOM-Просмотрщике на данный момент реализованы дополнительные инструменты, позволяющие упростить процесс сегментации во многих случаях.

Морфологические операции


Морфологические операции — популярный инструмент для обработки изображений. Воксельный объем — обобщение попиксельного представления двумерного изображения на третье измерение, поэтому многие операции, применимые к двумерным изображениям, также применимы и к воксельному объему. В том числе это относится к морфологическим операциям. В Инобитек DICOM-Просмотрщике реализованы операции наращивания (роста) и эрозии (сокращения), позволяющие нарастить или сократить текущую сегментацию на заданное количество вокселей. Для удобства пользователя величина наращивания/сокращения задается в миллиметрах, а не в вокселях. Отдельных операций замыкания и размыкания не реализовано, но по определению они могут быть выполнены через последовательное применение операций наращивания и сокращения в нужном порядке. Кроме того, реализована операция заполнения пустот в текущей сегментации. От операции замыкания она отличается тем, что гарантированно заполняет пустоты любого размера, а не только сравнимых с величиной наращивания/сокращения при замыкании. К тому же эта операция не влияет больше ни на какие другие воксели, кроме вокселей, принадлежащие пустотам.

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


Список морфологических операций

В дополнение к морфологическим операциям в списке есть еще один инструмент: Удаление невидимого объема.

Он устанавливает маску видимости равной текущей маске сегментации, то есть, те воксели, которые не были скрыты маской сегментации, но были невидимы из-за текущей цветовой таблицы, удаляются из маски видимости и становятся окончательно невидимыми, то есть больше не могут быть сделаны видимыми изменением цветовой таблицы. Необходимость такого инструмента можно проиллюстрировать следующим примером: допустим нам нужно сегментировать кости в КТ исследовании. Кости имеют более высокое значение плотности чем остальные ткани, но распределение этой плотности неравномерно. Плотность выше в центре кости и уменьшается в направлении её внешней границы. Если путем изменения окна плотности или выбором цветовой таблицы установить порог плотности для визуализации, равный плотности внешней границы кости, то он может оказаться недостаточно высоким, особенно в случае исследования с контрастом — кроме костей будут визуализированы и некоторые другие ткани, в частности контрастированные. Поэтому, чтобы гарантированно визуализировать только воксели, принадлежащие костным структурам, следует установить более высокий порог, соответствующий плотности внутренней кости. Но в этом случае кости будут визуализированы лишь частично — без внешних слоев. Чтобы добавить внешнии слои следует применить операцию наращивания, но т.к. мы до сих пор меняли только цветовую таблицу или окно плотности, наша маска видимости соответствует всем объему и наращивание ничего не даст. Поэтому перед наращиванием следует удалить невидимый объем, тогда наращивание будет применено к видимым внутренним слоям кости, что позволит добавить к ним внешнии слои. После этого следует изменить цветовую таблицу так, чтобы внешнии слои снова стали видимы — это завершит процесс сегментации костных структур.


Процесс сегментации костей в КТ исследовании

Сегментация по МПР, инструменты для работы с маской


Описание интерактивных инструментов сегментации до сих пор по большей части относилось к трехмерному представлению объема. Но как уже упоминалось выше, возможна также сегментация с использование МПР-срезов. Причем во многих случаях она предпочтительнее, так как позволяет быстрее получить результат.

Основным методом сегментации по МПР-срезам является: Наращивание объема сегментированной структуры в рамках заданной маски. Маска задается цветовой таблицей, причем в большинстве случаев эта цветовая таблица имеет простейший вид: делает видимыми воксели с плотностью выше или ниже заданного порога, либо в пределах границ указанного диапазона. Порог или границы выбираются так, чтобы соответствовать границам значений плотности сегментируемого объекта. В процессе сегментации значение порога или границ можно интерактивно менять.


Маска высокой плотности, низкой плотности, интервал

Базовым инструментов наращивания объема на МПР является уже описанный выше инструмент: это кисть (на данный момент в Инобитек DICOM-Просмотрщике реализованы варианты кисти в виде сферы и цилиндра заданного размера), но при редактировании в 3D этот инструмент в основном применяется как ластик, а не кисть. Восстановление по маске кистью на МПР теоретически позволяет сегментировать любую структуру максимально точно, но для объектов сложной формы это весьма трудоемкий процесс. Этот же инструмент можно применять как ластик не только в 3D, но и на МПР для удаления лишнего сегментированного объема. Кроме того, этим инструментом в режиме кисти можно восстанавливать удаленные воксели и в 3D.


Использование инструмента редактирования кистью

Но в 3D у этого инструмента есть еще один режим — это восстановление по маске. Логика его работы близка к той, которая используется на МПР: инструмент восстанавливает только те воксели, которые подсвечены маской. Но так как в 3D нет понятия маски самой по себе, в её качестве должна быть указана любая другая сегментированная структура (в том числе возможно указать базовый объем), не совпадающая с текущей сегментируемой структурой. Для выбора структуры, служащей маской, на панели редактирования есть специальная кнопка.


Использование инструмента редактирования кистью в 3D в режиме с восстановлением по маске

Ещё одним инструментом, который может быть использован при сегментации на МПР, является добавление связной области, ограниченной маской. Это в определенной степени аналог 3D инструмента, позволяющего сегментировать связную область, только в данном случае вместо удаления всего, кроме связной области, эта связная область добавляется к текущей сегментированной структуре. Этот инструмент также может быть использован и в 3D, если задана структура, являющаяся маской. Это удобный способ сегментации структур, состоящих из нескольких несвязанных областей — последовательно применяя инструмент к каждой из таких областей их все можно добавить к одной сегментированной структуре.


Сегментация изолированных областей на МПР

Инструмент наращивания региона (Region growing)


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

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

Наиболее простым принципом является равномерное наращивание во все стороны в пределах заданной маски. Но вследствие подобной простоты у этого принципа наиболее сильно выражена главная проблема инструмента: утечки. Утечкой называется сегментация за пределами требуемой области. Например, если два органа соединены одной или несколькими тонкими перемычками, при сегментации одного органа, через эти перемычки происходят утечки в другой орган, в результате чего становится затруднительно сегментировать один орган отдельно от другого.


Утечки в окружающие ткани и органы при сегментации печени

Поэтому в реальности используются принципы наращивания с более сложной логикой.
В Инобитек DICOM-Просмотрщике реализовано два принципа наращивания региона:
на основе так называемого Distance transform (к сожалению, русскоязычный вариант названия этого преобразования нам не известен, а прямой перевод, скорее, искажает смысл термина),
с использованием поверхностей уровня (level set).

Distance transform (DT) для объема определяется следующим образом: для бинаризированного объема (бинаризированного — означает, что каждый воксель может иметь только два значения 1 — видимый или 0 — невидимый) в каждом вокселе это преобразование дает значение равное расстоянию до ближайшего видимого вокселя. Способ измерения расстояния может быть разный, например, из-за простоты вычислений зачастую используется так называемое манхэттенское расстояние, равное сумме расстояний по каждому направлению. В нашем случае используется классическое евклидово расстояние, поэтому полностью преобразование называется Euclidean Distance Transform (EDT). При сегментации с использованием этого принципа объем бинаризируется на основе маски — фактически используется инверсия маски: воксели попадающие в маску имеют значение 0, остальные 1. Таким образом, EDT дает расстояние до границы маски в её пределах. Скорость наращивания пропорциональна значению EDT (но только начиная с некоторого порога, при этом зависимость экспоненциальная), в результате в тонких структурах рост идет медленнее чем в областях имеющих большой объем, но он также замедляется при приближении к границам области, что является нежелательным эффектом. Подход с использованием EDT позволяет уменьшить скорость утечек, но полностью устранить их не может. Главным преимуществом этого подхода является высокая скорость работы с приемлемым контролем утечек.


Наращивание региона на основе EDT

Гораздо лучше бороться с утечками помогает контроль кривизны поверхности фронта наращиваемого региона. Популярным подходом задания способа скорости роста региона является использование комбинации двух типов сил: внутренних и внешних. Внутренняя сила как раз определяется кривизной границы области в выбранной точке — чем больше кривизна, тем больше величина этой силы, а сама сила направлена также как вектор кривизны, то есть она стремится сгладить границу области. Внешние силы определяются свойствами изображения. В нашем случае используется внешняя сила на основе выбранного диапазона плотности: если значение плотности в конкретной точке лежит в выбранном диапазоне, то сила направлена на расширение области — её значение равно нулю для плотности на границах диапазона и увеличивается к центру, если значение плотности лежит за границами диапазона, то сила направлена на сужение области, а её величина тем больше, чем дальше плотность от границ диапазона. Таким образом, внешняя сила стремится удержать границы региона в пределах области с заданным диапазоном плотности, а внутренняя сила не дает границам региона сильно выгибаться — в частности препятствуя утечкам через тонкие структуры.

Реализация данного подхода основывается на методе поверхностей уровня. Он базируется на численном решении дифференциального уравнения особого вида. Решением уравнения является функция заданная в каждой точке объема и при этом зависящая от времени. Движение границ фронта определяются поверхностью, на которой эта функция принимает нулевое значение. Это гиперповерхность в четырехмерном пространстве, но в каждый момент времени существует ее сечение, являющееся поверхностью в трехмерном пространстве — поверхностью уровня, отсюда и название метода.

Сегментация, получаемая с помощью инструмента наращивания региона на основе поверхностей уровня, выглядит наиболее интуитивно. Она хорошо работает для объемных объектов, но не очень подходит для сегментации средних и мелких сосудов — кривизна их поверхности слишком велика.

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

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


Наращивание региона на основе метода поверхностей уровня

Сегментация с использованием нескольких томографических серий


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


Серия с контрастом, серия без контраста, вычитание

Другим примером может являться совместная визуализация артерий и вен с их отдельной сегментацией. В данном случае через небольшое время после введения контраста, он распространяется по артериям и в этот момент производится получение первой серии — артериальной фазы, в ней контрастом подсвечены артерии. Через некоторое время контраст частично вымывается из артерий, проходит через ткани и попадает в вены — в этот момент выполняется получение второй серии — венозной фазы, в ней контрастом будут подсвечены уже вены. Таким образом с использованием первой серии удобно выполнять сегментацию артерий, а с использованием второй — вен. Кроме того, если в венозной серии контраст не полностью вымылся из артерий его можно удалить, выполнив вычитание сегментации артерий из первой серии. Таким образом, для совместной визуализации вен и артерий необходимо использовать данные двух серий — артериальной и венозной фазы. А если произвести еще и сканирование до введения контраста, можно выполнить и удаление костей, в таком случае в совместной сегментации будет участвовать уже целых три серии.


Совместная визуализация артерий и вен с удалением костей

Для совместной визуализации нескольких серий в Инобитек DICOM-Просмотрщике есть специальный режим — режим совмещения серий. Совместить серии можно в специальном окне. После совмещения, в списке серий исследования появляется дополнительная виртуальная серия, открыв которую в требуемом режиме просмотра (поддерживаются все доступные режимы просмотра: 2D, МПР, 3D, виртуальная эндоскопия) можно визуализировать выбранные серии совместно. При просмотре такой серии появляется дополнительная панель — панель слоев. Каждый слой является одной из совмещенных серий. Текущий слой можно менять, выбирая соответствующий элемент на панели слоев. Каждая серия имеет свой список сегментированных структур, поэтому при смене текущего слоя текущий список структур тоже меняется. Все операции сегментации применяются к текущей выбранной сегментированной структуре текущего выбранного слоя. Исключением является ситуация, когда выбран основной объем в 3D. В этом случае операции вырезания полигоном и операции с кистью применяются сразу ко всем слоям — такое поведение более интуитивно, так как при вырезании логично ожидать, что будет удалено все в выбранной области.

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


Вычитание костей между слоями

Заключение


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

Комментарии (11)


  1. ArsenAbakarov
    10.05.2018 15:57

    Класс!


  1. Wilk
    10.05.2018 16:03

    Здравствуйте!

    Спасибо за статью!

    Вот так посмотришь на инструменты для сегментации томограмм которые делают другие, потом на те, которые делаешь сам, и понимаешь, что ты делаешь фигню.


    1. avdx Автор
      10.05.2018 16:22

      Добрый день!
      Такие мысли приходят наверное ко всем :) Не стоит отчаиваться, главное чтобы было интересно и кому-то нужно. Глядя на количество существующих подходов и методов, понимаешь как мало еще всего сделано. Область большая, возможно каждому удастся сделать что-то свое.


  1. Wilk
    10.05.2018 18:03

    У меня возник ряд вопросов:

    1. Есть ли у Вас опыт использования ITK для решения задач, связанных с сегментацией. Последние 3 года я смотрю в сторону данного фреймворка, но всё не решаюсь начать освоение.
    2. Какой вариант алгоритма марширующих кубов Вы применяете? Существует улучшенный вариант алгоритма, позволяющий получать более точные полигональные поверхности (если верить авторам). Интересно Ваше мнение по данному вопросу.
    3. Рассматривали ли Вы использование не одномерных передаточных функций? Сам я не пробовал данный подход (в решаемых задачах используется визуализация исключительно сегментированных данных, где для каждого элемента задан материал, определяющий параметры отображения), но было бы интересно узнать, насколько актуально его применение в реальном ПО.


    P.S. Публикации по ссылкам не самой первой свежести, но до других у меня на данный момент руки не дошли.


    1. avdx Автор
      10.05.2018 18:50

      1. ITK мы не используем. У нас библиотеки собственной разработки для воксельного рендера и для алгоритмов сегментации. Объективно про ITK сказать что-то вряд ли смогу, но субъективные впечатления, на основе того, что о ней знаю такие: библиотека весьма громоздкая и зачастую алгоритмы реализованы весьма неоптимально — по опыту сравнения с ПО, ее использующим, собственная реализация алгоритма часто оказывается в разы быстрее.
      2. Применяем стандартный алгорим. Более того есть собственная модификация алгоритма, генерирующая меньшее количество треугольников. Количество треугольников зачастую является одним из основных критериев — задача, ради которой строится сетка, может не тянуть большого количества элементов. Если же в приоритете именно точность сетки, то не вижу преимущества предложенного алгоритма. Он может дать более гладкую сетку, но не более точную — для увеличения точности лучше просто увеличить разрешение модели (уменьшить размер куба). В качестве примера — если в качестве границы принять определенное значение плотности, то при трилинейной интерполяции эта граница может проходить в произвольном месте вокселя. При увеличении разрешения сетка пройдет ближе к такой границе (т.е. абсолютная ошибка уменьшится), предложенный же алгоритм все равно сгенерирует сетку, проходящую через те же места на ребрах куба вокселя, что и стандартный, т.е. ошибка не уменьшится.
      3. Да, были попытки использовать градиент в качестве дополнительного измерения передаточной функции. Но честно сказать реальной пользы на практике от этого получить не удалось. Можно конечно поэксперементировать с реально многомерными данными, вроде МРТ в Т1/Т2, но есть сомнения, что удастся получить качественно другую визуализацию.


      1. Wilk
        10.05.2018 19:01

        Относительно ощущений о производительности ITK соглашусь — при попытке использовать ITK-SNAP для простой сегментации кости по уровню пришлось долго ждать расширения области. Почему нельзя было просто пройти по всему объёму без использования затравочных точек и сделать костью всё подходящее — не вполне понятно. Соблазняет только то, что алгоритмов реализовано, судя по всему, достаточно много и код, возможно, протестирован. Своя реализация, безусловно, лучше, но я в себе не ощущаю необходимых сил)


        1. avdx Автор
          10.05.2018 19:25

          У меня сложилось впечатление, что многие вещи в ITK и вообще в открытых библиотеках, реализованы людьми, по образованию являющимися скорее математиками, а не программистами. Это накладывает отпечаток, на код, ими написаный. Например, как мне кажется, если конструкции эквивалентны математически, для математика они выглядят абсолютно эквивалентными и в плане программирования. Так, например, вот здесь автор при реализации level set сегментации, в этом файле для возведения в квадрат использует функцию pow(x, 2.0). Простая замена на x*x дала ускорение всего кода в 2 или 3 раза (уже точно не помню). А вот статьи, описывающие алгоритм, зачастую, в таких случаях написаны весьма качественно. Т.ч. я предпочитаю собственную реализацию, на основе изучения статей.


  1. hamrammr
    11.05.2018 22:16

    Большое спасибо за отличный материал по достаточно редкой теме!

    У нас библиотеки собственной разработки для воксельного рендера и для алгоритмов сегментации.

    Интересно, а полигональные модели чем рендерите? В плане визуализации есть тот же опенсорсный VTK, был ли опыт его применения?


    1. avdx Автор
      11.05.2018 22:25

      Полигональный рендер на GL. Потом сливаем картинки через буфер глубины.
      С VTK примерно та же история, что с ITK — тоже большая и медленная, но это опять же косвенные впечатления — на основе ПО, ее использующего.
      Так сложилось, что в свое время была нужна библиотека воксельного рендера для одного проекта. В результате использовали библиотеку volpack. По мере развития проекта библиотеку дописывали, распараллелили и оптимизировали, но в определенный момент пришло понимание, что используемый в ней метод — shear-warp — тупиковый. На основе полученного опыта написали свою библиотеку с нуля уже на основе ray-tracing'а.


      1. hamrammr
        11.05.2018 22:33

        Снимаю шляпу, картинка на видео вышла очень красивой и отзывчивой. А если не секрет, какая конфигурация ПК, на котором снимались ролики?


  1. avdx Автор
    11.05.2018 22:58

    Конфигурация там достаточно хорошая: Core i7-6800K, 64G памяти, GeForce GTX 1070, но на самом деле в основном решает видеокарта. В библиотеке реализовано 3 способа рендера: программный рендер (на обычном процессоре), на CUDA и на OpenCL. CUDA — наиболее оптимальна. Даже слабенькая видеокарта дает результат лучше, чем самые мощные процессоры. На самом деле картинка и качество будет не сильно отличаться от того, что в видео, даже на бюджетных видеокартах.
    Вообще у нас на сайте выложены полнофункциональные версии нашего просмотрщика с триальным периодом в 1 месяц: здесь. Можно попробовать самому повторить все, что описано в статье.