[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