[vtk-developers] A vtkDataSampler and image interpolation

Bill Lorensen bill.lorensen at gmail.com
Tue Jul 5 12:16:41 EDT 2011


I was not suggesting a name change. Just an observation.

On Tue, Jul 5, 2011 at 11:50 AM, David Gobbi <david.gobbi at gmail.com> wrote:
> 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