問題タブ [volume-rendering]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
292 参照

opengl - これはボリューム レンダリングの結果です。他の 3D オブジェクトとやり取りする方法

CUDA でレイキャスティングを使用してボリューム レンダーを実装しました。ここで、他の 3D オブジェクト (私の場合は 3D 地形など) をシーンに追加し、ボリューム レンダリングの結果と相互作用させる必要があります。例えば、ボリュームレンダリング結果を地形に重ねて移動した場合、ボリュームレンダリング結果の重なっている部分をクリッピングするなど、ボリュームレンダリング結果を変調したい。

ただし、ボリューム レンダーの結果は、レイが累積した色から得られるため、深度のない 2D 画像になります。そのため、相互作用を実装する方法は私を非常に混乱させます。誰かが私にヒントを与えることができますか?

0 投票する
1 に答える
3119 参照

cuda - CUDAカーネル関数で、tex3Dが値を返さないのはなぜですか?

ここでは、2つの異なるバージョンのコードがあります。

1つ目は、CUDASDKからの完全なCUDAプログラムです。カーネルでは、tex3Dがうまく機能します。

2番目のバージョンは、多くのOpenGL関数とOpenGLテクスチャを備えたより複雑です。その.cuファイルは最初のものと同じです。ただし、cudaMalloc変数を使用して、同じカーネル関数でtex3Dから値を取得しましたが、tex3D関数は何も返さないことがわかりました。実際、2つのプログラムは、以下のコードと同じ方法で3Dテクスチャを作成します。

以下のコードは、tex3Dを呼び出すカーネル関数です。実際には、レイキャスティングの実装であるCUDASDKvolumeRenderのカーネルとまったく同じです。

これらのコードのほとんどはCUDASDKvolumeRenderからのものであり、私の最初のバージョンのコードでうまく機能するため、これらのコードは優れていると思います。

しかし、2番目のバージョンでtex3Dが突然無効になる理由がわかりません。たぶん、他のいくつかのOpenGLテクスチャがいくつかの悪影響を及ぼしますか?

0 投票する
1 に答える
8070 参照

matlab - Matlabのslice()関数が期待どおりに機能しない

次のコード行を使用して、 13のz場所に離散2D画像をプロットしたいと思います。[4:4:52]

ただし、以下に示すように、13の個別の場所ではなく、1から13までの13の連続プロットを取得します。

ここに画像の説明を入力してください

誰かが私の間違いを教えてもらえますか?[4:4:52]画像をz軸上の位置にスタックしたい。ありがとう。

0 投票する
1 に答える
889 参照

opengl - オブジェクト順序の空きスペースをスキップするボリューム レンダリングを実装する

Scenegraph 2009 コースノートのAdvanced IlluminationTechniques for GPU-Based Volume Raycastingからいくつかのボリューム レンダリング テクニックを学びます。以下の画像のように、バウンディング ボックスを多数の小さなブロックにラスタライズする、オブジェクト順序の空のスペース スキップに興味があります。医療用ボリュームデータ

これを実装する方法を知りたいですか?によって octree ? または他のテクニック?オブジェクト順序の空きスペースをスキップせずに、単純なレイ キャスティング ボリューム レンダリング プログラムを実装しました。コード スニペットまたは疑似コードが大いに役立ちます。

0 投票する
1 に答える
289 参照

opengl - ボリュームレンダリング:インタラクティブ性を維持する

OpenGL、GLSL、C++を使用してレイキャスティングボリュームレンダリングを実装しようとしています。ご存知のとおり、これは計算量が多く、視点の移動やズームイン、ズームアウトなどの優れたインタラクティブ機能を実現するのは非常に困難です。相互作用中の反応性を達成するためにパラメーターを変更するための適応スキームを使用できます。

変更できるパラメータの1つは、画像サンプル距離です。これは、隣接する光線間の画像平面上のx方向とy方向の距離です。

レイキャスティングボリュームレンダリングを行う場合、最初に立方体を描画し、次にその背面(出口点)と前面(入口点)をレンダリングしてから、レイキャスティングパスを実行できます。

私の質問は:画像サンプル距離を減らす方法は?

0 投票する
1 に答える
419 参照

opengl - テクスチャのパッキングによる大容量データのボリュームレンダリング

GPU メモリを超える大規模なデータ セットの GPU ベースのレイ キャスティング ボリューム レンダリングを実装したいと考えています。私はこのようにしようとします:

(1)まず、ボリュームを同じ大きさのレンガに分割します。

(2)次に、伝達関数に従って、各ブリックが透明かどうかを決定します。

(3)次に、不透明なブリックを「Packed-Texture」に保存します。レイキャスティング レンダリング中にサンプリングするために、「Index-Texture」と呼ばれる別のテクスチャを作成します。これは、ブリック インデックスを Packed-Texture に保存します。

シェーダーでレンダリング中にサンプリングを行う場合、まずサンプル ポイントがどのブリック内にあるかを計算します。次に、Index-Texture にアクセスしてサンプル ポイントの値を取得します。ただし、デフォルトでは値は補間された後であり、そうではありません。 Packed-Texture のレンガのインデックスを正しく修正しました。

