Skip to content

Commit 9a6b1bf

Browse files
committed
fix: Rotation applied in surface_image_stencil() based on image orientation
1 parent 1f2d44a commit 9a6b1bf

File tree

1 file changed

+13
-11
lines changed

1 file changed

+13
-11
lines changed

src/deepali/utils/vtk/image.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
vtkImageData,
99
vtkImageStencilData,
1010
vtkImageStencilToImage,
11-
vtkMatrixToLinearTransform,
1211
vtkPolyData,
1312
vtkPolyDataToImageStencil,
13+
vtkTransform,
1414
vtkTransformPolyDataFilter,
1515
)
1616

@@ -42,27 +42,29 @@ def surface_mesh_grid(*mesh: vtkPolyData, resolution: Optional[float] = None) ->
4242

4343

4444
def surface_image_stencil(mesh: vtkPolyData, grid: Grid) -> vtkImageStencilData:
45-
r"""Convert vtkPolyData surface mesh to image stencil."""
46-
max_index = [n - 1 for n in grid.size().tolist()]
47-
48-
rot = np.eye(4, dtype=np.float)
49-
rot[:3, :3] = np.array(grid.direction).reshape(3, 3)
50-
rot = numpy_to_vtk_matrix4x4(rot)
51-
52-
transform = vtkMatrixToLinearTransform()
53-
transform.SetInput(rot)
54-
45+
r"""Convert vtkPolyData surface mesh to image stencil."""
46+
# Create the transform
47+
transform = vtkTransform()
48+
transform.Translate(grid.center().tolist())
49+
transform.Concatenate(numpy_to_vtk_matrix4x4(grid.direction().numpy().T)) # type: ignore
50+
transform.Translate(grid.center().neg().tolist())
51+
52+
# Apply the transform to the polydata
5553
transformer = vtkTransformPolyDataFilter()
5654
transformer.SetInputData(mesh)
5755
transformer.SetTransform(transform)
5856

57+
# Convert the transformed polydata to an image stencil
58+
grid = Grid(size=grid.size(), spacing=grid.spacing(), center=grid.center())
59+
max_index = [n - 1 for n in grid.size()]
5960
converter = vtkPolyDataToImageStencil()
6061
converter.SetInputConnection(transformer.GetOutputPort())
6162
converter.SetOutputOrigin(grid.origin().tolist())
6263
converter.SetOutputSpacing(grid.spacing().tolist())
6364
converter.SetOutputWholeExtent([0, max_index[0], 0, max_index[1], 0, max_index[2]])
6465
converter.Update()
6566

67+
# Get the output stencil
6668
stencil = vtkImageStencilData()
6769
stencil.DeepCopy(converter.GetOutput())
6870
return stencil

0 commit comments

Comments
 (0)