3Dデータから大腿骨のシミュレーションメッシュを生成する

2023年 4月 21日

3Dイメージング技術で取得したデータからシミュレーションメッシュを作成する方法を考えたことはありませんか? このブログでは, COMSOL Multiphysics® ソフトウェアを使用してその方法を説明します. このトピックは, 過去のブログで取り上げた不規則な形状のモデリングというテーマを拡張したものです. ここで説明するプロセスは, トポロジ最適化の結果の検証研究を設定する際にすでに一部使用されています. ただし, このブログでは, 3Dイメージング技術で取得したデータに合わせてワークフローを一般化します.

入力データ

COMSOL Multiphysics® は, テキストファイル, Excel ファイル, CSV ファイル, 画像, DEM ファイル, MATLAB® 関数, C プログラミング言語で記述された外部関数など, さまざまな形式のデータのインポートをサポートしています. スキャンされたデータは, 多くの場合, 一連の断面画像で提供されます. ここで取り上げる例もその1つです. 人間の大腿骨の一部です. このモデルの一部のデータは, 人間の可視化プロジェクト から取得されています. ただし, COMSOL Multiphysics は, 2Dデータの生成に1つの画像のインポートのみをサポートしています. そのため, ソフトウェアを使用する前に, 次の手順を実行してデータファイルが生成されました. 大腿骨の上半分の画像が手動で選択され, 大腿骨の1つを含むピクセルが手動で識別されて, データ量が削減されました. 識別されたピクセルの明るさは, 空間内の位置とともにテキストファイルに読み込まれ, 書き込まれます. 画像内のピクセル位置は x 座標と y 座標を表し, 画像番号は z 座標を表します. スプレッドシート形式は, 各ピクセルが画像から読み込まれ, 一度に1つずつテキストファイルに書き込まれるため, 使用に適した形式です:

x1 y1 z1 data1
x2 y2 z2 data2
x3 y3 z3 data3
...

また, データは大腿骨以外のすべての部分を削除してクリーンアップされ, 大腿骨の実際のサイズに合わせて拡大縮小されました. また, 使いやすさを考慮して2値化も行われました.

人間の大腿骨の2値化データの3つのスライスプロット.

メッシュの作成に使用される人間の大腿骨の2値化データの3つのスライスプロット. 白はデータファイル内の値1の明るさを表し, 黒は値0を表します.

MPH ファイルはこのページの下部からダウンロードできます. したがって, ここでの説明は, 実行する必要がある手順の概要のみを示しています. このブログの最後までに, 人間の大腿骨の2つのメッシュと周囲のドメインが作成され, 今後の計算に使用できます. また, メッシュに適切な境界条件を適用できるように, 他の計算ドメインを追加する方法と, サーフェスメッシュを分割する方法についても説明します.

まず, ソフトウェアの補間関数にデータをインポートします. 関数 human_femur を呼び出します. 大腿骨のメッシュを作成するための2つのワークフローについて説明します.

  1. データの非常に粗いメッシュ表現を取得し, 再メッシュによって粗い表面を平坦化する高速トラック
  2. 滑らかな形状を確実に得るためにヘルムホルツ スムージングを使用するステップをさらに含むワークフロー

ワークフロー1: グリッドデータセットを使用してデータを表し, スムージング手法として表面を再メッシュする

まず, 2つのワークフローのうちより高速な方について説明します. この例では, グリッドデータセットを使用してデータを表し, フィルターデータセットを使用してデータをフィルターして大腿骨を表します. これにより, 非常にブロック状のサーフェス メッシュが生成されるため, フリー3角形操作を使用して凹凸のあるサーフェスを滑らかにします.

グリッドデータセットの設定と大腿骨のデータのフィルター処理

このワークフローでは, モデルビルダーにジオメトリノードやコンポーネントノードは必要ありませんが, 後で計算ドメインを追加して大腿骨の計算メッシュを作成するときに追加します. グローバル定義ノードの下に補間関数を設定し, 結果に直接移動してグリッドデータセットを定義します.

