[vtkusers] How do I interpolate scalars along the geometric surface?

Takayoshi Kurachi kurakurara at gmail.com
Mon Feb 16 11:03:01 EST 2009


Hi Marcel,

Thanks for your quick reply.

I still want to believe that VTK has a class to solve this task...
It can interpolate between multiple points with colors very well,
even in the simple example code of "Cube" (Cube.cxx)...

Reading the class description, "vtkInterpolateDataSetAttributes"
seems to be the one I need, but haven't figured out how to use. :(


Does anyone know how to use this class?


 >> Hell Marcel,
 > how could you know? ... ]:-}>
Well, of course I know your name. I even know you are a PhD student
at the Department of Neurophysics Max Planck Institute for Human
Cognitive and Brain Sciences. :)

Taka


Marcel Weiss wrote:
>> Hell Marcel,
> how could you know? ... ]:-}>
> 
>> The question is how do I calculate the weighted averaging using
>> the geodesic distances for the interpolation?
>> Is there any class for this purpose? I've been trying to use
>> vtkInterpolateDataSetAttributes and vtkTupleInterpolator, but
>> neither do not work well so far... :(
>> Or do I need to write the filter by myself??
> 
> At least I don´t see any filter in VTK being able to solve this task.
> but I assume there might be some code available online ... especially for the distance problem ...  
> 
> Marcel Weiss
> PhD student
> Department of Neurophysics
> Max Planck Institute for Human Cognitive and Brain Sciences 
> 
> 
> Marcel Weiss wrote:
>> using the geodesic distances (along the brain surface mesh) to points with given scalar (source points)  vectors should enable to do some kind of weighted averaging for mesh points without scalars using the  n closest source points ... 
>>
>> Marcel Weiss
>> PhD student
>> Department of Neurophysics
>> Max Planck Institute for Human Cognitive and Brain Sciences 
>>
>> ----- Original Message -----
>> From: "Takayoshi Kurachi" <kurakurara at gmail.com>
>> To: vtkusers at vtk.org
>> Sent: Monday, February 16, 2009 2:54:19 PM GMT +01:00 Amsterdam / Berlin / Bern / Rome / Stockholm / Vienna
>> Subject: [vtkusers] How do I interpolate scalars along the geometric surface?
>>
>> Hello All,
>>
>> I'm trying to interpolate scalar values along the geometric
>> surface and having a very difficult time.
>>
>> I have a geometric data of a brain in 3DS file and want to set
>> scalar value (of electroencephalogram) in its 21 locations of
>> the surface points, and interpolate for the rest of the points
>> along the surface to show the scalar values in color.
>>
>> With the code below, I could get the vtkPointData and set
>> scalar values on some of the points as the dataset attribute,
>> but it seems that the value is shown in color only within the
>> cell that contains the point with the attribute value I set.
>> I want to interpolate the scalar along the entire surface by
>> the 21 given values.
>>
>> How can I interpolate scalar values along the surface?
>>
>> Many thanks in advance.
>>
>> Taka
>>
>>
>> // Read geometric data from 3DS file
>> vtk3DSImporter* importer = vtk3DSImporter::New();
>> importer->ComputeNormalsOff();
>> importer->SetFileName("data/brain.3ds");
>> importer->Read();
>>
>> // create lookup table (white <-> red)
>> vtkLookupTable *lut = vtkLookupTable::New();
>> lut->SetTableRange (0, 1);
>> lut->SetHueRange (1, 1);
>> lut->SetSaturationRange (0, 1);
>> lut->SetValueRange (1, 1);
>> lut->Build();
>>
>> // create render window and interactor
>> vtkRenderWindow* renWin = vtkRenderWindow::New();
>> vtkRenderWindowInteractor* iren = vtkRenderWindowInteractor::New();
>>
>> // get data from the importer as vtkDataSet
>> vtkActorCollection* actors = importer->GetRenderer()->GetActors();
>> actors->InitTraversal();
>> vtkActor* actor = actors->GetLastActor();
>> vtkMapper* mapper = actor->GetMapper();
>> vtkDataSet* data = mapper->GetInput();
>> vtkPointData* ptData = data->GetPointData();
>>
>> data->Update();
>>
>> // get point ids of 4 points for testing (actually i will set 21 points)
>> double bounds[6];
>> data->GetBounds(bounds);
>> vtkIdType id1 = data->FindPoint(0, 0, bounds[5]);
>> vtkIdType id2 = data->FindPoint(0, 0, bounds[6]);
>> vtkIdType id3 = data->FindPoint(bounds[0], 0, 0);
>> vtkIdType id4 = data->FindPoint(bounds[1], 0, 0);
>>
>> // create array of scalars in vtkFloatArray
>> vtkFloatArray *scalars = vtkFloatArray::New();
>> scalars->InsertTuple1(id1, 1.0); // set the value 1.0 for testing
>> scalars->InsertTuple1(id2, 1.0);
>> scalars->InsertTuple1(id3, 1.0);
>> scalars->InsertTuple1(id4, 1.0);
>> scalars->SetLookupTable(lut);
>>
>> // set the scalars to the vtkPointData as the dataset attribute
>> ptData->Initialize();
>> ptData->SetScalars(scalars);
>>
>> // ... setting up mapper, actor, camera, etc.
>>
>>
>> _______________________________________________
>> Powered by www.kitware.com
>>
>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>
>> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>
>> Follow this link to subscribe/unsubscribe:
>> http://www.vtk.org/mailman/listinfo/vtkusers
>>
> 



More information about the vtkusers mailing list