how to clip vtkImageData with the specified mask?

In my project, I have segmented the heart, which means that I have a mask. The mask means the pixel inside heart is one, while the pixel outside heart is zero.

Now, I want to display only this heart using vtkFixedPointVolumeRayCastMapper without other tissue.

How can I display only this heart with the mask information?

I find vtkClipVolume may be helpful for my requirement. But it accept vtkImplicitFunction rather than a mask.

How can I clip vtkImageData with the specified mask? Any suggestion is appreciated~~~

I find vtkClipVolume will output a vtkUnstructedGrid. Is it possible to directly convert a vtkImageData to vtkUnstructedGrid?

The vtkFixedPointVolumeRayCastMapper only works with vtkImageData, so vtkUnstructedGrid is not useful for this situation.

One simple way to apply a mask is by multiplying with vtkImageMathematics. This might require changing the mask data type to the image data type, with vtkImageCast.

Or, another way to apply a mask is vtkImageStencil:

imageToStencil = vtk.vtkImageToImageStencil()
imageToStencil.SetInputData(maskImage)

stencilFilter = vtk.vtkImageStencil()
stencilFilter.SetStencilConnection(imageToStencil.GetOutputPort())
stencilFilter.SetInputData(heartImage)
# set "background" to a value that will be transparent for volume rendering,
# for example 0 for MRI, or -1000 for CT
stencilFilter.SetBackgroundValue(0)
2 Likes

@dgobbi Thank you for the kindly reply.