Re: [Paraview] Programmable filter VTK/numpy

2017-10-25 Thread Cory Quammen
You should change 'array_name' to 'MetaImage'. Sorry I didn't make it clear
that 'array_name' is just a placeholder for whatever name your array has.

Cory

On Wed, Oct 25, 2017 at 7:46 AM, Edoardo Pasca 
wrote:

> Hallo Cory and all,
>
> I've spent a few minutes trying to find out where my script crashes:
>
> 1) I load a MetaImage and the scalars are named 'MetaImage'
>
> 2) Paraview crashes if I use inData = dsa.WrapDataObject(inputs[0])
>
> B = inData.PointData['array_name'] # best practice is to name the array
>
>
> 3) If I use the outData = dsa.WrapDataObject(output)
>
> outData.PointData.append(A,'new_array_name')
>
>
> the output contains nothing. It says type Uniform Rectilinear Grid but there 
> is no point inside.
>
>
> Thanks
>
>
> Edo
>
>
> On Fri, Oct 20, 2017 at 3:48 PM, Cory Quammen 
> wrote:
>
>> On Thu, Oct 19, 2017 at 11:02 AM, Edoardo Pasca 
>> wrote:
>>
>>> Hi Cory,
>>>
>>> thanks for your reply. I'd love to simplify the code like that but there
>>> are 2 issues with that programmable filter
>>>
>>> 1) I miss information on the input and output variables. Where are
>>> defined?
>>>
>>
>> It's a bit complicated to select them in the user interface, but it is
>> possible. There was a related discussion on the mailing list recently on
>> how to do this: http://paraview.markmail.org/thread/j4ynkclxcucpqoa5
>>
>> In the worst case, you can hard-code the array names if they don't
>> change. Relying on the active scalar attribute is old-style VTK and may go
>> away someday in the not-too-near future. Or you could just keep your
>> original code for defining array B.
>>
>>
>>> 2) Paraview crashes. Paraview for windows 5.4.1 and 5.3.0 (official
>>> kitware build)
>>>
>>> It seems a memory access problem.
>>>
>>
>> To debug, I suggest writing your Programmable Filter script a few lines
>> at a time to determine which line causes the crash.
>>
>> HTH,
>> Cory
>>
>>
>>> Edo
>>>
>>> On Thu, Oct 19, 2017 at 2:52 PM, Cory Quammen 
>>> wrote:
>>>
 Hi Edo,

 Documentation for the VTK/Numpy adapter can be found here:

 https://www.paraview.org/ParaView/Doc/Nightly/www/py-doc/par
 aview.vtk.numpy_interface.html?highlight=numpy_interface#num
 py-interface-package

 You will likely be interested in the dataset_adapter module that
 provides a convenient way to wrap VTK data objects in a Python class that
 provides easy read/write access to VTK data arrays as Numpy arrays.

 You could simplify your code quite a bit using this adapter as in the
 following:

 import numpy

 from vtk.util import numpy_support, vtkImageImportFromArray

 import vtk.numpy_interface.dataset_adapter as dsa


 inData = dsa.WrapDataObject(inputs[0])

 B = inData.PointData['array_name'] # best practice is to name the array


 #B = numpy_support.vtk_to_numpy(

 #inputs[0].GetPointData().GetScalars())


 ifLarger = lambda x,M: x if x<=M else 0

 fgt = numpy.frompyfunc(ifLarger,2,1)

 #A = fgt(B,int(2**16*0.8))


 ifSmaller = lambda x,M: x if x>M else 0

 flt = numpy.frompyfunc(ifSmaller,2,1)

 #A = flt(B,int(2**16*0.3))


 ifBetween = lambda x,m,M: ifSmaller(x,m) if x<=M else 0

 fbetw = numpy.frompyfunc(ifBetween,3,1)


 A = fbetw(B,int(2**16*0.3), int(2**16*0.95))


 outData = dsa.WrapDataObject(output)

 outData.PointData.append(A,'new_array_name')


 #A = numpy.asarray(A,dtype=uint16)

 #dims = inputs[0].GetDimensions()

 #A = numpy.reshape(A, (dims[2],dims[1],dims[0]), order='C')

 #A = numpy.ascontiguousarray(A)

 #importer = vtkImageImportFromArray.vtkImageImportFromArray()

 #importer.SetArray(A)

 #importer.SetDataSpacing(inputs[0].GetSpacing())

 #importer.SetDataOrigin(inputs[0].GetOrigin())

 #importer.Update()


 #output.DeepCopy(importer.GetOutput())


 Hope that helps,

 Cory

 On Tue, Oct 17, 2017 at 10:38 AM, Edoardo Pasca 
 wrote:

> Hi there,
>
> In my programmable filter I want to use numpy to perform some
> operations on the pixels (in this case a simple thresholding). I've come 
> up
> with this solution which works. I'm wondering if there are other ways to 
> do
> the conversion from numpy array to vtkImageData.
>
> in the following code I get a numpy array out of the input
> vtkImageData as B. Then I do something on the content an store the result
> in a numpy array, A.
>
> Then I convert the numpy array to a vtkImageData with
> vtkImageImportFromArray importer class.
> Finally I copy the importer output to the output of the programmable
> filter.
>
> Thanks 

Re: [Paraview] Programmable filter VTK/numpy

2017-10-25 Thread Edoardo Pasca
Hallo Cory and all,

I've spent a few minutes trying to find out where my script crashes:

1) I load a MetaImage and the scalars are named 'MetaImage'

2) Paraview crashes if I use inData = dsa.WrapDataObject(inputs[0])

B = inData.PointData['array_name'] # best practice is to name the array


3) If I use the outData = dsa.WrapDataObject(output)

outData.PointData.append(A,'new_array_name')


the output contains nothing. It says type Uniform Rectilinear Grid but
there is no point inside.


Thanks


Edo


On Fri, Oct 20, 2017 at 3:48 PM, Cory Quammen 
wrote:

