Quantcast

Python: numpy array->vtkImage->paraview

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Python: numpy array->vtkImage->paraview

Justin Weber
Greetings,

The story: I started using python/numpy to perform data manipulation (3D connected components, etc..) and processing of 3D arrays. Next I managed to use vtk to perform volume rendering etc. to visualize the data. Now, I want to save the vtk data to a format that can be used in paraview so that a side by side comparison with CFD simulations can be performed. I am having trouble with saving the vtk data to a file to be used in paraview.

System: Windows 7, Python 2.7, vtkVersion:04859120.

1) Numpy array to vtk (example here) works fine:

data=np.array() #sum numpy array dim=20x20x40
dataImporter = vtk.vtkImageImport()
data_string = data_matrix.tostring()
dataImporter.CopyImportVoidPointer(data_string, len(data_string))
dataImporter.SetDataScalarTypeToUnsignedChar()
dataImporter.SetNumberOfScalarComponents(1)
dataImporter.SetDataExtent(0, 20, 0, 20, 0, 40)
dataImporter.SetWholeExtent(0, 20, 0, 20, 0, 40)

2) Displaying the volume (example here) works fine:
# This class describes how the volume is rendered (through ray tracing).
compositeFunction = vtk.vtkVolumeRayCastCompositeFunction()
# We can finally create our volume. We also have to specify the data for it, as well as how the data will be rendered.
volumeMapper = vtk.vtkVolumeRayCastMapper()
volumeMapper.SetVolumeRayCastFunction(compositeFunction)
volumeMapper.SetInputConnection(dataImporter.GetOutputPort())
 
# The class vtkVolume is used to pair the preaviusly declared volume as well as the properties to be used when rendering that volume.
volume = vtk.vtkVolume()
volume.SetMapper(volumeMapper)
volume.SetProperty(volumeProperty)

etc....