COMSOL Multiphysics ユーザーインターフェースには, グリッドデータセット機能が強調表示されたモデルビルダーと, データ, パラメーター境界, およびグリッドセクションが展開された対応する設定ウィンドウが表示されています.

グリッドデータセットは, 補間関数を追加した直後に設定されます.

グリッドデータセットは通常のメッシュとして使用され, 補間関数はこのメッシュに適用されます. ここでは, 画像解像度の約半分がデータセットの解像度として使用されます. ここで, フィルターデータセットを追加し, 式 human_femur(x,y,z) を入力し, 下限

0.99 に設定します. これにより, 値 0.99 で等値面が作成され, その値を超えるすべてのデータが含まれます. つまり, 人間の大腿骨の等値面です. フィルターデータセットは, 最終的に1つのドメインが必要な場合に適しています. 2番目のワークフローでは, 代わりに分割データセットを使用します. このデータセットでは, 複数の値を定義して複数の等値面を作成し, 複数の計算ドメインを作成できます.

軸が拡大縮小されているため, z 方向に圧縮された大腿骨の等値面.

フィルターデータセットによって生成された等値面. 軸が拡大縮小されているため, 大腿骨が z 方向に圧縮されていることに注意してください.

フィルターデータセットのメッシュのインポートと分割

この フィルターデータセットによって表されるメッシュは, メッシュシーケンスにインポートできます. メッシュシーケンスでは, 面を再メッシュして粗さを滑らかにします. このワークフローでは, データセット > フィルターノードを右クリックし, メッシュパーツを作成を選択します.

メッシュパーツ作成オプションの拡大図.

2番目のワークフローでは, 新規コンポーネントにメッシュを作成オプションを使用します. このワークフローでは, メッシュを構成ジオメトリとしても使用するため, メッシュパーツを作成することを選択します. これについては, 後ほど説明します. これにより, グローバル定義の下にメッシュパーツが自動的に設定され, フィルターデータセットのメッシュをインポートするインポートノードが追加されます. フィルターデータセットのドメイン要素は品質が低いことが多いため, 三角形のメッシュのみをインポートします. 次に, 表面メッシュに満足したら, 四面体メッシュを再生成します.

境界条件を適用するには, 特定の境界分割が必要になることがよくあります. 平面カットを行うには平面で交差操作を使用し, 他の形状には分割操作を使用します. メッシュの交差と分割の比較については, ブログCOMSOL Multiphysics® でインポートされたメッシュを編集および修復をお読みください. ここでは, ボールで分割操作を使用して, ほぼ円形の境界を取得します.

ボールで分割操作を使用して, ほぼ円形の境界が分割された大腿骨上部のメッシュの拡大図.

ボールで分割操作 (ピンクのエッジ) を使用して, 後で境界条件を適用できるほぼ円形の境界 (青で強調表示) を分割します. メッシュのレンダリングは, 表示目的のためオフになっています.

品質を向上させ, 粗さを均一にするための再メッシュ

要素サイズが混在し, 多数の細長い三角形があるため, メッシュはシミュレーションに適していません. したがって, メッシュを使用する前に再メッシュする必要があります. より大きなメッシュ サイズで面を再メッシュすると, 形状も滑らかになります.

インポートされたフィルターメッシュが左側に表示され, そのメッシュの拡大図が右側に表示されます. メッシュは, 大きい三角形, 小さい三角形, 細長い三角形で構成されています.

インポートされたフィルターメッシュの拡大画像. このメッシュは, グリッドデータセットが六角形であるため, 形状が非常にブロック状になっています. 大きな三角形, 小さな三角形, 細長い三角形が混在しています.

