Что касается марширующих кубов, у меня есть некоторые сомнения относительно его алгоритма и реализации. Я просмотрел отличную статью Пола Бурка о Marching Cubes, а также доступный исходный код на сайте, но я все еще сталкивался с некоторыми проблемами с точки зрения понимания, а также того, как реализовать алгоритм по-своему. Вопросы как ниже:
Размер Gridcell — Я прочитал, что размер Gridcell влияет на качество получаемой 3D-модели. Например, если у меня есть стопка рентгеновского изображения, установленная с размером (200 * 200 * 200), то из двух смежных фрагментов изображения будет построена плита ячеек сетки. Таким образом, общее количество ячеек сетки в слэбе будет равно (200-1) * (200-1), при этом каждый угол ячейки сетки соответствует значению / плотности пикселей изображения. Это правильно?? Кроме того, как мы реализуем различные размеры для gridcell?
Размер вокселя — я прочитал несколько ссылок на Marching Cubes, и мне кажется, я не могу понять, как размер вокселя учитывается в алгоритме. Пожалуйста, поправьте меня, если я ошибаюсь, в моем случае, промежуток между соседними слоями изображений составляет 1 мил; таким образом, как я могу позаботиться о тех, кто в походных кубах, или это тупик ?? Заботился ли он о размере Gridcell? (Предположение: размер одного пикселя в его координате xy составляет 19 микрон, в то время как разрыв / z составляет 25,4 микрона / 1 мил в длину)
Координаты угла Gridcell (Вершины Координаты куба) — я пытаюсь назначить координаты углов ячеек сетки с индексом i j k путем вложенного зацикливания измерения набора изображений (200 * 200 * 200). Это правильно?? Есть ли более быстрый способ сделать это ??
Примечание: я видел реализацию MC в VTK, но мне довольно сложно его переварить, так как это зависит от некоторых других классов VTK.
Много вопросов. Я собираюсь дать несколько указаний. Первый из 200 ^ 3 — довольно маленький набор данных для ct! как насчет 1024 ^ 3? 🙂
Походные кубики построены для регулярных сеток. Таким образом, более влажные данные определены в вершинах куба или центрах действительно не имеет значения: просто сдвиньте на половину размера куба! Если у вас есть нерегулярные данные, используйте что-то другое или сначала измените выборку на обычную сетку.
Вы также, кажется, упускаете «марширующую» часть: идея состоит в том, чтобы найти один куб с поверхностью и заливкой оттуда. Кубы, которые находятся снаружи или внутри, останавливают поиск. Таким образом, на большинство кубов в вашей огромной регулярной сетке даже не нужно смотреть.
Масштабирование до реальных единиц должно быть последним шагом. Думайте о входной громкости как нормализованной к 1x1x1. Затем масштабируйте выходные вершины в физических единицах. У вас есть данные, которые у вас есть. Любая повторная выборка должна быть сделана до во время реконструкции или фильтрации. Ему нет места на этапе геометрии.
Я не уверен, что понимаю последний вопрос, но одна вещь, которая действительно важна для дальнейшей обработки, — это создание связанной индексированной сетки. Есть одна важная хитрость, которая заключается в том, чтобы просто сохранить вид хэш-таблицы предыдущего слайса / строки / соседа. Таким образом, вы можете быстро найти уже созданные вершины и повторно использовать их индекс. Результатом должна быть связная сетка с уникальными вершинами. Это вы можете затем использовать в любом виде обработки геометрии.