【发布时间】:2013-06-28 17:17:53
【问题描述】:
我正在使用 Mayavi 渲染一些成像数据,这些数据由 3D 体积内的多个 2D 平面组成,其位置、方向和比例由 4x4 刚体仿射变换矩阵定义。每个平面包括:
- 二维图像数据数组,我使用
mayavi.mlab.imshow显示 - 一组 ROI,由我分别使用
mayavi.mlab.points3d和mayavi.mlab.plot3d绘制的线和点组成。
我将我的点和线顶点从 2D 参考平面转换到 3D 空间,方法是用我的仿射矩阵点它们的坐标。根据我之前的问题/答案here,我发现我可以单独设置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 仿射矩阵更好?
【问题讨论】:
-
我不认为这对我有用。这听起来很可怕,但我可以想象可能设置一个投影矩阵,使一个图像看起来好像已经过适当的仿射变换。但是,我需要在一个场景中渲染几张图像,每张图像都需要应用不同的转换。
标签: python transformation mayavi