[vtk-developers] The ImageStencil Issue

David Gobbi dgobbi at atamai.com
Tue Aug 22 15:02:39 EDT 2006


Hi All,

I'd like to redress some ugliness that I introduced to VTK a few years back.

The vtkImageStencilSource class requires the Spacing and Origin of 
whichever image eventually uses the stencil to be propagated the wrong 
way along the pipeline.  Ouch!

Obviously the vtkImageStencilSource should actually take an Image as an 
input and should then use that image to get the Spacing and Origin to 
use for the stencil.  This is a fairly minor change.  For VTK 5.2, I can 
then make VTK produce a deprecation warning if people don't set an input.

I would call the method SetInformationInput() to make it clear that only 
the information (the Spacing, Origin, and WholeExtent) of the data would 
be used.  Also, vtkPolyDataToImageStencil() needs it SetInput() method 
for the polydata input.

For example:

stencilSource = vtkImplicitFunctionToImageStencil()
stencilSource.SetInput(vtkSphere())
stencilSource.SetInformationInput(input)

histogram = vtkImageAccumulate()
histogram.SetStencil(stencilSource.GetOutput())
histogram.SetInput(input)

Do people think this is a good change?  Are there many people out there 
who even use stencils in VTK?  How many people know what a stencil is?  
(Hint: it is an image mask stored in an efficient run-length format 
instead of vtkImageData format).

Also, I'm not sure what the methods should be named in light of the VTK 
5 pipeline changes.   Maybe I should name them as follows:

SetInformationInputConnection(vtkAlgorithmInput *) instead of 
SetInformationInput(vtkImageData *)
SetStencilInputConnection(vtkAlgorithmInput *) instead of 
SetStencil(vtkImageStencilData *)

I'd like to get this right, and I think that only small changes are 
necessary to do so.

Also, of course, I'd like to see more of the filters in Imaging 
utilizing stencils.  Right now only a handful do (Blend, Reslice, 
Stencil, Accumulate).  The potential here is very high... a stencil 
allows you to perform an operation only within a specified region of 
interest, where the shape of the region can be whatever you desire.  The 
ROI can even be described by a vtkPolyData mesh or by a 
vtkImplicitFunction, since these types can be converted efficiently into 
vtkImageStencilData.

 - David










More information about the vtk-developers mailing list