> On Thu, Oct 19, 2017 at 11:02 AM, Edoardo Pasca 
> wrote:
>
>> Hi Cory,
>>
>> thanks for your reply. I'd love to simplify the code like that but there
>> are 2 issues with that programmable filter
>>
>> 1) I miss information on the input and output variables. Where are
>> defined?
>>
>
> It's a bit complicated to select them in the user interface, but it is
> possible. There was a related discussion on the mailing list recently on
> how to do this: http://paraview.markmail.org/thread/j4ynkclxcucpqoa5
>
> In the worst case, you can hard-code the array names if they don't change.
> Relying on the active scalar attribute is old-style VTK and may go away
> someday in the not-too-near future. Or you could just keep your original
> code for defining array B.
>
>
>> 2) Paraview crashes. Paraview for windows 5.4.1 and 5.3.0 (official
>> kitware build)
>>
>> It seems a memory access problem.
>>
>
> To debug, I suggest writing your Programmable Filter script a few lines at
> a time to determine which line causes the crash.
>
> HTH,
> Cory
>
>
>> Edo
>>
>> On Thu, Oct 19, 2017 at 2:52 PM, Cory Quammen 
>> wrote:
>>
>>> Hi Edo,
>>>
>>> Documentation for the VTK/Numpy adapter can be found here:
>>>
>>> https://www.paraview.org/ParaView/Doc/Nightly/www/py-doc/par
>>> aview.vtk.numpy_interface.html?highlight=numpy_interface#
>>> numpy-interface-package
>>>
>>> You will likely be interested in the dataset_adapter module that
>>> provides a convenient way to wrap VTK data objects in a Python class that
>>> provides easy read/write access to VTK data arrays as Numpy arrays.
>>>
>>> You could simplify your code quite a bit using this adapter as in the
>>> following:
>>>
>>> import numpy
>>>
>>> from vtk.util import numpy_support, vtkImageImportFromArray
>>>
>>> import vtk.numpy_interface.dataset_adapter as dsa
>>>
>>>
>>> inData = dsa.WrapDataObject(inputs[0])
>>>
>>> B = inData.PointData['array_name'] # best practice is to name the array
>>>
>>>
>>> #B = numpy_support.vtk_to_numpy(
>>>
>>> #inputs[0].GetPointData().GetScalars())
>>>
>>>
>>> ifLarger = lambda x,M: x if x<=M else 0
>>>
>>> fgt = numpy.frompyfunc(ifLarger,2,1)
>>>
>>> #A = fgt(B,int(2**16*0.8))
>>>
>>>
>>> ifSmaller = lambda x,M: x if x>M else 0
>>>
>>> flt = numpy.frompyfunc(ifSmaller,2,1)
>>>
>>> #A = flt(B,int(2**16*0.3))
>>>
>>>
>>> ifBetween = lambda x,m,M: ifSmaller(x,m) if x<=M else 0
>>>
>>> fbetw = numpy.frompyfunc(ifBetween,3,1)
>>>
>>>
>>> A = fbetw(B,int(2**16*0.3), int(2**16*0.95))
>>>
>>>
>>> outData = dsa.WrapDataObject(output)
>>>
>>> outData.PointData.append(A,'new_array_name')
>>>
>>>
>>> #A = numpy.asarray(A,dtype=uint16)
>>>
>>> #dims = inputs[0].GetDimensions()
>>>
>>> #A = numpy.reshape(A, (dims[2],dims[1],dims[0]), order='C')
>>>
>>> #A = numpy.ascontiguousarray(A)
>>>
>>> #importer = vtkImageImportFromArray.vtkImageImportFromArray()
>>>
>>> #importer.SetArray(A)
>>>
>>> #importer.SetDataSpacing(inputs[0].GetSpacing())
>>>
>>> #importer.SetDataOrigin(inputs[0].GetOrigin())
>>>
>>> #importer.Update()
>>>
>>>
>>> #output.DeepCopy(importer.GetOutput())
>>>
>>>
>>> Hope that helps,
>>>
>>> Cory
>>>
>>> On Tue, Oct 17, 2017 at 10:38 AM, Edoardo Pasca 
>>> wrote:
>>>
 Hi there,

 In my programmable filter I want to use numpy to perform some
 operations on the pixels (in this case a simple thresholding). I've come up
 with this solution which works. I'm wondering if there are other ways to do
 the conversion from numpy array to vtkImageData.

 in the following code I get a numpy array out of the input vtkImageData
 as B. Then I do something on the content an store the result in a numpy
 array, A.

 Then I convert the numpy array to a vtkImageData with
 vtkImageImportFromArray importer class.
 Finally I copy the importer output to the output of the programmable
 filter.

 Thanks for any suggestions

 Edo

 import numpy

 from vtk.util import numpy_support, vtkImageImportFromArray

 import vtk.numpy_interface.dataset_adapter as dsa


 B = numpy_support.vtk_to_numpy(

 inputs[0].GetPointData().GetScalars())


 ifLarger = lambda x,M: x if x<=M else 0

 fgt = numpy.frompyfunc(ifLarger,2,1)

 #A = fgt(B,int(2**16*0.8))

Re: [Paraview] Programmable filter VTK/numpy

2017-10-20 Thread Cory Quammen
On Thu, Oct 19, 2017 at 11:02 AM, Edoardo Pasca 
wrote:

> Hi Cory,
>
> thanks for your reply. I'd love to simplify the code like that but there
> are 2 issues with that programmable filter
>
> 1) I miss information on the input and output variables. Where are defined?
>

It's a bit complicated to select them in the user interface, but it is
possible. There was a related discussion on the mailing list recently on
how to do this: http://paraview.markmail.org/thread/j4ynkclxcucpqoa5

In the worst case, you can hard-code the array names if they don't change.
Relying on the active scalar attribute is old-style VTK and may go away
someday in the not-too-near future. Or you could just keep your original
code for defining array B.


> 2) Paraview crashes. Paraview for windows 5.4.1 and 5.3.0 (official
> kitware build)
>
> It seems a memory access problem.
>

To debug, I suggest writing your Programmable Filter script a few lines at
a time to determine which line causes the crash.

HTH,
Cory


