
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

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, totonixsame@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

On Thu, Dec 2, 2010 at 11:14 AM, Zachary Pincus zachary.pincus@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.
participants (2)
-
totonixsame@gmail.com
-
Zachary Pincus