8

ボリュームの等値面を表示するためにmayavi(3.3.2)を使用しています。

一般的に、私のボリュームには立方体のボクセルがありません。たとえば、サンプリンググリッドはXとYで1mm x 1mmですが、Z方向では1.4mmです。

mayavimlab.contour3dまたはを使用して、このようなボリュームを正しい空間比率で表示するにはどうすればよいmlab.pipeline.iso_surfaceですか?ボリュームをキュービックグリッドにリサンプリングしたくないのですが。

問題を説明する別の方法:平坦化された楕円体の代わりに球を表示するために以下のコードを取得するにはどうすればよいですか(volume意図された1:1:2のアスペクト比のボクセルを与えられたものとして、再生またはリサンプリングせずに音量)。

import numpy as np
from enthought.mayavi import mlab

def sqr(x): return x*x

s=64
x,y,z = np.ogrid[0:s,0:s,0:s/2]

volume = np.sqrt(sqr(x-s/2)+sqr(y-s/2)+sqr(2*z-s/2))

isos = mlab.contour3d(volume,contours=[5,15,25],transparent=True)
mlab.show()

基礎となるVTKグラフィックスパイプライン(その変換など)を取得し、適切な異方性スケーリングを挿入する方法があるはずだと思います(mlab APIを介して直接行う方法がない場合)。

4

1 に答える 1

7

このためscalar_field、入力データからオブジェクトを明示的に作成するのが最も簡単です。

地質学では物事を深く(ポジティブは下向き)するのが好きなので、私は実際にこれをかなり頻繁に行います。つまり、z方向に負の増分が必要です。それがさまざまなmlab関数への単なる引数であるといいのですが、それでもそれを行うのはそれほど難しくありません。

from mayavi import mlab
import numpy as np

s=64
x,y,z = np.ogrid[0:s,0:s,0:s/2]

data = np.sqrt((x-s/2)**2 + (y-s/2)**2 + (2*z-s/2)**2)

grid = mlab.pipeline.scalar_field(data)
grid.spacing = [1.0, 1.0, 2.0]

contours = mlab.pipeline.contour_surface(grid, 
                         contours=[5,15,25], transparent=True)
mlab.show()

非立方体ボクセルを備えた球殻

于 2011-05-24T04:00:59.917 に答える