2013-04-05 42 views
5

Mam kilka danych, które składają się z kilku obrazów 2D, które chciałbym wyświetlić w określonych pozycjach [x, y, z] względem siebie za pomocą mayavi2 (v4.3.0).mayavi - ustawianie programowego rozmiaru [x, y, z] obrazu

From the documentation wydaje się, że powinienem być w stanie to zrobić z mlab.imshow(). Niestety mayavi zgłasza wyjątek podczas wywoływania imshow określając parametr (AttributeError: 'ImageActor' object has no attribute 'actor').

Próbowałem również ustawić dane X, Y i Z bezpośrednio, modyfikując im.mlab_source.x,y,z.... Dziwne, chociaż to poprawnie zmienia zakres x i y, to nie robi nic z pozycją z, chociaż wyraźnie zmienia się im.mlab_source.z.

Oto runnable przykład:

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() 

Odpowiedz

5

Ok, to okazuje się, że jest to known bug w mayavi. Jednak możliwa jest zmiana orientacji, położenia i skali obiektu ImageActor po jego utworzeniu:

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