Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以将仿射变换矩阵直接应用于Mayavi ImageActor对象?_Python_Transformation_Mayavi - Fatal编程技术网

Python 是否可以将仿射变换矩阵直接应用于Mayavi ImageActor对象?

Python 是否可以将仿射变换矩阵直接应用于Mayavi ImageActor对象?,python,transformation,mayavi,Python,Transformation,Mayavi,我正在使用Mayavi渲染一些成像数据,这些数据由三维体积内的多个二维平面组成,其位置、方向和比例由4x4刚体仿射变换矩阵定义。每个平面包括: 二维图像数据数组,我使用mayavi.mlab.imshow 由我分别使用mayavi.mlab.points3d和mayavi.mlab.plot3d绘制的线和点组成的一组ROI 我将点和线顶点从二维参照平面变换到三维空间,方法是使用仿射矩阵点化它们的坐标。根据我之前的问题/答案,我发现我可以使用以下方法分别设置ImageActor对象的位置和方向

我正在使用Mayavi渲染一些成像数据,这些数据由三维体积内的多个二维平面组成,其位置、方向和比例由4x4刚体仿射变换矩阵定义。每个平面包括:

  • 二维图像数据数组,我使用
    mayavi.mlab.imshow
  • 由我分别使用
    mayavi.mlab.points3d
    mayavi.mlab.plot3d
    绘制的线和点组成的一组ROI
我将点和线顶点从二维参照平面变换到三维空间,方法是使用仿射矩阵点化它们的坐标。根据我之前的问题/答案,我发现我可以使用以下方法分别设置
ImageActor
对象的位置和方向:

obj = mlab.imshow(img)
obj.actor.orientation = [pitch, roll, yaw] # the required orientation (deg)
obj.actor.position = [dx, dy, dz] # the required position 
obj.actor.scale = [sx, sy, sz] # the required scale
现在,绘图如下所示:

所有的东西都排列得很好,但很难解释,因为这些平面在z轴上的间隔非常密集。我现在想做的是通过一些比例因子“拉伸”z轴。在点和线的情况下,这是很容易做到的-我所做的就是将所有变换的z坐标乘以一个比例因子

但是,我不知道如何将相同的变换应用于图像。如果我只是缩放z位置,图像的旋转和缩放当然是错误的,我绘制的点/线将不再落在与图像相同的平面上:

我需要做的是对我的图像应用一个非刚性仿射变换,它包括剪切、旋转、平移和缩放


是否有任何方法可以手动将剪切应用于
ImageActor
,或者更好的是直接应用我预先计算的任意4x4仿射矩阵?

ImageActor
,它最终是
tvtk的包装。ImageActor
,具有
用户矩阵
属性,这样可以指定4D变换矩阵

从随机图像开始

将numpy导入为np
从mayavi.mlab导入imshow
s=np.random.random((10,10))
image=imshow(s,colormap='gist_earth',interpolate=False)
给了我们以下

创建一个变换矩阵,并设置一个术语,使其具有一定的剪切力

从tvtk.api导入tvtk
变换矩阵=tvtk.Matrix4x4()
变换矩阵。集合元素(0,1,2.5)
image.actor.user\u矩阵=变换矩阵
给我们


set\u元素
具有签名
(行、列、值)
,因此您应该能够根据需要在该矩阵上设置元素。

我认为这对我不起作用。这听起来很可怕,但我可以想象设置一个投影矩阵,使一个图像看起来像是经过了适当的仿射变换。但是,我需要在单个场景中渲染多个图像,每个图像都需要应用不同的变换。