Re: [Numpy-discussion] Threshold

2010-12-02 Thread Zachary Pincus
 mask = numpy.zeros(medical_image.shape, dtype=uint16)
 mask[ numpy.logical_and( medical_image = lower, medical_image =  
 upper)] = 255

 Where lower and upper are the threshold bounds. Here I' m marking the
 array positions where medical_image is between the threshold bounds
 with 255, where isn' t with 0. The question is: Is there a better  
 way to do that?

This will give you a True/False boolean mask:
mask = numpy.logical_and( medical_image = lower, medical_image =  
upper)

And this a 0/255 mask:
mask = 255*numpy.logical_and( medical_image = lower, medical_image =  
upper)

You can make the code a bit more terse/idiomatic by using the bitwise  
operators, which do logical operations on boolean arrays:
mask = 255*((medical_image = lower)  (medical_image = upper))

Though this is a bit annoying as the bitwise ops ( | ^ ~) have higher  
precedence than the comparison ops ( =  =), so you need to  
parenthesize carefully, as above.

Zach


On Dec 2, 2010, at 7:35 AM, totonixs...@gmail.com wrote:

 Hi all,

 I' m developing a medical software named InVesalius [1], it is a free
 software. It uses numpy arrays to store the medical images (CT and
 MRI) and the mask, the mask is used to mark the region of interest and
 to create 3D surfaces. Those array generally have 512x512 elements.
 The mask is created based in threshold, with lower and upper bound,
 this way:

 mask = numpy.zeros(medical_image.shape, dtype=uint16)
 mask[ numpy.logical_and( medical_image = lower, medical_image =  
 upper)] = 255

 Where lower and upper are the threshold bounds. Here I' m marking the
 array positions where medical_image is between the threshold bounds
 with 255, where isn' t with 0. The question is: Is there a better way
 to do that?

 Thank!

 [1] - svn.softwarepublico.gov.br/trac/invesalius
 ___
 NumPy-Discussion mailing list
 NumPy-Discussion@scipy.org
 http://mail.scipy.org/mailman/listinfo/numpy-discussion

___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion


Re: [Numpy-discussion] Threshold

2010-12-02 Thread totonixs...@gmail.com
On Thu, Dec 2, 2010 at 11:14 AM, Zachary Pincus zachary.pin...@yale.edu wrote:
 mask = numpy.zeros(medical_image.shape, dtype=uint16)
 mask[ numpy.logical_and( medical_image = lower, medical_image =
 upper)] = 255

 Where lower and upper are the threshold bounds. Here I' m marking the
 array positions where medical_image is between the threshold bounds
 with 255, where isn' t with 0. The question is: Is there a better
 way to do that?

 This will give you a True/False boolean mask:
 mask = numpy.logical_and( medical_image = lower, medical_image =
 upper)

 And this a 0/255 mask:
 mask = 255*numpy.logical_and( medical_image = lower, medical_image =
 upper)

 You can make the code a bit more terse/idiomatic by using the bitwise
 operators, which do logical operations on boolean arrays:
 mask = 255*((medical_image = lower)  (medical_image = upper))

 Though this is a bit annoying as the bitwise ops ( | ^ ~) have higher
 precedence than the comparison ops ( =  =), so you need to
 parenthesize carefully, as above.

 Zach

Thanks, Zach! I stayed with the last one.
___
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
http://mail.scipy.org/mailman/listinfo/numpy-discussion