Mercurial > ift6266
annotate transformations/affine_transform.py @ 39:17caecc92544
affine transformation using PIL
author | Razvan Pascanu <r.pascanu@gmail.com> |
---|---|
date | Tue, 02 Feb 2010 21:17:11 -0500 |
parents | |
children | 81b9567ec4ae |
rev | line source |
---|---|
39
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/python |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
2 # coding: utf-8 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
3 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
4 ''' |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
5 Simple implementation of random affine transformations based on the Python |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
6 Imaging Module affine transformations. |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
7 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
8 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
9 Author: Razvan Pascanu |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
10 ''' |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
11 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
12 import numpy, Image |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
13 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
14 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
15 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
16 class AffineTransformation(): |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
17 def __init__( self, shape = (32,32), seed = None): |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
18 self.shape = shape |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
19 self.rng = numpy.random.RandomState(seed) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
20 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
21 def transform(self,NIST_image): |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
22 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
23 im = Image.fromarray( \ |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
24 numpy.asarray(\ |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
25 NIST_image.reshape(self.shape), dtype='uint8')) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
26 # generate random affine transformation |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
27 # a point (x',y') of the new image corresponds to (x,y) of the old |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
28 # image where : |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
29 # x' = params[0]*x + params[1]*y + params[2] |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
30 # y' = params[3]*x + params[4]*y _ params[5] |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
31 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
32 # the ranges are set manually as to look acceptable |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
33 params = self.rng.uniform(size = 6) -.5 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
34 params[2] *= 8. |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
35 params[5] *= 8. |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
36 params[0] = 1. + params[0]*0.4 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
37 params[3] = 0. + params[3]*0.4 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
38 params[1] = 0 + params[1]*0.4 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
39 params[4] = 1 + params[4]*0.4 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
40 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
41 print params |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
42 nwim = im.transform( (32,32), Image.AFFINE, params) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
43 return numpy.asarray(nwim) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
44 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
45 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
46 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
47 if __name__ =='__main__': |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
48 print 'random test' |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
49 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
50 from pylearn.io import filetensor as ft |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
51 import pylab |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
52 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
53 datapath = '/data/lisa/data/nist/by_class/' |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
54 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
55 f = open(datapath+'digits/digits_train_data.ft') |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
56 d = ft.read(f) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
57 f.close() |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
58 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
59 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
60 transformer = AffineTransformation() |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
61 id = numpy.random.randint(30) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
62 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
63 pylab.figure() |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
64 pylab.imshow(d[id].reshape((32,32))) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
65 pylab.figure() |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
66 pylab.imshow(transformer.transform(d[id]).reshape((32,32))) |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
67 |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
68 pylab.show() |
17caecc92544
affine transformation using PIL
Razvan Pascanu <r.pascanu@gmail.com>
parents:
diff
changeset
|
69 |