だから、私の質問は次のとおりです。レイキャスティングレンダリング中にサンプリングを行うとき、インデックステクスチャからパックテクスチャのブリック (サンプルポイントがある) のインデックスを正しく取得する方法は?

0 投票する
1 に答える
276 参照

opengl - フラット ブロッキング マルチ解像度ボリューム レンダリング

大量のデータをレイ キャスティング ボリューム レンダリング システムにロードするために、フラット ブロッキング マルチ解像度戦略を実装したいと考えています。サブブロックの重要性。

私は論文を読んで、次のようにできると言っています:

内部データの変化率を分析することにより、ブロックの重要性を示すために、各ブロックに特別な LOD を決定することができます。

画像 1: 2D テクスチャを使用したフラット ブロッキング

ここに画像の説明を入力

フラット ブロッキング戦略によれば、ブロックの次元は 2 の累乗でなければなりません。つまり、ボリュームを 2^n * 2^n * 2^n のサイズで分割します。したがって、各ブロックには n+1 レベルの詳細があります(内部データの変動がブロックの重要性の数学的基礎であるため、ブロックの詳細の各レベルは以下の式で修飾できます。

式1 :

ここに画像の説明を入力

これは i 番目のブロックの変動です。avgi は特定の親ブロックの i 番目のサブブロックの 2^(3 * max_l) スカラー値の平均を意味し、max_l は親ブロックの最高レベルの詳細を意味します。 l は現在の分析の詳細レベルを意味します。Sj はスカラー値を意味します。最後に、スカラー値の変化を [0,1] の範囲に制約付きで作成します。

私の質問は、ある親ブロックの i 番目のサブブロックに 2^(3 * max_l) ボクセルがあると言われているように、画像 1 のサブブロックと親ブロックは何ですか?さらに、式からすると、2^(3 * (max_l - l)) 個のボクセルがあるようです。

0 投票する
2 に答える
2525 参照

opengl - 2D 画像のスタックを 3D 画像に変換、ボリューム レンダリング

CT データのテクスチャ ベースのボリューム レンダリングを実行したいと考えています。opengl (本当に jogl) で 3d テクスチャとして使用したい 2d CT 画像のスタックがあります。パラメータの変更を表示するとシフトするポリゴン プロキシ ジオメトリを使用する方法で行う必要があります。2D 画像を 1 つの 3D テクスチャに変換するにはどうすればよいですか? opengl がどのように 3D 画像をフォーマットすることを期待しているかについて、私は何も見つけることができませんでした。私はこれを見ました: https://stackoverflow.com/questions/13509191/how-to-convert-2d-image-into-3d-imageですが、同じではありません。

また、このボリューム レンダリング手法についてはまだ混乱しています。3D テクスチャの 3D 位置を取り、それをクワッドの 2D コーナーにマッピングすることはできますか? http://www.felixgers.de/teaching/jogl/texture3D.htmlの例を見つけましたが、3D 頂点を使用する必要があるかどうかはわかりません。明示的な例を含むより多くの情報源を知っている人はいますか?

0 投票する
1 に答える
1823 参照

matlab - 3D ボリューム データで円柱を作成する

幾何学的形状で構成される生のボリューム データのデータセットを作成しようとしています。ポイントは、ボリューム レイ キャスティングを使用して 2D で投影することですが、最初にボリュームを手動で作成します。

ジオメトリは、ボリュームの中央にある Z 軸に沿った 1 つの円柱と、最初の円柱の周りにある 2 つの小さな円柱 (軸の周りの回転から派生) で構成されます。

これまでの私の機能は次のとおりです。

概念は、最初の円柱が作成され、次に z 軸の値に従って「カット」され、その高さを定義するというものです。もう 1 つの円柱は、関係 A 2 + B 2 = R 2を使用して作成されます。ここで、A と B は、ここで説明されているように R y (θ)R x (φ)を使用して、x 軸と y 軸のみの回転行列を使用して適宜回転されます。

投影を表示するコードを実装し (うまく動作することをテストしました)、シリンダーが無限の高さから「トリミング」されていない場合、円柱は正しい回転をしているように見えるため、これまではすべてが機能しているようです。

円柱と同じように回転さNせたベクトル、別名 z 軸を計算します。[0 0 1]次に、円柱のエッジが必要な同じ距離の 2 つの点を見つけ、その点と法線ベクトルに従ってP平面方程式を計算します。T最後に、その等式に従ってトリムします。または、少なくともそれが私がやっていることだと思います。なぜなら、トリミングの後、私は通常何も得られないからです (すべての値はゼロです)。または、私が実験していたときに得られた最良のことは、円柱をトリミングしたことですが、上部と下部の平面の向きが適切ではありませんでした。

私は幾何学方程式を見ていて、間違いがどこにあるかを見つけることができないので、コードの助けや修正をいただければ幸いです。

編集:これは、作成しようとしているオブジェクトの簡単なスクリーンショットです。円柱はボリューム データでは不透明であることに注意してください。内部はすべて均質な材料と見なされます。

シリンダーのセット