I have a vtkImageData
called img
that I want to use the vtkImageReslice
algorithm on.
I want to reslice this image data to create a subimage that has its voxels aligned to a different coordinate system.
To do this i am using the following code:
reslice = vtk.vtkImageReslice()
reslice.SetInterpolationModeToLinear()
reslice.SetResliceAxes(get_subimg_rotation_matrix4x4())
reslice.SetResliceAxesOrigin(get_subimg_origin())
reslice.SetOutputOrigin(get_subimg_origin())
dims = get_subimg_dimensions()
reslice.SetOutputExtent(0, dims[0]-1, 0, dims[1]-1, 0, dims[2]-1)
reslice.SetOutputSpacing(get_subimg_spacing())
transform = vtk.vtkTransform()
transform .SetMatrix(get_subimg_rotation_matrix4x4())
reslice.SetResliceTransform(transform.GetInverse())
reslice.SetInputData(img)
reslice.Update()
subimg = reslice.GetOutput()
Here, get_subimg_rotation_matrix4x4() just returns a rotation matrix that defines the reslice axes, like:
[
[cos(theta), -sin(theta), 0.0, 0.0],
[sin(theta), cos(theta), 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0]
]
When theta=0, i.e. the reslice axes are the identity matrix and therefore aligned with img
, it works.
However, even when theta
is nonzero, the subimg
is not aligned with these reslice axes. Its as if the reslice axes were again the identity matrix.
Anyone have an example that can accomplish what I am trying to do?