confused with vtkProbeFilter

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

confused with vtkProbeFilter

Martin Genet-3
Dear everyone:

Sorry for the triviality, but I'm getting confused with vtkProbeFilter:
trying to probe an image with a mesh (not the opposite: I need the mesh
data interpolated onto the image points), but can't get it to work.

Consider the following code:

> import numpy
> import vtk
>
> image = vtk.vtkImageData()
> image.SetDimensions([3, 3, 1])
> image.SetSpacing(1./numpy.array(image.GetDimensions()))
> image.SetOrigin(numpy.array(image.GetSpacing())/2)
>
> points = vtk.vtkPoints()
> points.InsertNextPoint([1./4, 1./4, 2./4])
> points.InsertNextPoint([3./4, 1./4, 2./4])
> points.InsertNextPoint([3./4, 3./4, 2./4])
> points.InsertNextPoint([1./4, 3./4, 2./4])
>
> cell = vtk.vtkQuad()
> cell.GetPointIds().SetId(0, 0)
> cell.GetPointIds().SetId(1, 1)
> cell.GetPointIds().SetId(2, 2)
> cell.GetPointIds().SetId(3, 3)
>
> cell_array = vtk.vtkCellArray()
> cell_array.InsertNextCell(cell)
>
> ugrid = vtk.vtkUnstructuredGrid()
> ugrid.SetPoints(points)
> ugrid.SetCells(vtk.VTK_QUAD, cell_array)
>
> farray = vtk.vtkFloatArray()
> farray.SetNumberOfComponents(1)
> farray.SetNumberOfTuples(1)
> farray.SetTuple1(0, 2.)
> ugrid.GetCellData().AddArray(farray)
>
> farray = vtk.vtkFloatArray()
> farray.SetNumberOfComponents(1)
> farray.SetNumberOfTuples(4)
> farray.SetTuple1(0, 2.)
> farray.SetTuple1(2, 2.)
> farray.SetTuple1(3, 2.)
> farray.SetTuple1(4, 2.)
> ugrid.GetPointData().AddArray(farray)
>
> probe = vtk.vtkProbeFilter()
> if (vtk.vtkVersion.GetVTKMajorVersion() >= 6):
>     probe.SetInputData(image)
>     probe.SetSourceData(ugrid)
> else:
>     probe.SetInput(image)
>     probe.SetSource(ugrid)
> probe.Update()
> probed_image = probe.GetOutput()

Problem is: probed_image contains only one array, called
vtkValidPointMask, but no interpolated data.

If I do:
> probed_scalars = probed_image.GetPointData().GetArray("vtkValidPointMask")
> for k_voxels in xrange(probed_scalars.GetNumberOfTuples()): print
> probed_scalars.GetTuple1(k_voxels)
I'm getting:
> 0.0
> 0.0
> 0.0
> 0.0
> 1.0
> 0.0
> 0.0
> 0.0
> 0.0
So I'm guessing the filter is able to figure out which image point lies
within the mesh and which does not, but I can't find the interpolated
data? Any help would be super appreciated. Thanks!

Martin

_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers
Reply | Threaded
Open this post in threaded view
|

Re: confused with vtkProbeFilter

Sujin Philip
Hi Martin,

You need to set names for the point and cell data arrays.
farray.SetName("pointdata") and farray.SetName("celldata")

after doing that your code works for me.

-Sujin


On Fri, May 13, 2016 at 12:16 PM, Martin Genet <[hidden email]> wrote:
Dear everyone:

Sorry for the triviality, but I'm getting confused with vtkProbeFilter: trying to probe an image with a mesh (not the opposite: I need the mesh data interpolated onto the image points), but can't get it to work.

Consider the following code:
import numpy
import vtk

image = vtk.vtkImageData()
image.SetDimensions([3, 3, 1])
image.SetSpacing(1./numpy.array(image.GetDimensions()))
image.SetOrigin(numpy.array(image.GetSpacing())/2)

points = vtk.vtkPoints()
points.InsertNextPoint([1./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 3./4, 2./4])
points.InsertNextPoint([1./4, 3./4, 2./4])

