2013-04-05 2 views
5

У меня есть некоторые данные, которые состоят из нескольких 2D-изображений, которые я хотел бы отображать в определенных положениях [x, y, z] относительно друг друга, используя mayavi2 (v4.3.0).mayavi - настройка изображения [x, y, z] программно

From the documentation кажется, что я должен просто сделать это с помощью mlab.imshow(). К сожалению, майави генерирует исключение, когда я вызываю imshow с указанием параметра extent (AttributeError: 'ImageActor' object has no attribute 'actor').

Я также попытался установить данные x, y и z напрямую, изменив im.mlab_source.x,y,z.... Странно, хотя это правильно изменяет экстенты x и y, он ничего не делает для z-позиции, хотя im.mlab_source.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

Хорошо, оказывается, что это в 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 
Смежные вопросы