Comments 11
UFO just landed and posted this here
Здравствуйте!
Спасибо за статью!
Вот так посмотришь на инструменты для сегментации томограмм которые делают другие, потом на те, которые делаешь сам, и понимаешь, что ты делаешь фигню.
Спасибо за статью!
Вот так посмотришь на инструменты для сегментации томограмм которые делают другие, потом на те, которые делаешь сам, и понимаешь, что ты делаешь фигню.
+2
У меня возник ряд вопросов:
P.S. Публикации по ссылкам не самой первой свежести, но до других у меня на данный момент руки не дошли.
- Есть ли у Вас опыт использования ITK для решения задач, связанных с сегментацией. Последние 3 года я смотрю в сторону данного фреймворка, но всё не решаюсь начать освоение.
- Какой вариант алгоритма марширующих кубов Вы применяете? Существует улучшенный вариант алгоритма, позволяющий получать более точные полигональные поверхности (если верить авторам). Интересно Ваше мнение по данному вопросу.
- Рассматривали ли Вы использование не одномерных передаточных функций? Сам я не пробовал данный подход (в решаемых задачах используется визуализация исключительно сегментированных данных, где для каждого элемента задан материал, определяющий параметры отображения), но было бы интересно узнать, насколько актуально его применение в реальном ПО.
P.S. Публикации по ссылкам не самой первой свежести, но до других у меня на данный момент руки не дошли.
0
1. ITK мы не используем. У нас библиотеки собственной разработки для воксельного рендера и для алгоритмов сегментации. Объективно про ITK сказать что-то вряд ли смогу, но субъективные впечатления, на основе того, что о ней знаю такие: библиотека весьма громоздкая и зачастую алгоритмы реализованы весьма неоптимально — по опыту сравнения с ПО, ее использующим, собственная реализация алгоритма часто оказывается в разы быстрее.
2. Применяем стандартный алгорим. Более того есть собственная модификация алгоритма, генерирующая меньшее количество треугольников. Количество треугольников зачастую является одним из основных критериев — задача, ради которой строится сетка, может не тянуть большого количества элементов. Если же в приоритете именно точность сетки, то не вижу преимущества предложенного алгоритма. Он может дать более гладкую сетку, но не более точную — для увеличения точности лучше просто увеличить разрешение модели (уменьшить размер куба). В качестве примера — если в качестве границы принять определенное значение плотности, то при трилинейной интерполяции эта граница может проходить в произвольном месте вокселя. При увеличении разрешения сетка пройдет ближе к такой границе (т.е. абсолютная ошибка уменьшится), предложенный же алгоритм все равно сгенерирует сетку, проходящую через те же места на ребрах куба вокселя, что и стандартный, т.е. ошибка не уменьшится.
3. Да, были попытки использовать градиент в качестве дополнительного измерения передаточной функции. Но честно сказать реальной пользы на практике от этого получить не удалось. Можно конечно поэксперементировать с реально многомерными данными, вроде МРТ в Т1/Т2, но есть сомнения, что удастся получить качественно другую визуализацию.
2. Применяем стандартный алгорим. Более того есть собственная модификация алгоритма, генерирующая меньшее количество треугольников. Количество треугольников зачастую является одним из основных критериев — задача, ради которой строится сетка, может не тянуть большого количества элементов. Если же в приоритете именно точность сетки, то не вижу преимущества предложенного алгоритма. Он может дать более гладкую сетку, но не более точную — для увеличения точности лучше просто увеличить разрешение модели (уменьшить размер куба). В качестве примера — если в качестве границы принять определенное значение плотности, то при трилинейной интерполяции эта граница может проходить в произвольном месте вокселя. При увеличении разрешения сетка пройдет ближе к такой границе (т.е. абсолютная ошибка уменьшится), предложенный же алгоритм все равно сгенерирует сетку, проходящую через те же места на ребрах куба вокселя, что и стандартный, т.е. ошибка не уменьшится.
3. Да, были попытки использовать градиент в качестве дополнительного измерения передаточной функции. Но честно сказать реальной пользы на практике от этого получить не удалось. Можно конечно поэксперементировать с реально многомерными данными, вроде МРТ в Т1/Т2, но есть сомнения, что удастся получить качественно другую визуализацию.
+2
Относительно ощущений о производительности ITK соглашусь — при попытке использовать ITK-SNAP для простой сегментации кости по уровню пришлось долго ждать расширения области. Почему нельзя было просто пройти по всему объёму без использования затравочных точек и сделать костью всё подходящее — не вполне понятно. Соблазняет только то, что алгоритмов реализовано, судя по всему, достаточно много и код, возможно, протестирован. Своя реализация, безусловно, лучше, но я в себе не ощущаю необходимых сил)
0
У меня сложилось впечатление, что многие вещи в ITK и вообще в открытых библиотеках, реализованы людьми, по образованию являющимися скорее математиками, а не программистами. Это накладывает отпечаток, на код, ими написаный. Например, как мне кажется, если конструкции эквивалентны математически, для математика они выглядят абсолютно эквивалентными и в плане программирования. Так, например, вот здесь автор при реализации level set сегментации, в этом файле для возведения в квадрат использует функцию pow(x, 2.0). Простая замена на x*x дала ускорение всего кода в 2 или 3 раза (уже точно не помню). А вот статьи, описывающие алгоритм, зачастую, в таких случаях написаны весьма качественно. Т.ч. я предпочитаю собственную реализацию, на основе изучения статей.
0
Полигональный рендер на GL. Потом сливаем картинки через буфер глубины.
С VTK примерно та же история, что с ITK — тоже большая и медленная, но это опять же косвенные впечатления — на основе ПО, ее использующего.
Так сложилось, что в свое время была нужна библиотека воксельного рендера для одного проекта. В результате использовали библиотеку volpack. По мере развития проекта библиотеку дописывали, распараллелили и оптимизировали, но в определенный момент пришло понимание, что используемый в ней метод — shear-warp — тупиковый. На основе полученного опыта написали свою библиотеку с нуля уже на основе ray-tracing'а.
С VTK примерно та же история, что с ITK — тоже большая и медленная, но это опять же косвенные впечатления — на основе ПО, ее использующего.
Так сложилось, что в свое время была нужна библиотека воксельного рендера для одного проекта. В результате использовали библиотеку volpack. По мере развития проекта библиотеку дописывали, распараллелили и оптимизировали, но в определенный момент пришло понимание, что используемый в ней метод — shear-warp — тупиковый. На основе полученного опыта написали свою библиотеку с нуля уже на основе ray-tracing'а.
0
Конфигурация там достаточно хорошая: Core i7-6800K, 64G памяти, GeForce GTX 1070, но на самом деле в основном решает видеокарта. В библиотеке реализовано 3 способа рендера: программный рендер (на обычном процессоре), на CUDA и на OpenCL. CUDA — наиболее оптимальна. Даже слабенькая видеокарта дает результат лучше, чем самые мощные процессоры. На самом деле картинка и качество будет не сильно отличаться от того, что в видео, даже на бюджетных видеокартах.
Вообще у нас на сайте выложены полнофункциональные версии нашего просмотрщика с триальным периодом в 1 месяц: здесь. Можно попробовать самому повторить все, что описано в статье.
Вообще у нас на сайте выложены полнофункциональные версии нашего просмотрщика с триальным периодом в 1 месяц: здесь. Можно попробовать самому повторить все, что описано в статье.
0
Only those users with full accounts are able to leave comments. Log in, please.
Сегментация томографических данных