К вокселизации CAD-моделей по ADF

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

Алгоритмическое обеспечение метрологических исследований можно рассмотреть с двух точек зрения. Прежде всего, данные исследования необходимо должным образом подготовить для последующей диагностики. Как только данные готовы, их можно интерпретировать, например, визуально (с использованием таких техник, как объемный рендеринг), либо автоматически (скажем, при помощи нейросетей). Сегодня мы поговорим о подготовке данных, а конкретно — о равномерной вокселизации CAD-моделей с целью их дальнейшего исследования «объемными методами».

Растеризация ADF путем сэмплирования в узлах регулярной сетки.

Будем исходить из того, что адаптивное поле дистанций (ADF, Adaptive Distance Field) уже построено, то есть в нашем распоряжении имеется разреженное октодерево со скалярными значениями в каждом узле. Для изотропной растеризации ADF можно использовать элементарную технику сэмплирования. Будем нарезать ADF, как кубики для салата, в трех плоскостях, сэмплируя в каждой точке значение скалярного поля. Благодаря наличию ADF, выступающего в роли кэша потенциальной функции, про наличие самой исходной функции на этапе растеризации можно забыть. Значение функции в любой точке подразбиваемой области определено трилинейной интерполяцией ранее подсчитанных значений в соответствующем вокселе. Это избавляет нас от необходимости производить большое количество трудоемких вычислений.

Объемное представление тестовой детали ANC-101. Визуализация срезов при помощи объемного рендеринга инструментарием OPEN CASCADE.

На что следует обратить внимание при реализации такого подхода? Во-первых, мы не пытаемся убрать адаптивность из самой структуры данных ADF, поскольку это приведет к полному разбиению октодерева. Представить равномерную вокселизацию можно простым массивом. Во-вторых, данный подход не слишком хорош с точки зрения накладных расходов по памяти. Помимо хранения собственно ADF, необходимо зарезервировать значительный блок памяти для результирующего массива (если только мы не сбрасываем воксели в файловую систему непосредственно в ходе растеризации). Сохранение же в едином массиве всего поля дистанций ведет к взрывному росту потребляемой памяти при уменьшении величины зерна. Так, уменьшение размера вокселя в N раз умножает количество вокселей в N^3 раз. Если для хранения вокселизации с шагом 0.1 [mm] требовалось, например, 1.5ГиБ памяти, то с уменьшением шага до 0.025 [mm] потребление памяти увеличится в 4^3 = 64 раза и составит 96ГиБ.

Объемное представление тестовой детали ANC-101. Визуализация срезов анимацией растровых изображений.

Растеризация ADF — ресурсоемкий процесс. Для его обеспечения требуется, вероятно, дополнительный менеджер памяти, позволяющий выделять блоки ограниченного размера. После заполнения каждого блока данными сэмплирования (этот процесс хорошо поддается параллельной обработке), данные сбрасываются в файловую систему, и блок переиспользуется для вычисления новой порции данных.

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