[Numpy-discussion] image to array doubt
Robin
robince at gmail.com
Fri Feb 29 10:25:33 EST 2008
On Fri, Feb 29, 2008 at 2:54 PM, devnew at gmail.com <devnew at gmail.com> wrote:
> hi
> i came across a codebase by rice univ people..in that there are some
> functions for conversion btw image and vectors
I'm not an expert by any means but I thought I'd try and help...
> 1.<code>
> def image_to_vector(self, filename):
> try:
> im = Image.open(filename)
> except IOError:
> print 'couldn\'t load ' + filename
> sys.exit(1)
> self.im_size = im.size
> a = numpy.array(im.getdata())
> return a - 128
> </code>
>
> what is the purpose of a-128 here? i couldn't quite understand
It looks to me like im.getdata() is returning an unsigned 8 bit
integer (0 to 256), which they are converting to a signed integer by
subtracting 128.
>
> 2.<code>
> def vector_to_image(self, v, filename):
> v.shape = (-1,)
> a, b = min(v), max(v)
> span = max(abs(b), abs(a))
> im = Image.new('L', self.im_size)
> im.putdata((v * 127. / span) + 128)
> im.save(filename)
> </code>
>
> and why the calculations of a,b span? why do you need the extra maths
> ops inside im.putdata() I couldn't quite follow it
Similarly, here it looks like they are rescaling whatever is in v to
an unsigned 8-bit range (0-256). The span gives the absolute maximum
value of the input data, so v/span is rescaled to have maximum value
1, so (v * 127. / span) is the (signed) input vector rescaled to have
values in the range [-127,127]. Adding 128 makes unsigned again in
[0,256].
I'm not sure why they would be doing this - to me it looks they might
be using Image as a convenient way to store some other kind of data...
HTH,
Robin
More information about the NumPy-Discussion
mailing list