Remesh Faces 操作を使用して, 面を再メッシュします. メッシュの粗さを解消せずに均一にするには, メッシュの凹凸よりも大きい要素サイズを設定します. これを行うには, 最大要素サイズ最小要素サイズの両方を 0.005 m に設定します. 下の画像に示すように, 表面は十分に滑らかになっています. ただし, 境界はワークフローの後の段階でもう一度再メッシュされるため, 面はさらに均一になります.

大腿骨のメッシュ. 上部のセクションが青い円で強調表示されています.

この画像は, サーフェスを一度再メッシュした後の大腿骨の上部を示しています.

ほぼ交差しているサーフェスを再メッシュする場合, またはほぼ交差している1つのサーフェスを再メッシュする場合は, 代わりにヘルムホルツ平滑化を使用してください.

サーフェスメッシュは, このメッシュにさらにジオメトリを追加できるほど十分に良くなりました.

計算ドメインの追加

大腿骨のドメインだけが関心のあるドメインかもしれませんが, 大腿骨の周囲にシミュレーションドメインや, 大腿骨の骨折を固定するためのネジも必要だとします. どのようにすればよいでしょうか. これは, ジオメトリシーケンスで実現されます. まず, 大腿骨モデルに3Dコンポーネントを追加します. 次に, ジオメトリ > インポート を追加します. このノードの設定ウィンドウで, メッシュパーツ1を選択します. このノードを使用すると, 新しいジオメトリを追加して配置できます. このジオメトリを配置するには大腿骨の面のみを使用するため, このノードは構築用ジオメトリとしてマークする必要があります. 構築用ジオメトリオブジェクトは, ジオメトリが完成すると必ず削除されます. エッジが実線ではなく破線になっているため, 構築用ジオメトリであることがわかります.

インポートノードが強調表示され, グラフィックスウィンドウに大腿骨ジオメトリが表示された COMSOL Multiphysics ソフトウェアユーザーインターフェース.

大腿骨を構築用ジオメトリオブジェクトとしてジオメトリシーケンスにインポートし, 大腿骨に関連して追加のジオメトリを配置します.

作成するジオメトリは, 後でメッシュシーケンスでメッシュと結合されます. ジオメトリまたはインポートした CAD をメッシュと結合するには, 通常, メッシュシーケンスでメッシュ結合操作を使用するのが最も堅牢であり, ここではこのワークフローに従います.

シミュレーションに必要なジオメトリを描画したり, CAD 設計をインポートしたりできます. 構築ジオメトリが利用できるので, 目的のジオメトリを簡単に描画できます. この例では, 大腿骨を補強するために2本のネジを追加しますが, 1つまたは複数のジオメトリオブジェクトを作成またはインポートする場合でも, 原理は同じです. ネジのジオメトリと大腿骨の構築ジオメトリは, 下の左側の画像に示されています. ジオメトリが完成し, 一体化を作成すると, 大腿骨の構築用ジオメトリが結果のジオメトリから削除され, 下の中央の画像に示すように, ネジだけが残ります. インポートした CAD 設計の場合は, メッシュと結合する前に, 詳細除去ノードまたは 仮想操作を追加してジオメトリを簡素化することもできます. ジオメトリとメッシュを組み合わせる方法の詳細については, STL インポートチュートリアルシリーズの2番目のチュートリアルを参照してください.

同じコンポーネントで, メッシュシーケンスに移動します. 必ず2つのインポートノードを追加してください. 1つはネジのジオメトリをインポートし, もう1つはメッシュパーツから大腿骨のメッシュをインポートするインポートノードです (下の右の画像). 2つのサーフェスメッシュをメッシュの結合 操作で結合し, 次にネジのドメインをエンティティ追加で結合します. ネジのドメインは大腿骨の面によって2つに分割されているためです.

ネジで補強された大腿骨のジオメトリ (左), 一体化ノードを使用した後のネジのジオメトリ (中央), およびメッシュシーケンスにインポートされたネジで補強された大腿骨のメッシュ (右) の3つの横並びの画像.

