Как стать автором
Обновить

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

НЛО прилетело и опубликовало эту надпись здесь
Здравствуйте!

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

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


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

Интересно, а полигональные модели чем рендерите? В плане визуализации есть тот же опенсорсный VTK, был ли опыт его применения?
Полигональный рендер на GL. Потом сливаем картинки через буфер глубины.
С VTK примерно та же история, что с ITK — тоже большая и медленная, но это опять же косвенные впечатления — на основе ПО, ее использующего.
Так сложилось, что в свое время была нужна библиотека воксельного рендера для одного проекта. В результате использовали библиотеку volpack. По мере развития проекта библиотеку дописывали, распараллелили и оптимизировали, но в определенный момент пришло понимание, что используемый в ней метод — shear-warp — тупиковый. На основе полученного опыта написали свою библиотеку с нуля уже на основе ray-tracing'а.
Снимаю шляпу, картинка на видео вышла очень красивой и отзывчивой. А если не секрет, какая конфигурация ПК, на котором снимались ролики?
Конфигурация там достаточно хорошая: Core i7-6800K, 64G памяти, GeForce GTX 1070, но на самом деле в основном решает видеокарта. В библиотеке реализовано 3 способа рендера: программный рендер (на обычном процессоре), на CUDA и на OpenCL. CUDA — наиболее оптимальна. Даже слабенькая видеокарта дает результат лучше, чем самые мощные процессоры. На самом деле картинка и качество будет не сильно отличаться от того, что в видео, даже на бюджетных видеокартах.
Вообще у нас на сайте выложены полнофункциональные версии нашего просмотрщика с триальным периодом в 1 месяц: здесь. Можно попробовать самому повторить все, что описано в статье.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий