2017-01-07 7 views
1

Что такое лучшая и низкая память для чтения B & W стек изображений, который содержит значения 0/1 для тома ISO и записывает его в булевский массив вокселей? то есть 2k изображений с квадратными пикселями 2k обеспечивают 800 Мбайт булевых.Напишите черно-белый стек изображений в булевский 3D-воксельный массив?

Я начал писать 3D boolan булева массив [г, у, х] ... и он не работает?! Я нужен массив 2D массивы булевых [х, у]

(как?) II уже написал программу, которая пересекает стек изображений через X, Y, чтобы обнаружить край тома, то есть каждую точку в пространстве, где изображение изменяется от 0 до 1 и от 1 до 0, и оно дает мне вершины и нормали объектов для пуассоновского зацепления диска. Теперь мне нужно также пройти по Z, не загружая 2000 изображений N раз.

В вокселе может быть до 8 миллиардов вокселов.

Кому это нужно? Как я могу объявить массивы в C/C#/JS?

Спасибо за любые советы.

+0

Есть ли данные в каждом вокселе в объеме? Для [структуры данных вокселей] имеется много результатов (https://www.google.ca/search?q=voxel+data+structure&oq=voxel+data+structure&aqs=chrome..69i57j69i60l2j0l3.3551j0j4&sourceid=chrome&ie=UTF- 8). Вы можете извлечь выгоду из хранения ваших данных в каком-то дереве. Например: [octree] (https://en.wikipedia.org/wiki/Octree). – Jephron

+0

Спасибо за предложение. Octree очень хорош для быстрых живых представлений подзонов массива, я только хочу прочитать каждый воксель пространства один раз, чтобы найти контур объема вокселя и преобразовать его в вершины. Я нашел быстрый путь. –

ответ

2

Задача состоит в том, чтобы иметь наименьший тип данных для представления значений вкл/выкл для каждого вокселя. Упростите его в пространстве вокселей 10x10x10.

Его прекрасно, чтобы сделать 1D булева массива длиной 1000, т.е.

var myvoxels : boolean[]= new boolean[x*y*z]; 

затем Acces его с помощью функции:

function boolreturn(x,y,z) : boolean 
{ 
    return myvoxels[ z*10*10+y*10+x] 

} 

поэтому последние воксельного размера 10x10x10 имеет позицию массива 900 + 90 + 9 = 999.

он работает одинаково с 100 вокселями и с 8 миллиардами из них.

Я думал, что это было сложнее, чем при использовании 1-го массива becaues, я преобразовал код маршевых кубов, который читает каждое пространство по модулю и делит/плавать, чтобы знать, где объект находится в массиве 1d, который может быть мысленно налогообложение и медленное кодирование в 3D. вышеизложенное должно облегчить задачу.

+0

Максимальный размер массива может быть 2147483647 = двоичный 1111111111111111111 = шестнадцатеричный 7FFF, FFFF16, который является максимальным 32-битным целым числом. то строка z массива может функционировать с шагом каждые 2147 миллионов, и можно использовать библиотеки, у которых есть массивы, выходящие за пределы целочисленного предела. в противном случае это число переполнения. 4 2bn массивы дают более 2000 кубических мест, используя около 10 гигов. –