cell = vtk.vtkQuad()
cell.GetPointIds().SetId(0, 0)
cell.GetPointIds().SetId(1, 1)
cell.GetPointIds().SetId(2, 2)
cell.GetPointIds().SetId(3, 3)

cell_array = vtk.vtkCellArray()
cell_array.InsertNextCell(cell)

ugrid = vtk.vtkUnstructuredGrid()
ugrid.SetPoints(points)
ugrid.SetCells(vtk.VTK_QUAD, cell_array)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(1)
farray.SetTuple1(0, 2.)
ugrid.GetCellData().AddArray(farray)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(4)
farray.SetTuple1(0, 2.)
farray.SetTuple1(2, 2.)
farray.SetTuple1(3, 2.)
farray.SetTuple1(4, 2.)
ugrid.GetPointData().AddArray(farray)

probe = vtk.vtkProbeFilter()
if (vtk.vtkVersion.GetVTKMajorVersion() >= 6):
    probe.SetInputData(image)
    probe.SetSourceData(ugrid)
else:
    probe.SetInput(image)
    probe.SetSource(ugrid)
probe.Update()
probed_image = probe.GetOutput()

Problem is: probed_image contains only one array, called vtkValidPointMask, but no interpolated data.

If I do:
probed_scalars = probed_image.GetPointData().GetArray("vtkValidPointMask")
for k_voxels in xrange(probed_scalars.GetNumberOfTuples()): print probed_scalars.GetTuple1(k_voxels)
I'm getting:
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
So I'm guessing the filter is able to figure out which image point lies within the mesh and which does not, but I can't find the interpolated data? Any help would be super appreciated. Thanks!

Martin

_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers


_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers
Reply | Threaded
Open this post in threaded view
|

Re: confused with vtkProbeFilter

Martin Genet-3
Thanks for your help, Sujin.

What do you mean exactly by "your code works for me"? I sat the arrays names but am still getting the same behavior: the code runs fine, but I can't find the interpolated data. Do you know where it is? Thanks again.

Martin

On 13/05/2016 18:53, Sujin Philip wrote:
Hi Martin,

You need to set names for the point and cell data arrays.
farray.SetName("pointdata") and farray.SetName("celldata")

after doing that your code works for me.

-Sujin


On Fri, May 13, 2016 at 12:16 PM, Martin Genet <[hidden email]> wrote:
Dear everyone:

Sorry for the triviality, but I'm getting confused with vtkProbeFilter: trying to probe an image with a mesh (not the opposite: I need the mesh data interpolated onto the image points), but can't get it to work.

Consider the following code:
import numpy
import vtk

image = vtk.vtkImageData()
image.SetDimensions([3, 3, 1])
image.SetSpacing(1./numpy.array(image.GetDimensions()))
image.SetOrigin(numpy.array(image.GetSpacing())/2)

points = vtk.vtkPoints()
points.InsertNextPoint([1./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 3./4, 2./4])
points.InsertNextPoint([1./4, 3./4, 2./4])

cell = vtk.vtkQuad()
cell.GetPointIds().SetId(0, 0)
cell.GetPointIds().SetId(1, 1)
cell.GetPointIds().SetId(2, 2)
cell.GetPointIds().SetId(3, 3)

cell_array = vtk.vtkCellArray()
cell_array.InsertNextCell(cell)

ugrid = vtk.vtkUnstructuredGrid()
ugrid.SetPoints(points)
ugrid.SetCells(vtk.VTK_QUAD, cell_array)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(1)
farray.SetTuple1(0, 2.)
ugrid.GetCellData().AddArray(farray)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(4)
farray.SetTuple1(0, 2.)
farray.SetTuple1(2, 2.)
farray.SetTuple1(3, 2.)
farray.SetTuple1(4, 2.)
ugrid.GetPointData().AddArray(farray)

probe = vtk.vtkProbeFilter()
if (vtk.vtkVersion.GetVTKMajorVersion() >= 6):
    probe.SetInputData(image)
    probe.SetSourceData(ugrid)
else:
    probe.SetInput(image)
    probe.SetSource(ugrid)
probe.Update()
probed_image = probe.GetOutput()

Problem is: probed_image contains only one array, called vtkValidPointMask, but no interpolated data.