左: 大腿骨の構築用ジオメトリを持つネジのジオメトリ. 中央: 一体化ノードを構築した後のネジのジオメトリ. 右: メッシュシーケンスにインポートされた大腿骨とネジのメッシュ.

フェースを再メッシュ化ノードを使用して, 最大要素サイズ最小要素サイズ0.005 m に設定し, 大腿骨の面を再メッシュします. フェースを再メッシュ化操作に固定メッシュ属性を追加し, ネジ穴のエッジのメッシュを固定したままにするように選択します (下の左側の青い画像で強調表示されています). これにより, ネジ穴の周りのメッシュの要素品質が向上し, 大腿骨の面がさらに滑らかになります.

ネジ穴の周りのエッジを固定したまま, 大腿骨の面をもう一度再メッシュします.

最後に, フリー4面体操作を追加して, ドメインを4面体メッシュで埋めます. 手元の物理に必要であれば, スイープメッシュまたは境界層メッシュを追加するオプションがあります. このメッシュで定義されたドメインと境界は, シミュレーションを設定して解決するときに使用されます.

高次離散化によるフィジックスの追加

メッシュについてはシミュレーションの準備が整いました (下の左側の画像を参照). しかし, 高次離散化による物理を追加するとどうなるでしょうか. 離散化設定2次セレンディピティを使用する固体力学シミュレーションを設定するとします. すると, 曲線要素の2次ノードが, 基礎となるジオメトリがある場合の配置方法と同様に, メッシュサーフェスの曲線表現上に配置されます. メッシュ内の曲線要素がどのように見えるかを把握するには, メッシュデータセットの幾何形状関数2次ラグランジュに設定し, プロットのノードポイント幾何形状関数に設定して, メッシュプロットを設定します. 2次ラグランジュプロット設定は, モデル内の物理的な離散化とは連動しておらず, プロットにのみ使用されます.

左側にネジで補強された大腿骨のボリュームメッシュのメッシュプロットが表示され, 右側に大腿骨とネジの最終メッシュの上部の拡大図が表示されます. 最終メッシュには, 大腿骨の湾曲した境界上に表示される2次ノードポイントが含まれます.

左: 大腿骨とネジのボリュームメッシュのメッシュプロット. 白い要素はネジのドメインを表し, 大腿骨の要素は x > -0.015 という式でフィルター処理されます. 右: 大腿骨の湾曲した境界上に表示された 2 次ノードポイントを含む最終メッシュ. 緑と黄色は歪度を表します.

生成されたメッシュとインポートされたデータの比較

生成されたメッシュがデータにどのように追従するかを比較する方法として, 式 human_femur(x,y,z)Isosurface プロットを追加し, グリッドデータセットのメッシュ解像度にプロットすることができます. 下の画像に示すように, メッシュは等値面を非常によく追従しています.

大腿骨の上部の拡大図. ここでは, 生成されたメッシュ (灰色で表示) とインポートされたデータ (青色で表示) を比較できます.

生成されたサーフェスメッシュ (灰色) と補間データの等値面の比較 human_femur(x,y,z) (青).

ワークフロー2: ヘルムホルツ方程式を使用した大腿骨のデータの平滑化

このワークフローでは, 簡単に言うと, 大腿骨データを適用する通常のブロックドメインを追加します. ヘルムホルツ方程式を解いてデータを平滑化し, 大腿骨の滑らかなサーフェス メッシュを作成します. 大腿骨のサーフェスメッシュを再メッシュする必要はありますが, 今回はメッシュ要素の品質を向上させるためだけに行います.

規則的なドメインを定義する

ヘルムホルツ方程式を解くには, ドメインが必要です. このドメインは, こちらのブログで説明されているように, 大腿骨のデータが収まるブロック, 球, またはその他の単純な形状にすることができます. このドメインをできるだけ小さくして, 細かいメッシュでドメインを分解できるようにします. メッシュは, サーフェスメッシュで表示するデータの詳細を解決できるほど細かくする必要があります.

