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 <cory.quam...@kitware.com> wrote: > On Thu, Oct 19, 2017 at 11:02 AM, Edoardo Pasca <edo.pask...@gmail.com> > 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 <cory.quam...@kitware.com> >> 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 <edo.pask...@gmail.com> >>> 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&D Engineer >>> Kitware, Inc. >>> >> >> >> >> -- >> 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 >> > > > > -- > Cory Quammen > Staff R&D Engineer > Kitware, Inc. > -- 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