2013-04-05 23 views
5

特定の[x、y、z]位置でレンダリングしたい複数の2D画像からなるデータがありますmayavi2 (v4.3.0)mayavi - 画像の[x、y、z]範囲をプログラムで設定する

From the documentationmlab.imshow()でこれを実行できるはずです。残念ながらextentパラメータ(AttributeError: 'ImageActor' object has no attribute 'actor')を指定してimshowと呼ぶと、mayaviは例外をスローします。

im.mlab_source.x,y,z...を変更して、x、y、zデータを直接設定しようとしました。奇妙なことに、これはxとyの範囲を正しく変更しますが、im.mlab_source.zが明らかに変更されても、z位置には何もしません。ここで

は、実行可能な例です:

import numpy as np 
from scipy.misc import lena 
from mayavi import mlab 

def normal_imshow(img=lena()): 
    return mlab.imshow(img,colormap='gray') 

def set_extent(img=lena()): 
    return mlab.imshow(img,extent=[0,100,0,100,50,50],colormap='cool') 

def set_xyz(img=lena()): 
    im = mlab.imshow(img,colormap='hot')  
    src = im.mlab_source 
    print 'Old z :',src.z 
    src.x = 100*(src.x - src.x.min())/(src.x.max() - src.x.min()) 
    src.y = 100*(src.y - src.y.min())/(src.x.max() - src.y.min()) 
    src.z[:] = 50 
    print 'New z :',src.z 
    return im 

if __name__ == '__main__': 

    # this works 
    normal_imshow() 

    # # this fails (AttributeError) 
    # set_extent() 

    # weirdly, this seems to work for the x and y axes, but does not change 
    # the z-postion even though data.z does change 
    set_xyz() 

答えて

5

[OK]を、これはmayaviでknown bugであることが判明しました。しかし、ImageActorオブジェクトが作成された後の方向、位置、スケールを変更することは可能です:

obj = mlab.imshow(img) 
obj.actor.orientation = [0, 0, 0] # the required orientation 
obj.actor.position = [0, 0, 0]  # the required position 
obj.actor.scale = [0, 0, 0]  # the required scale 
関連する問題