長方形のブロックのような形状の, 規則的な領域上の六面体メッシュ.

インポートされたデータが定義されている規則的な領域上の十分に細かい六面体メッシュ.

次に, 方程式を設定し, 定常スタディを追加して解き, 使用できる解データセットにアクセスします.

データのヘルムホルツ平滑化

数値アーティファクトを回避し, やや粗いメッシュを使用できるようにするため, ヘルムホルツフィルター PDE を使用して補間関数をローパスフィルターします:

-\nabla \cdot (R^2\nabla u)+u=human\textunderscore femur(x,y,z)

ここで, R はローパスフィルターの幅をほぼ表すフィルター半径です. 下の図に示すように, 係数形式 PDE インターフェースを追加します.

係数形式 PDE インターフェースが強調表示され, グラフィックスウィンドウに長方形モデルが表示された COMSOL Multiphysics ソフトウェアユーザーインターフェース.

係数形式 PDE インターフェースの設定.

ここでは, 拡散係数に式 max((h[1/m])^2,R^2) を使用します. ソフトウェアは, メッシュサイズ hのうち最大のもの, およびメッシュ内の各ノードのパラメーター R を使用します. この例では, ローカルメッシュサイズ hは一定ですが, 非構造化四面体メッシュを使用する場合, hは変化します. すべての操作は, 各要素が線形であるメッシュで表されるジオメトリに対して実行されるため, すべての要素の離散化順序は線形要素に下げられることに注意してください. 解の計算には, 定常ソルバーが使用されます.

六面体メッシュ上にプロットされた補間関数のスライスプロットが左側に表示され, 平滑化された解データのスライスプロットが右側に表示されます.

補間関数のスライスプロット human_femur 六面体メッシュ (左) と平滑化された解データ (右) にプロットされています.

分割データセットを使用して大腿骨をフィルター処理する

平滑化された解データで 0 (青) から 1 (赤) の間の値を使用して, 大腿骨の表面メッシュをフィルター処理します. この例では, 大腿骨の外側の領域もシミュレーションの一部にすると仮定します. したがって, 分割データセットの追加を選択する必要があります. 大腿骨の領域のみに関心がある場合は, 最初のワークフローで行ったように, 代わりにフィルターデータセットを使用します. Levels 値が 0.6 の場合, 下の画像に示すように, 分割データセットで十分です.

分割データセットのプロットが赤で表示され, 大腿骨のメッシュがブロック領域内にあります.

レベルが 0.6 に設定された分割データセットのプロット. 等値面により, シミュレーション領域が大腿骨の領域と周囲の領域に分割されます.

レベルに問題がなければ, 分割データセットノードまたはフィルターデータセットノードを右クリックし, 新しいコンポーネントでメッシュを作成を選択します. 追加のシミュレーション領域を作成する必要がある場合は, メッシュパーツを作成オプションを使用して, 最初のワークフローの手順に従います.

新しいコンポーネントにメッシュを作成オプションの拡大図.

これにより, 分割データセットのメッシュをインポートするためのインポートノードを含む新しいコンポーネントが自動的に設定されます. ドメイン要素をインポートチェックボックスをオフにしたまま, 境界分割設定を最小に設定します. これにより, サーフェスメッシュのみがインポートされ, 7つの平面境界と大腿骨の1つの境界という, 可能な限り少ない境界が形成されます. このサーフェスメッシュを改善してから, ボリュームメッシュを再作成します.

左にインポートされた大腿骨メッシュの分割データセットが表示され, 右に大腿骨上部の拡大図が表示されます. 表面メッシュには, 大きな三角形, 小さな三角形, 細長い三角形が含まれています.

インポートされた分割データセット メッシュ. 大腿骨の表面メッシュには, 大きな三角形, 小さな三角形, 細長い三角形が混在しており, シミュレーションに適した品質に改善する必要があります. 一部の境界は表示目的で非表示になっています.

三角形の品質を向上させるために表面を再メッシュする

