[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