> Edo
>
> On Thu, Oct 19, 2017 at 2:52 PM, Cory Quammen 
> wrote:
>
>> Hi Edo,
>>
>> Documentation for the VTK/Numpy adapter can be found here:
>>
>> https://www.paraview.org/ParaView/Doc/Nightly/www/py-doc/
>> paraview.vtk.numpy_interface.html?highlight=numpy_
>> interface#numpy-interface-package
>>
>> You will likely be interested in the dataset_adapter module that provides
>> a convenient way to wrap VTK data objects in a Python class that provides
>> easy read/write access to VTK data arrays as Numpy arrays.
>>
>> You could simplify your code quite a bit using this adapter as in the
>> following:
>>
>> import numpy
>>
>> from vtk.util import numpy_support, vtkImageImportFromArray
>>
>> import vtk.numpy_interface.dataset_adapter as dsa
>>
>>
>> inData = dsa.WrapDataObject(inputs[0])
>>
>> B = inData.PointData['array_name'] # best practice is to name the array
>>
>>
>> #B = numpy_support.vtk_to_numpy(
>>
>> #inputs[0].GetPointData().GetScalars())
>>
>>
>> ifLarger = lambda x,M: x if x<=M else 0
>>
>> fgt = numpy.frompyfunc(ifLarger,2,1)
>>
>> #A = fgt(B,int(2**16*0.8))
>>
>>
>> ifSmaller = lambda x,M: x if x>M else 0
>>
>> flt = numpy.frompyfunc(ifSmaller,2,1)
>>
>> #A = flt(B,int(2**16*0.3))
>>
>>
>> ifBetween = lambda x,m,M: ifSmaller(x,m) if x<=M else 0
>>
>> fbetw = numpy.frompyfunc(ifBetween,3,1)
>>
>>
>> A = fbetw(B,int(2**16*0.3), int(2**16*0.95))
>>
>>
>> outData = dsa.WrapDataObject(output)
>>
>> outData.PointData.append(A,'new_array_name')
>>
>>
>> #A = numpy.asarray(A,dtype=uint16)
>>
>> #dims = inputs[0].GetDimensions()
>>
>> #A = numpy.reshape(A, (dims[2],dims[1],dims[0]), order='C')
>>
>> #A = numpy.ascontiguousarray(A)
>>
>> #importer = vtkImageImportFromArray.vtkImageImportFromArray()
>>
>> #importer.SetArray(A)
>>
>> #importer.SetDataSpacing(inputs[0].GetSpacing())
>>
>> #importer.SetDataOrigin(inputs[0].GetOrigin())
>>
>> #importer.Update()
>>
>>
>> #output.DeepCopy(importer.GetOutput())
>>
>>
>> Hope that helps,
>>
>> Cory
>>
>> On Tue, Oct 17, 2017 at 10:38 AM, Edoardo Pasca 
>> wrote:
>>
>>> Hi there,
>>>
>>> In my programmable filter I want to use numpy to perform some operations
>>> on the pixels (in this case a simple thresholding). I've come up with this
>>> solution which works. I'm wondering if there are other ways to do the
>>> conversion from numpy array to vtkImageData.
>>>
>>> in the following code I get a numpy array out of the input vtkImageData
>>> as B. Then I do something on the content an store the result in a numpy
>>> array, A.
>>>
>>> Then I convert the numpy array to a vtkImageData with
>>> vtkImageImportFromArray importer class.
>>> Finally I copy the importer output to the output of the programmable
>>> filter.
>>>
>>> Thanks for any suggestions
>>>
>>> Edo
>>>
>>> import numpy
>>>
>>> from vtk.util import numpy_support, vtkImageImportFromArray
>>>
>>> import vtk.numpy_interface.dataset_adapter as dsa
>>>
>>>
>>> B = numpy_support.vtk_to_numpy(
>>>
>>> inputs[0].GetPointData().GetScalars())
>>>
>>>
>>> ifLarger = lambda x,M: x if x<=M else 0
>>>
>>> fgt = numpy.frompyfunc(ifLarger,2,1)
>>>
>>> #A = fgt(B,int(2**16*0.8))
>>>
>>>
>>> ifSmaller = lambda x,M: x if x>M else 0
>>>
>>> flt = numpy.frompyfunc(ifSmaller,2,1)
>>>
>>> #A = flt(B,int(2**16*0.3))
>>>
>>>
>>> ifBetween = lambda x,m,M: ifSmaller(x,m) if x<=M else 0
>>>
>>> fbetw = numpy.frompyfunc(ifBetween,3,1)
>>>
>>>
>>> A = fbetw(B,int(2**16*0.3), int(2**16*0.95))
>>>
>>>
>>>
>>> A = numpy.asarray(A,dtype=uint16)
>>>
>>> dims = inputs[0].GetDimensions()
>>>
>>> A = numpy.reshape(A, (dims[2],dims[1],dims[0]), order='C')
>>>
>>> A = numpy.ascontiguousarray(A)
>>>
>>> importer = vtkImageImportFromArray.vtkImageImportFromArray()
>>>
>>> importer.SetArray(A)
>>>
>>> importer.SetDataSpacing(inputs[0].GetSpacing())
>>>
>>> importer.SetDataOrigin(inputs[0].GetOrigin())
>>>
>>> importer.Update()
>>>
>>>
>>> 

