Pull to refresh

Comments 15

Во-вторых, с учетом того, что исследования обычно имеют размер примерно 512х512х512 вокселей, размер памяти, требуемой для хранения результатов сглаживания, в среднем будет занимать около 5 Гб. Чтобы сократить количество расходуемой памяти мы воспользовались пирамидой (scale space pyramid).

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


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

Есть такое) Не так страшна реализация пирамиды, как реализация алгоритмов на ней.

Не вполне понимаю, каким образом сократили расход памяти?
Пирамида нужна только для хранения результатов сглаживания. Грубо говоря, если сделать в лоб, то нужно памяти: sizeof(float)*512x512x512 (для сглаживания с sigma1) + sizeof(float)*512x512x512 (для сглаживания с sigma2) +… + sizeof(float)*512x512x512 (для сглаживания с sigma10). Ответ там же:
Идея заключается в том, что раз уж после каждого сглаживания значения интенсивности в соседних вокселях размываются и становятся примерно равными, то нет смысла хранить их все. Т.е. чем больше sigma, тем меньше нам потом потребуется просчитанных вокселей, чтобы восстановить сглаживание по всему объему.
В самой пирамиде все хранится по аналогии с рисунком без всяких тонкостей: для sigma1 512х512х512, для sigma2 256х256х256, для sigma3 128х128х128 и т.д. Т.е. сокращение памяти идет за счет того, что само сглаживание имеет некоторые особенности. Scale space pyramid — довольно стандартное решение, можно посмотреть в интернете/википедии. Сжатие самих данных — это уже следующий шаг, но он не потребовался.
Мипмапы используются для избегания шума, который возникает, если отрисовать текстуру в уменьшенном виде «пиксель-в-пиксель» на экране. В нашем случае пирамида нужна, чтобы потом получаемые значения производных после сглаживания максимально были приближены к этим же значениям, но получаемым без использования пирамид. Тут никак не участвуют расстояние до камеры или разрешение экрана, но зато нужна точность при вычислении производных, что привносит свои тонкости в построение пирамиды. Хотите, проведите аналогию, но, как мне кажется, она будет довольно грубой.

А, ясно. Вы сокращаете память с n*sizeof(float)*512^3 (n>1, n in Z) до (8/7)*sizeof(float)*512^3. Я подумал, что с sizeof(float)*512^3 до величины, меньшей этого значения.

Уж не знаю, как вы так нагрешили раньше, но конкретно эта статья — огонь! Обязательно пишите еще.
А теперь все то же самое на бис для ультразвука :) CT/MRT конечно проще…
Делаем небольшой шаг в направлении сосуда и попадаем в новый воксель

Если пользователь отмечает две точки сосуда, то вы можете методом поиска кратчайшего пути найти весь сосуд между ними. Это ещё решит проблему с "разрывами" сосудов. Мы подобное делали на сходных объёмах данных, правда в 2D изображениях.
Может быть будет возможно отказаться от сглаживания гауссианами, я так понимаю, что сосудистость резко возрастает к центру, а алгоритму поиска пути только и нужно, чтобы сосуд резко выделялся на фоне. Тогда линия пойдёт ровно по центру.

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


Индекс похожести на дорогу (чем чернее, тем лучше)


Увеличенный фрагмент дороги


Ух ты ж елки-палки, вот где специалисты-то водятся! Я вообще-то сервис-инженер, в частности по исследовательским рентгеновским томографам для мелких лабораторных животных. От человеческих томографов наши отличаются разрешением в единицы микрон на воксель и небольшим сканируемым объемом (труба 80мм диаметром). Иногда пользователи вопрос задают типа «а в какой программе можно мышкой щелкнуть и весь скелет автоматически выделить», да и самому иногда результаты обрабатывать приходится. А программа-то вот она, и не буржуйская :) Сколько оно у вас примерно стоит? А то исследователи обычно небогатые, по сравнению с медиками.
У нас несколько версий. Одна из них вообще бесплатная, но функционал также ограничен. Т.к. я не в курсе всех тонкостей, то лучше всего написать на почту (Наш сайт->Компания->Контакты). Ее почти круглосуточно мониторит специальный человек, и он с радостью отвечает на любые вопросы. В идеале надо подробно написать какие именно функционал и возможности вам нужны. Вариант два: просто скачать версию с сайта (она будет полноценной в течение месяца), а когда кончится триальный период, точно также спросить на почте «сколько будет стоить версия с этим и вот тем?».
Нет, там на входе сетка и центральная линия ищется за счет контуров. С нашими входными данными делается ровно наоборот: только после построения центральной линии можно найти контуры (стенки) сосуда. Также задача найти контур в объеме нетривиальна и нормально не решается через классический edge detection.
Замечательная статья. Метод знаком, но с технической стороны, без названия. Не могли бы Вы дать источник метода?
Спасибо! У метода нет общепринятого названия, как вариант: Multi-Scale Vessel Segmentation Using Hessian Matrix Enhancement, ключевые слова Vessel Hessian Matrix. Полноценного источника также не существует: везде дается теория, типа «сглаживайте и стройте матрицу Гессе», но о конкретных реализациях или умалчивают, или они различаются. В итоге нужно перелопатить 100500 сайтов и pdf-фок, чтобы найти рабочее решение для каждого этапа вычислений.
Sign up to leave a comment.