[scikit-image] 14. 3次元ボクセルデータをポリゴンデータに変換( measure.marching_cubes_lewiner)

python

はじめに

このノートは、scikit-imageライブラリのmarching_cubes_lewiner関数を使って3次元ボクセルデータをポリゴンデータに変換する方法を解説しています。3Dボリュームデータから表面メッシュを抽出する技術について学べます。

コード

解説

マーチングキューブ法を用いたボクセルデータからポリゴンデータへの変換について説明します。この技術は医療分野で特に重要で、CTやMRIで得られたボクセルデータをポリゴンデータに変換する際によく使用されています。

3次元ボクセルデータから表面(サーフェス)を抽出するための代表的なアルゴリズムが「Marching Cubes法」です。scikit-imageライブラリには、この改良版である「Lewinerのマーチングキューブ法」が実装されています。

マーチングキューブ法 - Wikipedia

モジュールのインポート

ボクセルデータの生成

以前作成したボクセルサボテンのデータを使用します。詳細は後述します。

[matplotlib 3D] 47. 3D STLファイルのボクセル変換とmatplotlibによる表示
3D形式のSTLファイルをボクセル形式に変換し、matplotlibのvoxel機能を使用してサボテンの形状を表示する方法を解説。3Dデータの視覚化技術とmatplotlibの高度な表現方法について学べる実践的なチュートリアル。

マーチングキューブ法の適用

最後の0は、levelパラメータとして機能し、ボリューム内で等値面を検索するための等高線値を表します。

ポリゴンデータの生成と表示

verts[faces]によって三角形のポリゴンデータを取得し、それをPoly3DCollectionオブジェクトに変換します。その後、ax.add_collection3d(mesh)を実行することで、3D図にポリゴンデータを表示できます。

軸、視点の設定

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

注意点

大規模なボリュームデータを処理する場合、メモリ使用量と処理時間に注意が必要です。必要に応じて、データのダウンサンプリングや部分的な処理を検討しましょう。また、生成されたメッシュの品質改善のために、後処理(スムージングやデシメーション)が必要になる場合もあります。

参考

Marching Cubes — skimage 0.25.2 documentation

コメント