[ITK-users] [ITK] ITK PyBuffer get physical point coordinates

Matt McCormick matt.mccormick at kitware.com
Mon May 8 08:47:14 EDT 2017


Hi Fabio,

Was the header included?

  #include "itkPhysicalPointImageSource.h"

HTH,
Matt

On Mon, May 8, 2017 at 7:40 AM, D'Isidoro  Fabio <fisidoro at ethz.ch> wrote:
> Thank you for your reply.
>
>
>
> I am now working on a itk project with C++ (no Python binding), but I can’t
> reproduce what I did in Python with the PhysicalPointImageSource filter:
>
>
>
>        typedef itk::Image< itk::Vector<Ctype, 3>, Dimension > PhyImageType;
>
> typedef itk:: typedef itk::PhysicalPointImageSource< PhyImageType >
> PhysicalPointImagefilter; // error ITK has no member
> PhysicalPointImageSource
>
>
>
> It is strange to me, since it is part of manual… Is this filter not for the
> ITK C++ distribution? If this is the case, how can I get an image of
> physical coordinates with itk C++?
>
>
>
> Thank you again,
>
> Fabio.
>
>
>
> From: Francois Budin [mailto:francois.budin at kitware.com]
> Sent: Dienstag, 2. Mai 2017 17:49
>
>
> To: D'Isidoro Fabio <fisidoro at ethz.ch>
> Cc: Lowekamp, Bradley (NIH/NLM/LHC) [C] <blowekamp at mail.nih.gov>;
> insight-users at itk.org
> Subject: Re: [ITK-users] [ITK] ITK PyBuffer get physical point coordinates
>
>
>
> Hello Fabio,
>
> The main difference between itk.GetArrayFromImage() and
> itk.PyBuffer[ImageType].GetArrayFromImage() is that itk.GetAraryFromImage()
> is a wrapping of itk.PyBuffer[ImageType].GetArrayFromImage() in Python that
> automatically finds the type of the input image (and is a shorted command
> line). The reason why this worked but not
> itk.PyBuffer[ImageType.GetArrayFromImage() is because in the wrapping, if a
> filter is given instead of an image, the output of the filter will be used.
>
> Which means that what really happen is that you gave a filter to a function
> (itk.PyBuffer[ImageType].GetArrayFromImage()) expecting an image.
>
> If you want to work with the long command, you have to make sure that the
> input is an image:
>
> image=source.GetOutput()
> itk.PyBuffer[ImageType].GetArrayFromImage(image)
>
> And then it should work.
>
> Hope this helps,
>
> Francois
>
>
>
> On Tue, May 2, 2017 at 11:20 AM, D'Isidoro Fabio <fisidoro at ethz.ch> wrote:
>
> Hi Francois,
>
>
>
> It works with your commands, the difference being the use of:
>
>
>
> itk.GetArrayFromImage(source)
>
>
>
> in your version, instead of:
>
>
>
> itk.PyBuffer[ImageType].GetArrayFromImage(source)
>
>
>
> in my version.
>
>
>
> May you explain me the difference, and why using PyBuffer does not work for
> this case?
>
>
>
> Also, when using VectorImage I get the error “No module named
> 'ITKQuadEdgeMeshPython'”. This is the only module that failed in my ITK
> Python build. Is this a known bug or it was just for my build?
>
>
>
> Thank you!
>
>
>
> Fabio.
>
> From: Francois Budin [mailto:francois.budin at kitware.com]
> Sent: Freitag, 28. April 2017 23:12
> To: D'Isidoro Fabio <fisidoro at ethz.ch>
> Cc: Lowekamp, Bradley (NIH/NLM/LHC) [C] <blowekamp at mail.nih.gov>;
> insight-users at itk.org
> Subject: Re: [ITK-users] [ITK] ITK PyBuffer get physical point coordinates
>
>
>
> Hello Fabio,
>
> I was able to use this filter in Python. Here is the commands I typed:
> In [14]: ImageType=itk.Image[itk.Vector[itk.F,2],2]
>
> In [15]: source=itk.PhysicalPointImageSource[ImageType].New()
>
> In [16]: source.SetSize([5,5])
>
> In [17]: source.SetOrigin([0,0])
>
> In [18]: source.SetSpacing([.5,.5])
>
> In [19]: source.Update()
>
> In [20]: itk.GetArrayFromImage(source)
> Out[20]:
> itkndarray([[[ 0. ,  0. ],
>         [ 0.5,  0. ],
>         [ 1. ,  0. ],
>         [ 1.5,  0. ],
>         [ 2. ,  0. ]],
>
>        [[ 0. ,  0.5],
>         [ 0.5,  0.5],
>         [ 1. ,  0.5],
>         [ 1.5,  0.5],
>         [ 2. ,  0.5]],
>
>        [[ 0. ,  1. ],
>         [ 0.5,  1. ],
>         [ 1. ,  1. ],
>         [ 1.5,  1. ],
>         [ 2. ,  1. ]],
>
>        [[ 0. ,  1.5],
>         [ 0.5,  1.5],
>         [ 1. ,  1.5],
>         [ 1.5,  1.5],
>         [ 2. ,  1.5]],
>
>        [[ 0. ,  2. ],
>         [ 0.5,  2. ],
>         [ 1. ,  2. ],
>         [ 1.5,  2. ],
>         [ 2. ,  2. ]]], dtype=float32)
>
> It also worked with VectorImages:
>
> In [22]: ImageType=itk.VectorImage[itk.F,2]
>
> In [23]: source=itk.PhysicalPointImageSource[ImageType].New()
>
> In [24]: source.SetOrigin([0,0])
>
> In [25]: source.SetSize([5,5])
>
> In [26]: source.SetSpacing([.5,.5])
>
> In [27]: source.Update()
>
> In [28]: itk.GetArrayFromImage(source)
>
>
>
> To answer your questions:
>
> 1) This filter is only wrapped over image of vectors and vector images. You
> can have the list of types that are available in Python with
> itk.PhysicalPointImageSource.GetTypes()
>
> 2) You may have a version of ITK Python for which VectorImage is not wrapped
> for PyBuffer. You can try to update your ITK Python [1]
>
> Hope this helps,
>
> Francois
>
>
> [1] https://github.com/InsightSoftwareConsortium/ITKPythonPackage
>
>
>
> On Fri, Apr 28, 2017 at 12:05 PM, D'Isidoro Fabio <fisidoro at ethz.ch> wrote:
>
> Thank you for your reply.
>
>
>
> 1)     I have tried as a first step the following:
>
>
>
> DRRPhy = itk.PhysicalPointImageSource[itk.Image[itk.Point[itk.F, Dimension],
> Dimension]].New()
>
>
>
> But I get the error:
>
>
>
> KeyError: "itkTemplate : No template (<class 'itkPointPython.itkPointF3'>,
> 3) for the itk::Image class"
>
>
>
> So I guess I can’t generate an image with itk.Points as PixelType. Therefore
> I chose to use a VectorImage as ImageType in Input to the
> PhysicalPointImageSource.
>
>
>
> sourceImage = itk.PhysicalPointImageSource[itk.VectorImage[itk.F,
> Dimension]].New()
>
> sourceImage.SetSize(size)
>
> sourceImage.SetSpacing(spacing)
>
> sourceImage.SetOrigin(origin)
>
> #DRRPhy.SetIndex(start) it does not work, how to set the start index?
>
> DRRPhy.SetDirection(direction)
>
>
>
> 2)     However, using PyBuffer to get a numpy array form that does not work:
>
>
>
> sourceImageArray = itk. PyBuffer[ImageType].GetArrayFromImage(sourceImage)
>
>
>
> I get the error:
>
>
>
> AttributeError: 'itkPhysicalPointImageSourceVIF3' object has no attribute
> 'GetLargestPossibleRegion'
>
>
>
>
>
> Am I doing the right thing in point 1) ?
>
> How could I solve point 2) ?
>
>
>
> Thank you !
>
>
>
> Fabio.
>
>
>
> From: Lowekamp, Bradley (NIH/NLM/LHC) [C] [mailto:blowekamp at mail.nih.gov]
> Sent: Donnerstag, 27. April 2017 23:16
> To: D'Isidoro Fabio <fisidoro at ethz.ch>
> Cc: insight-users at itk.org
> Subject: Re: [ITK] [ITK-users] ITK PyBuffer get physical point coordinates
>
>
>
> Hi!
>
>
>
> You can generate an image of the physical locations of each pixel with the
> PhysicalPointImageSource filter:
>
> https://itk.org/Doxygen/html/classitk_1_1PhysicalPointImageSource.html
>
>
>
> Very recently added is the SetReferenceImage, which can be use to copy the
> meta data from one image to the parameters of this filter. If your version
> is not super recent then you can manually set the Size, Spacing, Origin,
> Direction and StartIndex.
>
>
>
> After you generate the point image you should be able to convert to with the
> same method.
>
>
>
> HTH,
>
> Brad
>
>
>
>
>
> On Apr 27, 2017, at 4:58 PM, D'Isidoro Fabio <fisidoro at ethz.ch> wrote:
>
>
>
> Hallo,
>
>
>
> I know it’s possible to get a numpy array of an itk image with:
>
>
>
> itk.PyBuffer[ImageType].GetArrayFromImage(Image)
>
>
>
> Is it by any chance also possible to obtain a (flattended) numpy array of
> the physical coordinates of the image pixels too?
>
>
>
> Thank you!
>
>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
> _______________________________________________
> Community mailing list
> Community at itk.org
> http://public.kitware.com/mailman/listinfo/community
>
>
>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
>
>
>
>
>
>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users
>


More information about the Insight-users mailing list