Вырезаем кусочек из объема, не залезая в объем

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

Проекция с интерфейсом выбора РОИ

Проекция с интерфейсом выбора РОИ

Привет, Хабр! Сегодня хотим рассказать о том, как мы придумывали интерфейс для новой фичи в нашем реконструкторе SmartTomoEngine для данных компьютерной томографии (КТ) и что из этого получилось.

Напомним, что в КТ из набора проекций, зарегистрированных под разными углами, реконструируется трехмерное воксельное изображение объекта. Процесс реконструкции вычислительно затратный, а характерные размеры объема составляют 3000×3000x3000 вокселей, что даже при использовании усеченных типов данных, таких как float16, приводит к размерам ~50Gb. Для экономии памяти и для ускорения реконструкции в КТ полезной фичей является выбор произвольной области для реконструкции (или регион области инетереса РОИ). То есть мы не хотим реконструировать области, в которых заведомо нет объекта, насколько это возможно. Кроме того, выбор РОИ позволяет при необходимости реконструировать только небольшую часть объекта. Сама по себе фича достаточно сложная для поддержки, поскольку параметры объема могут зависеть от алгоритмов реконструкции и коррекции, а также от геометрии эксперимента, и поэтому она присутствует не во всех реконструкторах, да и мы какое-то время откладывали ее внедрение. 

В прошлом году наконец-то дошли руки, и после долгой отладки и интенсивного тестирования нового функционала встал вопрос с UI, поскольку раньше можно было задать только квадратную область в центре объема, для чего достаточно ползунков на одной проекции (Рис. 1. Старый интерфейс). Как пользователю задать параметры трехмерного объема до начала реконструкции, имея под рукой только проекции? Основными требованиями были интуитивная понятность интерфейса и отсутствие необходимости заходить в отдельные окна для задания параметров.

Рис. 1. Старый интерфейс программы. Оранжевые линии позволяли задавать квадратную область РОИ в центре объема. 

Рис. 1. Старый интерфейс программы. Оранжевые линии позволяли задавать квадратную область РОИ в центре объема. 

Для начала мы посмотрели:, а что делают конкуренты? Результат оказался не очень полезным. В одном популярном ПО для реконструкции область интереса задается по двум перпендикулярным проекциям. Плюсом такого решения была интуитивность, однако был и ряд недостатков. Во-первых, в случае сбитой геометрии двух проекций будет недостаточно и проблему с РОИ можно будет заметить только после реконструкции. Во-вторых, в этом случае необходимо создавать отдельный визард, иначе непонятно, как пользователь должен догадаться, на каких именно проекциях нужно двигать ползунки. В другом ПО коммерческого томографа РОИ задается по предварительной реконструкции в низком качестве. Главным минусом такого подхода является создание предварительной реконструкции. В привязке к конкретному томографу это выглядит адекватным решением, однако для универсального реконструктора для предварительной реконструкции также придется выполнить ряд коррекций. Таким образом, путь до конечного результата становится многостадийным (коррекция→предварительная реконструкция в низком разрешении→настройка коррекций в полном разрешении→полная реконструкция).

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

Рис. 2. Первая версия нового UI для задания РОИ

Рис. 2. Первая версия нового UI для задания РОИ

От клиентов получили пожелание подкрашивать все, что вылезает за границы объема, чтобы можно было проще выставить параметры. Сказано — сделано, собственно на гифке представлена текущая версия интерфейса на примере платы DDR3А (Рис. 3).

Рис. 3. Немного улучшенная версия нового UI для задания РОИ

Рис. 3. Немного улучшенная версия нового UI для задания РОИ

Главным пока что обнаруженным минусом оказалось то, что ощущение 3D от кубика настолько реалистичное, что новые клиенты принимают проекции за реконструкции. Чтобы вы сами убедились в различии проекции и трехмерного изображения реконструкции, добавили изображение реконструкции данной платы DDR3. На Рис. 4. его можно увидеть на правом нижнем изображении.

Рис.4. Реконструкция платы DDR3, В правом нижнем квадрате трехмерное изображение реконструкции.

Рис. 4. Реконструкция платы DDR3, В правом нижнем квадрате трехмерное изображение реконструкции.

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

© Habrahabr.ru