[Insight-developers] SimpleITK - Image::GetPixel methods

Gaëtan Lehmann gaetan.lehmann at jouy.inra.fr
Wed Apr 27 05:11:10 EDT 2011


Le 27 avr. 11 à 03:41, Bradley Lowekamp a écrit :

> Great!
>
> I know I was doing things not quite right there!
>
>
> On Apr 26, 2011, at 5:36 AM, Gaëtan Lehmann wrote:
>>
>>
>> It would be interesting to look at the GetPixel() performance - if  
>> it is a lot slower than the specialized versions, then it may be  
>> better to not hide the specialized versions, for the users who  
>> wants to write faster code.
>
> Is your concern that the cost of all the if statements will be too  
> great?

Yes.
I'm not sure it will have much effect on performance, but it would be  
nice to look at it.

I've made a very simple timing test for WrapITK/Python when I moved to  
a pure swig implementation, and it was quite informative:

   Wrapping/WrapITK/Languages/Python/Tests/timing.py

> I have seen switch like statements implemented with dictionaries.  
> This should reduce the switch statement from cost of N to logN or  
> perhaps they are implemented with a hash... either way N is only 8,  
> and it should be an interesting comparison.

Yes, would be nice to compare.

>
> The current implementation in sitkImage is  that the correct set/get  
> methods is required to be call or else and exception will be thrown.  
> For strongly typed languages like C++ or Java this will be a pain,  
> for for the implementation we have discussed here in python or other  
> scripting languages, should be pretty easy to use.
>

I think it should be possible to use overloaded methods to avoid that  
pain with the Set methods.
For the Get method, I don't see what else could be done...

>
> On another note, what do you think of implementing the iteration  
> hidden function in python for the simpleITK Image?

looks like a very good idea. There could be 2 versions:

* the standard __iter__ would return only the pixel value
* another one which would also return the index

Could be something like:

def __iter__(self):
   for idx, value in self.IterateWithIndex():
      yield value

def IterateWithIndex(self):
   if self.GetDimension() == 2:
     for x in range(self.GetWidth()):
       for y in range(self.GetHeight()):
         idx = (x, y)
         value = self.GetPixel(*idx)
         yield idx, value
   elif self.GetDimension() == 3:
     for x in range(self.GetWidth()):
       for y in range(self.GetHeight()):
         for z in range(self.GetDepth()):
           idx = (x, y, z)
           value = self.GetPixel(*idx)
           yield idx, value


that can be used that way

   # compute the mean pixel value in the image
   mean = sum(img) / len(img)

or

   # compute the square value pixel wise
   for idx, value in img.IterateWithIndex():
     img[idx] = value**2

Gaëtan


>
> Brad
>
>>
>> Gaëtan
>>
>>
>>
>>
>> Le 22 avr. 11 à 22:25, Bradley Lowekamp a écrit :
>>
>>> Gaetan,
>>>
>>> You have provided valuable feedback with several other python  
>>> related issues and was looking for comments on the current.
>>>
>>> Despite it sounding easy, implementing the sitk::Image::GetPixel  
>>> method is rather challenging due to the numerous types of images  
>>> underneath. I have a branch in my SimpleITK github, which will add  
>>> this much needed feature.
>>>
>>> The sitk::Image class will be customized for each language to  
>>> provide a natural interface. This is what I have done for python:
>>>
>>> https://github.com/blowekamp/SimpleITK/commit/b821617f013ee18c7cc2ae727eec3d20ad2b5875
>>>
>>> I realize now it needs some comments....
>>>
>>> It is not clear to me if the index argument should be multiple  
>>> arguments or an array, or both. As arguments are not strongly  
>>> typed, I am not certain of how to do methods overloading, based on  
>>> the arguments. In another methods I used isinstance(), but some  
>>> frown about that. Do you have a suggestion on how I should  
>>> overload methods in python? What do you think of this current  
>>> interface?
>>>
>>> Brad
>>>
>>> ========================================================
>>> Bradley Lowekamp
>>> Lockheed Martin Contractor for
>>> Office of High Performance Computing and Communications
>>> National Library of Medicine
>>> blowekamp at mail.nih.gov
>>>
>>>
>>
>> -- 
>> Gaëtan Lehmann
>> Biologie du Développement et de la Reproduction
>> INRA de Jouy-en-Josas (France)
>> tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
>> http://voxel.jouy.inra.fr  http://www.itk.org
>> http://www.mandriva.org  http://www.bepo.fr
>>
>

-- 
Gaëtan Lehmann
Biologie du Développement et de la Reproduction
INRA de Jouy-en-Josas (France)
tel: +33 1 34 65 29 66    fax: 01 34 65 29 09
http://voxel.jouy.inra.fr  http://www.itk.org
http://www.mandriva.org  http://www.bepo.fr

-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 203 bytes
Desc: Ceci est une signature ?lectronique PGP
URL: <http://www.itk.org/mailman/private/insight-developers/attachments/20110427/8490d4fc/attachment.pgp>


More information about the Insight-developers mailing list