サーフェスは, フェースを再メッシュ化操作を使用して, 同じメッシュシーケンスで再メッシュされます. 同様のサイズの三角形を取得するために, 最大要素サイズ最小要素サイズは両方とも 0.005 m に設定されています.

インポートされた大腿骨メッシュの分割データセットが左側に表示され, 大腿骨の上部の拡大図が右側に表示されています. サーフェスメッシュには, 大きい三角形, 小さい三角形, および細長い三角形が含まれています.

大腿骨とブロックの再メッシュされたサーフェース. サイズは, 同様のサイズの三角形を持つサーフェスメッシュを生成するように変更されています. 一部の境界は, 表示のために非表示になっています.

これで, ドメインを四面体メッシュで埋めることができます. 追加するフィジックスインターフェースは, このメッシュによって定義されたドメインと境界に適用されます. これで, シミュレーションの準備が整った高品質のボリュームメッシュができました. 必要な他の形状やアプリケーションでは, スウェプトメッシュと境界層メッシュをドメインに追加できますが, この場合は四面体メッシュで十分です.

左に大腿骨のボリュームメッシュが表示され, 右に最終メッシュの上部の拡大図が表示されます. 最終メッシュには, 大腿骨の湾曲した境界上に表示される2次ノードポイントが含まれます.

左: 大腿骨と周囲のブロックのボリュームメッシュ. 白い要素は大腿骨のドメインを表し, 周囲の要素は x > 0 という式でフィルター処理されます. 右: 大腿骨の湾曲した境界上に 2 次ノード ポイントが表示された最終メッシュ. 色は歪度を表します. 一部の境界は表示のために非表示になっています.

生成されたメッシュとインポートおよびスムージングされたデータの比較

このワークフローで生成されたメッシュは, 分割データセットに使用されたのと同じレベルのインポートされたデータの等値面 human_femur(x,y,z) と比較できます. この等値面は, 元のブロックドメインのメッシュ上にプロットされます. インポートされたデータにさらに近いメッシュを生成するには, ヘルムホルツ方程式が解かれる元のブロック ドメインでより細かいメッシュを使用します. メッシュ サイズを小さくすると, 拡散係数も小さくできます.

大腿骨の上部の拡大図. ここでは, 生成されたメッシュ (灰色で表示) と補間データの等値面 (青色で表示) を比較できます.

生成されたサーフェスメッシュ (灰色) と補間データの等値面の比較 human_femur(x,y,z) (青色).

まとめ

これで, スキャンデータからサーフェス メッシュを作成する方法に関するブログを終了します. 表面メッシュを分割し, 2つの異なる手法を使用してデータを滑らかにし, メッシュとジオメトリを組み合わせる方法を学びました.

ここで説明したワークフローの詳細については, 下のボタンから MPH ファイルをダウンロードしてください.

その他の参考資料

編集者注: このブログは, COMSOL Multiphysics® バージョン 6.2 の新機能と機能を反映するために, 2024年4 月19日に更新されました.

 

このモデルの特定のデータは, 人間の可視化プロジェクト, https://www.nlm.nih.gov/research/visible/visible_human.html, 米国国立医学図書館の提供から取得されています. このデータは2023年4月21日現在のもので, 変更されており, NLM から入手できる最新, または正確なデータを反映していない可能性があります. NLM は COMSOL の製品, サービス, またはアプリケーションを推奨しておらず, データの正確性または完全性に関する商品性または特定目的への適合性の保証を含め, 明示または黙示を問わずすべての保証を否認します. データのユーザーは, データのエラーに起因する責任から NLM および米国政府を免責するものとします. NLM は, データに含まれる情報または含まれない情報の使用, 誤用, または解釈によって生じる結果について一切の責任を負いません.

MATLAB は The MathWorks, Inc. の登録商標です.

コメント (0)

コメントを残す
ログイン | 登録
Loading...
COMSOL ブログを探索