[vtk-developers] A vtkDataSampler and image interpolation

Bill Lorensen bill.lorensen at gmail.com
Tue Jul 5 11:32:59 EDT 2011


David,

Looks like a nice abstraction. In ITK we do a similar thing. We call
them interpolators... They can be used independent of a filter but are
used in many filters.

Bill

On Tue, Jul 5, 2011 at 8:26 AM, David Gobbi <david.gobbi at gmail.com> wrote:
> Hi Will,
>
> If I modified the vtkProbeFilter to use the vtkDataSampler, it would
> allow people to customize the way that vtkProbeFilter interpolates the
> data.
>
> The interface would look like this: a SetDataSampler() method would be
> added to vtkProbeFilter
>
> void vtkProbeFilter::SetDataSampler(vtkDataSampler *);
>
> The probe filter would have a default vtkDataSampler object which
> would use FindCell to interpolate the data (much like the way
> vtkProbeFilter works now).  But here is where the magic comes.  The
> user would be able to provide a different data sampler:
>
> vtkImageSampler *isample = vtkImageSampler::New();
> probeFilter->SetDataSampler(isample);
>
> The vtkImageSampler is for image data, it has interpolation code that
> is specifically written for structured data and is orders of magnitude
> faster than using FindCell to interpolate the data.  Also, it provides
> the option of choosing different interpolation modes: nearest, linear,
> and cubic.
>
> So, in a nutshell, adding a SetDataSampler() method would make it
> possible for users to customize the way that vtkProbeFilter
> interpolates values from its Input.  The use of vtkImageSampler here
> is just one example, if a person needs to use vtkProbeFilter on an FEM
> data set and knows of an efficient way to interpolate their FEM, then
> they could write a vtkDataSampler class specifically for their FEM.
>
> Another way to describe my goal is as follows: I have a whole bunch of
> image interpolation code that I've written and tweaked over the past
> 10+ years, and I want to be able to use this interpolation code with
> the VTK graphics pipeline.  The vtkDataSampler class is how I hope to
> achieve this.
>
>  - David
>
>
> On Tue, Jul 5, 2011 at 3:49 AM, Will Schroeder
> <will.schroeder at kitware.com> wrote:
>> David-
>> What's the relationship of this vtkDataSampler class to the vtkProbeFilter?
>> W
>>
>> On Mon, Jul 4, 2011 at 1:23 PM, David Gobbi <david.gobbi at gmail.com> wrote:
>>>
>>> Hi All,
>>>
>>> I've written some new interpolation classes for VTK, both for images
>>> and for other data sets.  One thing that I want to ensure is that the
>>> abstract interface is something that people will be satisfied with.
>>> I use the same ScalarMode constants as vtkMapper, but there might
>>> be a better way of selecting arrays that I am not aware of:
>>>
>>> class vtkDataSampler : public vtkObject
>>> {
>>>  // set the data to interpolate (does not establish pipeline connection)
>>>  void SetInput(vtkDataObject *);
>>>
>>>  // update any internal state variables prior to commencing interpolation
>>>  void Update();
>>>
>>>  // get an interpolated value, return "false" if out of bounds
>>>  bool GetSample(const double point[3], double *value);
>>>
>>>  // get an interpolated value (meant for use by wrapper languages)
>>>  double GetSample(double x, double y, double z, int component);
>>>
>>>  // set the scalar mode (same as vtkMapper scalar modes)
>>>  void SetScalarMode(int mode);
>>>  void SetScalarModeToDefault();
>>>  void SetScalarModeToUsePointData();
>>>  void SetScalarModeToUseCellData();
>>>  void SetScalarModeToUsePointFieldData();
>>>  void SetScalarModeToUseCellFieldData();
>>>
>>>  // set the array, if chosen scalar mode is field data
>>>  void SetArrayName(const char *name);
>>>
>>>  void SetTolerance(double);
>>>  void SetLocator(vtkLocator *locator);
>>> };
>>>
>>> The changes are on gerrit, if people want to see the full implementation:
>>> http://review.source.kitware.com/2004
>>>
>>>  - David
> _______________________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://www.vtk.org/mailman/listinfo/vtk-developers
>
>



More information about the vtk-developers mailing list