If I do:
probed_scalars = probed_image.GetPointData().GetArray("vtkValidPointMask")
for k_voxels in xrange(probed_scalars.GetNumberOfTuples()): print probed_scalars.GetTuple1(k_voxels)
I'm getting:
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
So I'm guessing the filter is able to figure out which image point lies within the mesh and which does not, but I can't find the interpolated data? Any help would be super appreciated. Thanks!

Martin

_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers



_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers
Reply | Threaded
Open this post in threaded view
|

Re: confused with vtkProbeFilter

Sujin Philip
Hi Martin,

Attached is the modified script that I ran. This is the output of the script:
pointdata 1 9
(0.0,) (0.0,) (0.0,) (0.0,) (2.0,) (0.0,) (0.0,) (0.0,) (0.0,)
celldata 1 9
(0.0,) (0.0,) (0.0,) (0.0,) (2.0,) (0.0,) (0.0,) (0.0,) (0.0,)
vtkValidPointMask 1 9
(0.0,) (0.0,) (0.0,) (0.0,) (1.0,) (0.0,) (0.0,) (0.0,) (0.0,)

The results look correct. Is this not the behaviour you are getting? Let me know if you still have issues.

Thanks
Sujin


On Fri, May 13, 2016 at 7:45 PM, Martin Genet <[hidden email]> wrote:
Thanks for your help, Sujin.

What do you mean exactly by "your code works for me"? I sat the arrays names but am still getting the same behavior: the code runs fine, but I can't find the interpolated data. Do you know where it is? Thanks again.

Martin


On 13/05/2016 18:53, Sujin Philip wrote:
Hi Martin,

You need to set names for the point and cell data arrays.
farray.SetName("pointdata") and farray.SetName("celldata")

after doing that your code works for me.

-Sujin


On Fri, May 13, 2016 at 12:16 PM, Martin Genet <[hidden email]> wrote:
Dear everyone:

Sorry for the triviality, but I'm getting confused with vtkProbeFilter: trying to probe an image with a mesh (not the opposite: I need the mesh data interpolated onto the image points), but can't get it to work.

Consider the following code:
import numpy
import vtk

image = vtk.vtkImageData()
image.SetDimensions([3, 3, 1])
image.SetSpacing(1./numpy.array(image.GetDimensions()))
image.SetOrigin(numpy.array(image.GetSpacing())/2)

points = vtk.vtkPoints()
points.InsertNextPoint([1./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 3./4, 2./4])
points.InsertNextPoint([1./4, 3./4, 2./4])

cell = vtk.vtkQuad()
cell.GetPointIds().SetId(0, 0)
cell.GetPointIds().SetId(1, 1)
cell.GetPointIds().SetId(2, 2)
cell.GetPointIds().SetId(3, 3)

cell_array = vtk.vtkCellArray()
cell_array.InsertNextCell(cell)

ugrid = vtk.vtkUnstructuredGrid()
ugrid.SetPoints(points)
ugrid.SetCells(vtk.VTK_QUAD, cell_array)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(1)
farray.SetTuple1(0, 2.)
ugrid.GetCellData().AddArray(farray)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(4)
farray.SetTuple1(0, 2.)
farray.SetTuple1(2, 2.)
farray.SetTuple1(3, 2.)
farray.SetTuple1(4, 2.)
ugrid.GetPointData().AddArray(farray)

probe = vtk.vtkProbeFilter()
if (vtk.vtkVersion.GetVTKMajorVersion() >= 6):
    probe.SetInputData(image)
    probe.SetSourceData(ugrid)
else:
    probe.SetInput(image)
    probe.SetSource(ugrid)
probe.Update()
probed_image = probe.GetOutput()

Problem is: probed_image contains only one array, called vtkValidPointMask, but no interpolated data.

If I do:
probed_scalars = probed_image.GetPointData().GetArray("vtkValidPointMask")
for k_voxels in xrange(probed_scalars.GetNumberOfTuples()): print probed_scalars.GetTuple1(k_voxels)
I'm getting:
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
So I'm guessing the filter is able to figure out which image point lies within the mesh and which does not, but I can't find the interpolated data? Any help would be super appreciated. Thanks!

