はじめに
このノートは、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
コメント