3) Writing data to some vtk file (can't figure out how to do this):
writer=vtk.vtkImageWriter()
writer.SetInputConnection(dataImporter.GetOutputPort())
writer.SetFileName('./test.vtk')
writer.Update()
writer.Write()

When i try opening the test.vtk file with paraview, there is no information in it.

Any help would be much appreciated!

Thanks
Justin

_______________________________________________
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Python: numpy array->vtkImage->paraview

David Gobbi
Hi Justin,

You don't need to convert the array to a string, the VTK importer can
access the numpy array directly.  So instead of doing this:

data_string = data_matrix.tostring()
dataImporter.CopyImportVoidPointer(data_string, len(data_string))

you can do this:

dataImporter.CopyImportVoidPointer(data_matrix, data_matrix.nbytes)

or you can avoid the copy of the data altogether, though this is a bit
dangerous because the importer will need to be able to access the
numpy array's memory each time the importer executes:

dataImporter.SetImportVoidPointer(data_matrix)


About the writer, the vtkImageWriter is for writing raw, unformatted
data.  It doesn't write .vtk files.  Try using vtkDataSetWriter
instead, which writes in the .vtk format, or vtkXMLImageDataWriter,
which writes in the newer XML format.

 - David

On Fri, Mar 9, 2012 at 10:17 AM, Justin Weber <[hidden email]> wrote:

> Greetings,
>
> The story: I started using python/numpy to perform data manipulation (3D
> connected components, etc..) and processing of 3D arrays. Next I managed to
> use vtk to perform volume rendering etc. to visualize the data. Now, I want
> to save the vtk data to a format that can be used in paraview so that a side
> by side comparison with CFD simulations can be performed. I am having
> trouble with saving the vtk data to a file to be used in paraview.
>
> System: Windows 7, Python 2.7, vtkVersion:04859120.
>
> 1) Numpy array to vtk (example here) works fine:
>
> data=np.array() #sum numpy array dim=20x20x40
> dataImporter = vtk.vtkImageImport()
> data_string = data_matrix.tostring()
> dataImporter.CopyImportVoidPointer(data_string, len(data_string))
> dataImporter.SetDataScalarTypeToUnsignedChar()
> dataImporter.SetNumberOfScalarComponents(1)
> dataImporter.SetDataExtent(0, 20, 0, 20, 0, 40)
> dataImporter.SetWholeExtent(0, 20, 0, 20, 0, 40)
>
> 2) Displaying the volume (example here) works fine:
> # This class describes how the volume is rendered (through ray tracing).
> compositeFunction = vtk.vtkVolumeRayCastCompositeFunction()
> # We can finally create our volume. We also have to specify the data for it,
> as well as how the data will be rendered.
> volumeMapper = vtk.vtkVolumeRayCastMapper()
> volumeMapper.SetVolumeRayCastFunction(compositeFunction)
> volumeMapper.SetInputConnection(dataImporter.GetOutputPort())
>
> # The class vtkVolume is used to pair the preaviusly declared volume as well
> as the properties to be used when rendering that volume.
> volume = vtk.vtkVolume()
> volume.SetMapper(volumeMapper)
> volume.SetProperty(volumeProperty)
>
> etc....
>
> 3) Writing data to some vtk file (can't figure out how to do this):
> writer=vtk.vtkImageWriter()
> writer.SetInputConnection(dataImporter.GetOutputPort())
> writer.SetFileName('./test.vtk')
> writer.Update()
> writer.Write()
>
> When i try opening the test.vtk file with paraview, there is no information
> in it.
>
> Any help would be much appreciated!
>
> Thanks
> Justin
_______________________________________________
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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Python: numpy array->vtkImage->paraview

David Gobbi
Hi Justin,

Please keep your replies on the list (though I know gmail doesn't
reply-all by default).

The data doesn't have to be a cube.  I suspect the problem is the
ordering of the dimensions.  VTK uses x,y,z as the order while C
(and probably numpy as well) use [z][y][x] as the index ordering.

 - David


On Fri, Mar 9, 2012 at 11:08 AM, Justin Weber <[hidden email]> wrote:

> David,
>
> Thanks for your help! That did the trick, I have my data working in paraview
> now!
>
> Quick question though, with the vtk.vtkImageImport(), does the SetDataExtent
> and SetWholeExtent have to be be a cube? My numpy array is 20x20x40 however
> if I set the Extents to (0,19,0,19,0,39), the vtk data is not correct.
> Instead if I turn my numpy array into 40x40x40 and my extents
> (0,39,0,39,0,39) it works fine.
>
> Thanks!
> Justin
>
>
> On Fri, Mar 9, 2012 at 12:33 PM, David Gobbi <[hidden email]> wrote:
>>
>> Hi Justin,
>>
>> You don't need to convert the array to a string, the VTK importer can
>> access the numpy array directly.  So instead of doing this:
>>
>> data_string = data_matrix.tostring()
>> dataImporter.CopyImportVoidPointer(data_string, len(data_string))
>>
>> you can do this:
>>
>> dataImporter.CopyImportVoidPointer(data_matrix, data_matrix.nbytes)
>>
>> or you can avoid the copy of the data altogether, though this is a bit
>> dangerous because the importer will need to be able to access the
>> numpy array's memory each time the importer executes:
>>
>> dataImporter.SetImportVoidPointer(data_matrix)
>>
>>
>> About the writer, the vtkImageWriter is for writing raw, unformatted
>> data.  It doesn't write .vtk files.  Try using vtkDataSetWriter
>> instead, which writes in the .vtk format, or vtkXMLImageDataWriter,
>> which writes in the newer XML format.
>>
>>  - David
>>
>> On Fri, Mar 9, 2012 at 10:17 AM, Justin Weber <[hidden email]> wrote:
>> > Greetings,
>> >
>> > The story: I started using python/numpy to perform data manipulation (3D
>> > connected components, etc..) and processing of 3D arrays. Next I managed
>> > to
>> > use vtk to perform volume rendering etc. to visualize the data. Now, I
>> > want
>> > to save the vtk data to a format that can be used in paraview so that a
>> > side
>> > by side comparison with CFD simulations can be performed. I am having
>> > trouble with saving the vtk data to a file to be used in paraview.
>> >
>> > System: Windows 7, Python 2.7, vtkVersion:04859120.
>> >
>> > 1) Numpy array to vtk (example here) works fine:
>> >
>> > data=np.array() #sum numpy array dim=20x20x40
>> > dataImporter = vtk.vtkImageImport()
>> > data_string = data_matrix.tostring()
>> > dataImporter.CopyImportVoidPointer(data_string, len(data_string))
>> > dataImporter.SetDataScalarTypeToUnsignedChar()
>> > dataImporter.SetNumberOfScalarComponents(1)
>> > dataImporter.SetDataExtent(0, 20, 0, 20, 0, 40)
>> > dataImporter.SetWholeExtent(0, 20, 0, 20, 0, 40)
>> >
>> > 2) Displaying the volume (example here) works fine:
>> > # This class describes how the volume is rendered (through ray tracing).
>> > compositeFunction = vtk.vtkVolumeRayCastCompositeFunction()
>> > # We can finally create our volume. We also have to specify the data for
>> > it,
>> > as well as how the data will be rendered.
>> > volumeMapper = vtk.vtkVolumeRayCastMapper()
>> > volumeMapper.SetVolumeRayCastFunction(compositeFunction)
>> > volumeMapper.SetInputConnection(dataImporter.GetOutputPort())
>> >
>> > # The class vtkVolume is used to pair the preaviusly declared volume as
>> > well
>> > as the properties to be used when rendering that volume.
>> > volume = vtk.vtkVolume()
>> > volume.SetMapper(volumeMapper)
>> > volume.SetProperty(volumeProperty)
>> >
>> > etc....
>> >
>> > 3) Writing data to some vtk file (can't figure out how to do this):
>> > writer=vtk.vtkImageWriter()
>> > writer.SetInputConnection(dataImporter.GetOutputPort())
>> > writer.SetFileName('./test.vtk')
>> > writer.Update()
>> > writer.Write()
>> >
>> > When i try opening the test.vtk file with paraview, there is no
>> > information
>> > in it.
>> >
>> > Any help would be much appreciated!
>> >
>> > Thanks
>> > Justin
>
>
_______________________________________________
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
Loading...