2013-04-05 36 views
5

Tôi có một số dữ liệu bao gồm một số hình ảnh 2D mà tôi muốn hiển thị ở các vị trí [x, y, z] cụ thể liên quan đến nhau bằng cách sử dụng mayavi2 (v4.3.0).mayavi - đặt mức [x, y, z] của hình ảnh theo chương trình

From the documentation có vẻ như tôi chỉ có thể thực hiện việc này với mlab.imshow(). Thật không may, mayavi ném một ngoại lệ khi tôi gọi imshow chỉ định tham số extent (AttributeError: 'ImageActor' object has no attribute 'actor').

Tôi cũng đã thử đặt trực tiếp dữ liệu x, y và z bằng cách sửa đổi im.mlab_source.x,y,z.... Thật kỳ lạ, trong khi điều này thay đổi chính xác khoảng cách x và y, nó không làm gì với vị trí z ngay cả khi các thay đổi rõ ràng là im.mlab_source.z.

Dưới đây là một ví dụ Runnable:

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

Trả lời

5

Ok, nó quay ra rằng đây là một known bug trong mayavi. Tuy nhiên, có thể thay đổi hướng, vị trí và tỷ lệ của đối tượng ImageActor sau khi đã được tạo:

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