Re: [Paraview] Programmable filter VTK/numpy

2017-10-19 Thread Cory Quammen
Hi Edo,

Documentation for the VTK/Numpy adapter can be found here:

https://www.paraview.org/ParaView/Doc/Nightly/www/py-doc/paraview.vtk.numpy_interface.html?highlight=numpy_interface#numpy-interface-package

You will likely be interested in the dataset_adapter module that provides a
convenient way to wrap VTK data objects in a Python class that provides
easy read/write access to VTK data arrays as Numpy arrays.

You could simplify your code quite a bit using this adapter as in the
following:

import numpy

from vtk.util import numpy_support, vtkImageImportFromArray

import vtk.numpy_interface.dataset_adapter as dsa


inData = dsa.WrapDataObject(inputs[0])

B = inData.PointData['array_name'] # best practice is to name the array


#B = numpy_support.vtk_to_numpy(

#inputs[0].GetPointData().GetScalars())


ifLarger = lambda x,M: x if x<=M else 0

fgt = numpy.frompyfunc(ifLarger,2,1)

#A = fgt(B,int(2**16*0.8))


ifSmaller = lambda x,M: x if x>M else 0

flt = numpy.frompyfunc(ifSmaller,2,1)

#A = flt(B,int(2**16*0.3))


ifBetween = lambda x,m,M: ifSmaller(x,m) if x<=M else 0

fbetw = numpy.frompyfunc(ifBetween,3,1)


A = fbetw(B,int(2**16*0.3), int(2**16*0.95))


outData = dsa.WrapDataObject(output)

outData.PointData.append(A,'new_array_name')


#A = numpy.asarray(A,dtype=uint16)

#dims = inputs[0].GetDimensions()

#A = numpy.reshape(A, (dims[2],dims[1],dims[0]), order='C')

#A = numpy.ascontiguousarray(A)

#importer = vtkImageImportFromArray.vtkImageImportFromArray()

#importer.SetArray(A)

#importer.SetDataSpacing(inputs[0].GetSpacing())

#importer.SetDataOrigin(inputs[0].GetOrigin())

#importer.Update()


#output.DeepCopy(importer.GetOutput())


Hope that helps,

Cory

On Tue, Oct 17, 2017 at 10:38 AM, Edoardo Pasca 
wrote:

