Я закодировал полную реализацию октодерева без особой оптимизации для трехмерной реконструкции, однако древовидная структура содержит слишком много указателей и не может поддерживать более 256^3 вокселей.
Теоретически, для недревовидной структуры, если бы я использовал vector<bool>
, который использует ~ 1 бит на воксель, это было бы более приемлемым, потому что недревовидная структура могла бы поддерживать 2k^3 с 8 ГБ памяти.
Однако оптимизированная структура октодерева должна быть такой же или лучше, поскольку:
Не нужно сохранять каждый воксель, так как уплотнение позволяет сжимать близлежащие воксели с одинаковым значением.
Он не должен использовать слишком много указателей, поскольку сами указатели уже используют изрядное количество байтов.
Октодерево должно иметь довольно низкое соотношение узел/воксель.
Для полного октодерева номер узла может быть рассчитан как (s^3 -1) / 7
. s
— это разрешение объема, которое является степенью числа 2. Например, если s = 4
, мне потребуется 1 + 8 = 9
узлов в октодереве для представления сетки вокселов 4x4x4.
Кто-нибудь знает о реализации октодерева на С++, которая соответствует этим спецификациям?