[vtk-developers] The ImageStencil Issue
David Gobbi
dgobbi at atamai.com
Mon Aug 28 12:36:40 EDT 2006
Karthik Krishnan wrote:
> Karthik Krishnan wrote:
>
>> Hi David,
>>
>> I find stencils very useful. I've been using them as a data structure
>> for representing segmentations.
>>
>> One of the things I would like to contribute to stencils is minkowski
>> operators or "set" operations on stencils. For instance union of two
>> stencils, stencilA-stencilB, intersection of stencils etc.. The need
>> for these arises when a 3D volume has a few disconnected hand-drawn
>> segmentations and as a user, I would like to discard a segment etc..
>> I've been using these separately in a derived class, but I could move
>> them to the vtkImageStencilData class itself.
>
> They've have been added to the vtkImageStencilData class.
>
> Thanks
> -karthik
Great, that should do it. You don't also happen to have
vtkAlgorithm-type class for pipelining these operations, do you? If
not, I can add it to the wish list for stencils.
- David
>> Another addition, I would hope to see would be grayscale stencils for
>> fuzzy segmentations. Imagine a brush widget dabbing a fuzzy /
>> dithered stroke and you would like to use the stencildata to
>> represent opacity. It would be great if the stencils could store a
>> DataArray in addition to maintaining the ExtentLists. This could
>> possibly be done in a sublcass.
>>
>> Thanks
>> -karthik
>>
>>
>> David Gobbi wrote:
>>
>>> 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