私は3Dで石を表すボクセルアセンブリを持っています。これは2進数のnumpyの3D配列で、1は私の石を構成するボクセルに割り当てられ、0は他の場所に割り当てられます。Python:表面積を計算するボクセルアセンブリをメッシュします
- がそれに表面積を計算し、その噛み合っ表面
- を作成: は私がしたいです。
どのようにですか?
私は3Dで石を表すボクセルアセンブリを持っています。これは2進数のnumpyの3D配列で、1は私の石を構成するボクセルに割り当てられ、0は他の場所に割り当てられます。Python:表面積を計算するボクセルアセンブリをメッシュします
どのようにですか?
それが役に立つことができる場合、私は私の問題を解決しました。 Marching Cubesアルゴリズムは良いですが、2進化された配列ではうまく機能しません。そう: 1)ガウスフィルタは、3Dアレイ(scipy.filters) 2に適用される)マーチングキューブアルゴリズムが(scikit画像ツールを、それをメッシュに) 3)三角形の面積(scikit画像ツール)
アプリケーションによっては、3D凸包やマーチングキューブなど、いくつかのオプションがあります。
3D凸包
まず、あなたはすべてのボクセルの3Dの配列を取得する必要がありますあなたの配列が1
に等しい座標後で、scipy.spatial.ConvexHull
を使用することができます。 Scipy
メソッドは基本的にqhull
ライブラリのラッパーです。 qhull
を使用する場合、出力オプション(FA
)の1つは合計面積と体積を計算することです。
あなたがここにいくつかのより多くの情報を見つけることができます:マーチングキューブ
あなたは凹部を保持する必要がある場合 http://scipy.github.io/devdocs/generated/scipy.spatial.ConvexHull.html http://www.qhull.org/html/qconvex.htm
は、その後、前のオプションでは十分ではないだろう。マーチングキューブは良い選択肢になります。 scikit-imageには既にpythonの実装があります。
http://scikit-image.org/docs/dev/auto_examples/plot_marching_cubes.html
あなたは再び以前の場合のようにすべてのポイントを取得する必要があります。あなたは動詞を計算/で直面している:
http://scikit-image.org/docs/dev/api/skimage.measure.html#marching-cubes
そして、あなたがして面積を計算することができます
http://scikit-image.org/docs/dev/api/skimage.measure.html#mesh-surface-area
を総括ありがとう、それはいいね。私は簡単に私が持っている座標の配列を取得することができます1.それは---座標 '= numpy.where(配列== 1)'です。今私はscipy.convexHullを勉強しようとしています。私はすぐに戻ってくるでしょう:-) –
どうしたらいいのか教えてください。 – purpletentacle
それは素晴らしいalghoritmであり、うまくいきます。この問題は、私の石に凹凸があるときに発生します。それはちょうど最短の方法を見つけるので、凹面を切り取ってください! –