Martin

_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers




_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers

test.py (2K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: confused with vtkProbeFilter

Martin Genet-3
Works like a charm…thanks! Martin

On 16/05/2016 19:55, Sujin Philip wrote:
Hi Martin,

Attached is the modified script that I ran. This is the output of the script:
pointdata 1 9
(0.0,) (0.0,) (0.0,) (0.0,) (2.0,) (0.0,) (0.0,) (0.0,) (0.0,)
celldata 1 9
(0.0,) (0.0,) (0.0,) (0.0,) (2.0,) (0.0,) (0.0,) (0.0,) (0.0,)
vtkValidPointMask 1 9
(0.0,) (0.0,) (0.0,) (0.0,) (1.0,) (0.0,) (0.0,) (0.0,) (0.0,)

The results look correct. Is this not the behaviour you are getting? Let me know if you still have issues.

Thanks
Sujin


On Fri, May 13, 2016 at 7:45 PM, Martin Genet <[hidden email]> wrote:
Thanks for your help, Sujin.

What do you mean exactly by "your code works for me"? I sat the arrays names but am still getting the same behavior: the code runs fine, but I can't find the interpolated data. Do you know where it is? Thanks again.

Martin


On 13/05/2016 18:53, Sujin Philip wrote:
Hi Martin,

You need to set names for the point and cell data arrays.
farray.SetName("pointdata") and farray.SetName("celldata")

after doing that your code works for me.

-Sujin


On Fri, May 13, 2016 at 12:16 PM, Martin Genet <[hidden email]> wrote:
Dear everyone:

Sorry for the triviality, but I'm getting confused with vtkProbeFilter: trying to probe an image with a mesh (not the opposite: I need the mesh data interpolated onto the image points), but can't get it to work.

Consider the following code:
import numpy
import vtk

image = vtk.vtkImageData()
image.SetDimensions([3, 3, 1])
image.SetSpacing(1./numpy.array(image.GetDimensions()))
image.SetOrigin(numpy.array(image.GetSpacing())/2)

points = vtk.vtkPoints()
points.InsertNextPoint([1./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 1./4, 2./4])
points.InsertNextPoint([3./4, 3./4, 2./4])
points.InsertNextPoint([1./4, 3./4, 2./4])

cell = vtk.vtkQuad()
cell.GetPointIds().SetId(0, 0)
cell.GetPointIds().SetId(1, 1)
cell.GetPointIds().SetId(2, 2)
cell.GetPointIds().SetId(3, 3)

cell_array = vtk.vtkCellArray()
cell_array.InsertNextCell(cell)

ugrid = vtk.vtkUnstructuredGrid()
ugrid.SetPoints(points)
ugrid.SetCells(vtk.VTK_QUAD, cell_array)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(1)
farray.SetTuple1(0, 2.)
ugrid.GetCellData().AddArray(farray)

farray = vtk.vtkFloatArray()
farray.SetNumberOfComponents(1)
farray.SetNumberOfTuples(4)
farray.SetTuple1(0, 2.)
farray.SetTuple1(2, 2.)
farray.SetTuple1(3, 2.)
farray.SetTuple1(4, 2.)
ugrid.GetPointData().AddArray(farray)

probe = vtk.vtkProbeFilter()
if (vtk.vtkVersion.GetVTKMajorVersion() >= 6):
    probe.SetInputData(image)
    probe.SetSourceData(ugrid)
else:
    probe.SetInput(image)
    probe.SetSource(ugrid)
probe.Update()
probed_image = probe.GetOutput()

Problem is: probed_image contains only one array, called vtkValidPointMask, but no interpolated data.

If I do:
probed_scalars = probed_image.GetPointData().GetArray("vtkValidPointMask")
for k_voxels in xrange(probed_scalars.GetNumberOfTuples()): print probed_scalars.GetTuple1(k_voxels)
I'm getting:
0.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
0.0
So I'm guessing the filter is able to figure out which image point lies within the mesh and which does not, but I can't find the interpolated data? Any help would be super appreciated. Thanks!

Martin

_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers





_______________________________________________
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

Search the list archives at: http://markmail.org/search/?q=vtkusers

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/vtkusers