> Hi there,
>
> In my programmable filter I want to use numpy to perform some operations
> on the pixels (in this case a simple thresholding). I've come up with this
> solution which works. I'm wondering if there are other ways to do the
> conversion from numpy array to vtkImageData.
>
> in the following code I get a numpy array out of the input vtkImageData as
> B. Then I do something on the content an store the result in a numpy array,
> A.
>
> Then I convert the numpy array to a vtkImageData with
> vtkImageImportFromArray importer class.
> Finally I copy the importer output to the output of the programmable
> filter.
>
> Thanks for any suggestions
>
> Edo
>
> import numpy
>
> from vtk.util import numpy_support, vtkImageImportFromArray
>
> import vtk.numpy_interface.dataset_adapter as dsa
>
>
> B = numpy_support.vtk_to_numpy(
>
> inputs[0].GetPointData().GetScalars())
>
>
> ifLarger = lambda x,M: x if x<=M else 0
>
> fgt = numpy.frompyfunc(ifLarger,2,1)
>
> #A = fgt(B,int(2**16*0.8))
>
>
> ifSmaller = lambda x,M: x if x>M else 0
>
> flt = numpy.frompyfunc(ifSmaller,2,1)
>
> #A = flt(B,int(2**16*0.3))
>
>
> ifBetween = lambda x,m,M: ifSmaller(x,m) if x<=M else 0
>
> fbetw = numpy.frompyfunc(ifBetween,3,1)
>
>
> A = fbetw(B,int(2**16*0.3), int(2**16*0.95))
>
>
>
> A = numpy.asarray(A,dtype=uint16)
>
> dims = inputs[0].GetDimensions()
>
> A = numpy.reshape(A, (dims[2],dims[1],dims[0]), order='C')
>
> A = numpy.ascontiguousarray(A)
>
> importer = vtkImageImportFromArray.vtkImageImportFromArray()
>
> importer.SetArray(A)
>
> importer.SetDataSpacing(inputs[0].GetSpacing())
>
> importer.SetDataOrigin(inputs[0].GetOrigin())
>
> importer.Update()
>
>
> output.DeepCopy(importer.GetOutput())
>
>
>
> --
> Edo
> I know you think you understand what you thought I said, but I'm not sure
> you realize that what you heard is not what I meant (prob. Alan Greenspan)
> :wq
>
> ___
> 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 ParaView Wiki at:
> http://paraview.org/Wiki/ParaView
>
> Search the list archives at: http://markmail.org/search/?q=ParaView
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/paraview
>
>


-- 
Cory Quammen
Staff R Engineer
Kitware, Inc.
___
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 ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

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

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


[Paraview] Programmable filter VTK/numpy

2017-10-17 Thread Edoardo Pasca
Hi there,

In my programmable filter I want to use numpy to perform some operations on
the pixels (in this case a simple thresholding). I've come up with this
solution which works. I'm wondering if there are other ways to do the
conversion from numpy array to vtkImageData.

in the following code I get a numpy array out of the input vtkImageData as
B. Then I do something on the content an store the result in a numpy array,
A.

Then I convert the numpy array to a vtkImageData with
vtkImageImportFromArray importer class.
Finally I copy the importer output to the output of the programmable filter.

Thanks for any suggestions

Edo

import numpy

from vtk.util import numpy_support, vtkImageImportFromArray

import vtk.numpy_interface.dataset_adapter as dsa


B = numpy_support.vtk_to_numpy(

inputs[0].GetPointData().GetScalars())


ifLarger = lambda x,M: x if x<=M else 0

fgt = numpy.frompyfunc(ifLarger,2,1)

#A = fgt(B,int(2**16*0.8))


ifSmaller = lambda x,M: x if x>M else 0

flt = numpy.frompyfunc(ifSmaller,2,1)

#A = flt(B,int(2**16*0.3))


ifBetween = lambda x,m,M: ifSmaller(x,m) if x<=M else 0

fbetw = numpy.frompyfunc(ifBetween,3,1)


A = fbetw(B,int(2**16*0.3), int(2**16*0.95))



A = numpy.asarray(A,dtype=uint16)

dims = inputs[0].GetDimensions()

A = numpy.reshape(A, (dims[2],dims[1],dims[0]), order='C')

A = numpy.ascontiguousarray(A)

importer = vtkImageImportFromArray.vtkImageImportFromArray()

importer.SetArray(A)

importer.SetDataSpacing(inputs[0].GetSpacing())

importer.SetDataOrigin(inputs[0].GetOrigin())

importer.Update()


output.DeepCopy(importer.GetOutput())



-- 
Edo
I know you think you understand what you thought I said, but I'm not sure
you realize that what you heard is not what I meant (prob. Alan Greenspan)
:wq
___
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 ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

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

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