6

を使用して特定の [x,y,z] 位置でレンダリングしたいいくつかの 2D 画像で構成されるデータがありますmayavi2 (v4.3.0)

ドキュメントから、私はこれを行うことができるはずですmlab.imshow(). 残念ながら、パラメーター ( )imshowを指定して呼び出すと、mayavi は例外をスローします。extentAttributeError: 'ImageActor' object has no attribute 'actor'

を変更して、x、y、および z データを直接設定することも試みましたim.mlab_source.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()
4

1 に答える 1

5

わかりました、これはmayaviの既知のバグであることがわかりました。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
于 2013-04-10T19:45:19.550 に答える