2017-01-07 12 views
1

ISOボリュームの0/1値を含むB & Wイメージスタックを読み込み、ブール値のボクセル配列に書き込むための最良かつ低メモリのオプションは何ですか? 2kピクセルの2k画像は、ブール値800MBを提供する。ブーリアン3Dボクセル配列に白黒画像スタックを書き込む?

は、私は3D boolan配列ブール[X Z、Y、]を書き始め...そして、それは仕事をdoesnt:?!(?どのように)私は

2Dアレイブール[X、Y]の配列を必要としますIIは、ボリュームの端、つまり画像が0から1、1から0に変化する空間のすべての点を検出するために、X、Yを通して画像のスタックを横切るプログラムを書いています。ポアソンディスクのメッシュ化のためのオブジェクトの法線との間の関係を示す。私は今2000回の画像をN回ロードすることなく、Zでトラバースする必要があります。

ボクセルは合計で最大80億ボクセルになる可能性があります。

これはどちらが必要ですか?どのように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)。何らかの種類のツリーにデータを格納することでメリットが得られます。例:[オクトリー](https://en.wikipedia.org/wiki/Octree) – Jephron

+0

提案していただきありがとうございます。オクツリーは配列のサブゾーンを素早くライブ表現するのには非常に優れていますが、空間のすべてのボクセルを一度読み込み、ボクセルボリュームの輪郭を見つけて頂点に変換したいだけです。私は速い方法を見つけた。 –

答えて

2

課題は、各ボクセルのオン/オフ値を表す最小のデータ型を持つことです。 10×10×10のボクセル空間に簡略化します。

機能とそれをアクセスもするすなわち

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

、その後、長さ1000の1Dブール配列を作るために、その罰金:

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

} 

ので、サイズ10x10x10の最後のボクセルが配列位置を持っています900 + 90 + 9 = 999.

100ボクセルと80億ボクセルで同じ動作をします。

私は、すべての空間をモジュロとして読み込み、オブジェクトが1d配列のどこにあるのか知るためにdevide/floatという、マーチング・キューブ・コードを変換したので、1d配列を使用するよりも複雑であると考えました。 3Dでコード化するのが遅くなります。上記は簡単にする必要があります。

+0

配列の最大サイズは2147483647 =バイナリ1111111111111111111 = 16進数の7FFF、最大32ビット整数のFFFF16になります。配列のz行は2億1,700万分の1ステップで機能し、整数の限界を超えた配列を持つlibraresを使用することができます。それ以外の場合は数値オーバーフローです。 4 2bnアレイは、約10gigsを使用して2000以上の立方体空間を与える。 –

関連する問題