vtk 3D图像的旋转/平移与插值(Python)

4

我有2个矩阵:

#for example
rotation = matrix([[ 0.61782155,  0.78631834,  0.        ],
            [ 0.78631834, -0.61782155,  0.        ],
            [ 0.        ,  0.        , -1.        ]])
translation = matrix([[-0.33657291],
            [ 1.04497454],
            [ 0.        ]])
vtkinputpath = "/hello/world/vtkfile.vtk"
vtkoutputpath = "/hello/world/vtkrotatedfile.vtk"
interpolation = "linear"

我有一个包含3D图像的vtk文件,我想在Python中创建一个函数来旋转/平移它并进行插值。
import vtk

def rotate(vtkinputpath, vtkoutputpath, rotation, translation, interpolation):
  ...

我正在尝试从transformJ插件源代码中汲取灵感(请参见此处了解其工作原理

我想使用vtk.vtkTransform,但我并不真正理解它的工作原理:这些示例与我想要做的不太接近。这就是我用它做的事情:

reader = vtk.vtkXMLImageDataReader()
reader.SetFileName(vtkinputpath)
reader.Update()
transform = reader.vtkTransform()
transform.RotateX(rotation[0])
transform.RotateY(rotation[1])
transform.RotateZ(rotation[2])
transform.Translate(translation[0], translation[1], translation[2])
#and I don't know how I can choose the parameter of the interpolation

但那样行不通... 我在这里看到了函数RotateWXYZ()的存在:

# create a transform that rotates the cone
transform = vtk.vtkTransform()
transform.RotateWXYZ(45,0,1,0)
transformFilter=vtk.vtkTransformPolyDataFilter()
transformFilter.SetTransform(transform)
transformFilter.SetInputConnection(source.GetOutputPort())
transformFilter.Update()

但我不明白这些代码的作用。 我的主要问题是找不到Python下的vtk文档...

你能否向我推荐一个关于Python中vtk的文档网站?或者至少可以解释一下vtktransform(rotateWXYZ())是如何工作的吗? 拜托了,我完全迷失了,什么都不起作用。

1个回答

3

我不确定是否有特定的Python文档,但这个链接可以帮助理解RotateWXYZ的工作原理:http://www.vtk.org/doc/nightly/html/classvtkTransform.html#a9a6bcc6b824fb0a9ee3a9048aa6b262c

要创建所需的变换,您可以将旋转和平移矩阵组合成一个4x4矩阵,为此,我们将旋转矩阵放在列和行0、1和2中,将平移向量放在右列中,底行为0,0,0,1。这里有更多相关信息。例如:

0.61782155   0.78631834  0      -0.33657291
0.78631834  -0.61782155  0       1.04497454
0            0          -1       0
0            0           0       1

然后您可以使用SetMatrix直接将矩阵设置为vtkTransform:

matrix = [0.61782155,0.78631834,0,-0.33657291,0.78631834,-0.61782155,0,1.04497454,0,0,-1,0,0,0,0,1]
transform.SetMatrix(matrix)

编辑:已编辑以完善矩阵变量中的值。


我已经阅读了您链接的描述,谢谢。但是我不确定我是否正确理解了SetMatrix函数... 我正在尝试将我的旋转矩阵转换为角度和向量(<=>旋转轴)。我试图理解vtkTransform的源代码(http://www.vtk.org/doc/nightly/html/vtkTransform_8h_source.html),但我不确定它的作用是什么... 所以非常感谢,如果我的尝试不成功,我会更新我的问题。 - EaudeRoche
我编辑了答案以显示矩阵中的正确值。如果您使用SetMatrix将该矩阵设置为变换,则可以获得应用于您示例中给出的旋转和平移的变换。之后,您可以使用vtkImageReslice将变换应用于图像。希望这能对您有所帮助。 - Alberto F. Pena

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接