[vtk-developers] A vtkDataSampler and image interpolation

David Gobbi david.gobbi at gmail.com
Tue Jul 5 11:50:46 EDT 2011


Hi Bill,

I'm well aware of the ITK interpolators.  But VTK needs something more
general, to encompass the broad range of data descriptions that VTK
supports.

 - David


On Tue, Jul 5, 2011 at 9:32 AM, Bill Lorensen <bill.lorensen at gmail.com> wrote:
> 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