OpenVDB гауссово размытие

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

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

Если я суммирую абсолютную величину интенсивностей в узкой полосе, я получу:

  • Presmooth: 3.20083e + 06
  • Postsmooth: 302976

Таким образом, существует коэффициент потери интенсивности ~10 для узкой полосы из 5 вокселей на сфере в ограничивающем кубе размером 200x200x200. Это может показаться много, для чего должна быть операция сохранения интенсивности (она должна использовать отраженные граничные условия на краях?). Я не могу найти много в документации о том, как обрабатываются граничные условия, или как здесь можно изменить обработку.

  • Как я могу предотвратить эту потерю интенсивности, которая, как мне кажется, делает тест на коллапс сферы очень неточным?

Сфера построена из приблизительного представления сферы на основе вокселей (поскольку в конечном итоге мои окончательные данные основаны на изображениях, поэтому она представлена ​​в виде вокселей, а не неявных поверхностей). Я строю набор уровней с помощью tools::levelSetRebuild(), поэтому активна только узкая полоса - оставшиеся вокселы должны быть неактивными или фоновыми.


Я пишу здесь, а не на форуме openvdb, так как там, похоже, нет возможности размещать сообщения без аккаунта Google (создание аккаунта не работает... очевидно, я не человек)

0 ответов

Другие вопросы по тегам