私はこのように、RGBのスタックを2次元平面のシリーズで構成された3Dプロットを作成しようとしている:3Dプロットにトゥルーカラーの2D RGBテクスチャを表示しますか?
私はそれがXを渡すことでmpl_toolkits.mplot3d
を使用してこれを行うことが可能だということを知っていますplot_surface
に、Y、Z座標と各画素のRGB(A)色:
import numpy as np
from matplotlib import pyplot as pp
from mpl_toolkits.mplot3d.axes3d import Axes3D
def plot_stack_slices(rgbstack, scale=(1., 1., 1.), z_interval=10.):
fig, ax = pp.subplots(1,1,subplot_kw={'projection':'3d'})
ax.invert_zaxis()
ax.hold(True)
sx, sy, sz = scale
nz, ny, nx, nc = rgbstack.shape
stack_xyz = np.mgrid[:nx*sx:nx*1j, :ny*sy:ny*1j, :nz*sz:nz*1j]
slices = rgbstack[::-z_interval]
slice_xyz = np.rollaxis(stack_xyz, 3, 0)[::-z_interval]
surflist = []
for (img,xyz) in zip(slices, slice_xyz):
x, y, z = xyz
s = ax.plot_surface(x, y, z, facecolors=img**0.75,
rstride=50, cstride=50)
surflist.append(s)
return fig, ax, surflist
残念ながら、これはIがFULにテクスチャを表示するためにrstride=1, cstride=1
を設定した場合、極端に遅くなる解像度。
私はまたMayaviが簡単にフル解像度で複数の2Dテクスチャを表示する処理できることを承知している:
from mayavi import mlab
def plot_stack_slices2(stack, scale=(1., 1., 20.), z_interval=10.):
mfig = mlab.figure(bgcolor=(1,)*3)
sx, sy, sz = scale
nz, ny, nx = stack.shape
slices = stack[::-z_interval]
slice_z = np.linspace(0,nz*sz,nz)[::z_interval]
surflist = []
for (img,z) in zip(slices, slice_z):
im = mlab.imshow(img.T, colormap='gray', figure=mfig)
im.actor.scale = [sx,sy,sz]
im.actor.position = [0, 0, z]
surflist.append(z)
return fig, surflist
しかし、問題は今トゥルーカラーRGBを表示するどのような方法があるようには思えないということですMayaviを使ったテクスチャ - according to the docsタプルを1つだけ指定することも、あらかじめ定義されたカラーマップを指定することもできます。
3Dプロットにトゥルーカラーの2D RGBテクスチャを表示するにはどうすればよいでしょうか?
十分な時間があれば、Vtkや純粋なOpenGLでもこれをどうやってやるのか分かりますが、実際には既存のライブラリが存在することを期待しています。
(HTTP [vivis volshow]試してみてください/ /code.google.com/p/visvis/wiki/functions#volshow) – cgohlke
@cgohlkeありがとう、私はそれをチェックします –
@cgohlkeうわー、これは本当に非常に有望に見えます! –