web-dev-qa-db-ja.com

グレースケール画像の2Dスライスセットから3Dボリュームを作成する

Matlabを使用してグレースケール画像セットから3Dボリュームを作成します。セットには、2Dグレースケール画像の連続および量子化されたスライスが含まれています。私はまだMatlabの新人と見なされていますが、これが現在私の頭の中にあります。

  • 3Dボリューム用の空きスペースを作成します。
  • 各画像に対して、すべての前処理操作を実行して、関心のある部分のみを取得します。 (この質問では、この前処理部分が常に問題なく機能すると仮定します)
  • 画像を確認すると、2D上の各ピクセルのx座標とy座標が空のスペースに転送されます。 z座標の場合、各スライス間の距離に関するスライス番号を使用できます。ピクセルが別のピクセルに隣接している場合、3Dポイントは互いに接続されます。
  • すべてのスライスが完了するまで、前の2つの手順を繰り返します。これで、2Dスライスの場合と同じようにすべてのポイントが接続されます。

しかし、ここで問題が発生します。スライス間のポイントをどのように接続して、これらのポイントをボリュームにすることができるでしょうか。または、Matlabで行うより堅牢な方法はありますか?どんな提案でも大歓迎です。

10
Karl

パート0-仮定


  • すべての2D画像は同じ寸法であるため、3Dボリュームはそれらすべてを長方形の立方体に保持できます
  • 各2D画像のピクセルの大部分は3D空間関係を持っています(各2D画像のピクセルがランダムに分布している場合はあまり視覚化できません)。

パート1-2D画像のスタックからの3Dボリュームの視覚化


2D画像のスタックから3Dボリュームを視覚化または再構築するには、matlabで次のツールキットを試すことができます。

1 3D CT/MRI画像インタラクティブスライディングビューア http://www.mathworks.com/matlabcentral/fileexchange/29134-3d-ctmri-images-interactive-sliding-viewer

[2] Viewer3D http://www.mathworks.com/matlabcentral/fileexchange/21993-viewer3d

[3] Image3 http://www.mathworks.com/matlabcentral/fileexchange/21881-image

[4] Surface2Volume http://www.mathworks.com/matlabcentral/fileexchange/8772-surface2volume

[5] SliceOMatic http://www.mathworks.com/matlabcentral/fileexchange/764

VTKに精通している場合は、次のことを試すことができます。[6] matVTK http://www.cir.meduniwien.ac.at/matvtk/

私は現在、そのシンプルさと使いやすさのために[5] SliceOMaticを使い続けています。ただし、デフォルトでは、Matlabでの3Dレンダリングは非常に遅くなります。 openGLをオンにすると、レンダリングが速くなります。 (http://www.mathworks.com/help/techdoc/ref/opengl.html)または、簡単に言えば、set(gcf、 'Renderer'、 'OpenGL')


パート2-スライス間のピクセルの補間


スライス間のピクセルを補間するには、補間方法を指定する必要があります(上記のツールキットの一部には、この機能/柔軟性があります。それ以外の場合、補間の例としては、バイキュービック、スプライン、多項式などがあります。)問題のドメインにはるかに固有の補間方法について、googleまたはgoogle/scholarを検索することで、これを解決できます)。


パート3-3D前処理


手順を見ると、最初に各2D画像を処理することにより、体積データを処理します。多くの高度なアルゴリズム、または真の3D処理では、最初に3Dドメインでボリュームデータを処理することができます(簡単に言えば、26個以上のネイバーを最初に考慮に入れます)。この手順が完了すると、断面を表示するためにボリュームデータを2D画像のスタックに出力するか、前述の3D表示用ツールキットの1つに提供するか、サードパーティの3D表示アプリケーションに出力することができます。


私は自分の医用画像研究プロジェクトで上記の概念に従いましたが、上記の発見は ここに記載されている私の研究経験に基づく(最新の改訂版) です。

16
Gary Tsui

MATLABは通常、3D配列を使用して体積データをプロットします。データポイントは、各軸に沿って空間的に均等に分離されています。データがないサイトが3D配列にある場合、通常はNaN値が割り当てられ、さまざまなプロット関数がこれを適切な方法で処理できます(つまり、通常は意図したとおりに動作します) )。

データのz方向の隣接する点が配列の3次元でも隣接するように、スライスを3d配列にロードする場合は、問題ないはずです。

3
Brendan