annotate transformations/thick.py @ 41:fdb0e0870fb4

Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP. - Modifications à pipeline.py - Wrappé la boucle du pipeline dans une classe - Isolé le problème de itérer sur les batches et les complexités dans des itérateurs - Permet d'avoir des ordres compliqués de batch (plusieurs sources), de complexités - Maintenant regenerate_parameters() est appelé pour chaque image. - Command line arguments avec getopt(). On pourra rajouter des options ainsi. - run_pipeline.py - Le but est de permettre de passer des arguments. Pas facile (pas trouvé comment de façon simple) avec la command line pour appeler GIMP en mode batch. C'est un hack ici. - Le but ultime est de permettre de lancer les jobs sur les clusters avec dbidispatch en précisant les options (diff. pour chaque job) sur la ligne de commande.
author fsavard
date Wed, 03 Feb 2010 17:08:27 -0500
parents 47e7202d4f19
children 5e00ed18ae32
rev   line source
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
3
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
4 '''
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
5 Simple implementation of random thickness deformation using morphological
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
6 operation of scipy.
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
7 Only one morphological operation applied (dilation or erosion), the kernel is random
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
8 out of a list of 12 symmetric kernels. (only 5 to be chosen for erosion because it can
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
9 hurt the recognizability of the charater and 12 for dilation).
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
10
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
11 Author: Xavier Glorot
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
12
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
13 '''
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
14
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
15 import scipy.ndimage.morphology
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
16 import numpy as N
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
17
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
18
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
19 class Thick():
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
20 def __init__(self,complexity = 1):
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
21 #---------- private attributes
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
22 self.__nx__ = 32 #xdim of the images
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
23 self.__ny__ = 32 #ydim of the images
23
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
24 self.__erodemax__ = 9 #nb of index max of erode structuring elements
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
25 self.__dilatemax__ = 9 #nb of index max of dilation structuring elements
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
26 self.__structuring_elements__ = [N.asarray([[1,1]]),N.asarray([[1],[1]]),\
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
27 N.asarray([[1,1],[1,1]]),N.asarray([[0,1,0],[1,1,1],[0,1,0]]),\
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
28 N.asarray([[1,1,1],[1,1,1]]),N.asarray([[1,1],[1,1],[1,1]]),\
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
29 N.asarray([[1,1,1],[1,1,1],[1,1,1]]),\
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
30 N.asarray([[1,1,1,1],[1,1,1,1],[1,1,1,1]]),\
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
31 N.asarray([[1,1,1],[1,1,1],[1,1,1],[1,1,1]]),\
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
32 N.asarray([[0,0,1,0,0],[0,1,1,1,0],[1,1,1,1,1],[0,1,1,1,0],[0,0,1,0,0]]),\
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
33 N.asarray([[1,1,1,1],[1,1,1,1]]),N.asarray([[1,1],[1,1],[1,1],[1,1]])]
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
34 #------------------------------------------------
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
35
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
36 #---------- generation parameters
13
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
37 self.regenerate_parameters(complexity)
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
38 #------------------------------------------------
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
39
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
40 def _get_current_parameters(self):
19
db10ee2a07fb merged 2 thick parameter in one
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 17
diff changeset
41 return [self.thick_param]
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
42
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
43 def get_settings_names(self):
19
db10ee2a07fb merged 2 thick parameter in one
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 17
diff changeset
44 return ['thick_param']
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
45
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
46 def regenerate_parameters(self, complexity):
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
47 self.erodenb = N.ceil(complexity * self.__erodemax__)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
48 self.dilatenb = N.ceil(complexity * self.__dilatemax__)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
49 self.Perode = self.erodenb / (self.dilatenb + self.erodenb + 1.0)
23
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
50 self.Pdilate = self.dilatenb / (self.dilatenb + self.erodenb + 1.0)
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
51 assert (self.Perode + self.Pdilate <= 1) & (self.Perode + self.Pdilate >= 0)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
52 assert (complexity >= 0) & (complexity <= 1)
13
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
53 P = N.random.uniform()
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
54 if P>1-(self.Pdilate+self.Perode):
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
55 if P>1-(self.Pdilate+self.Perode)+self.Perode:
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
56 self.meth = 1
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
57 self.nb=N.random.randint(self.dilatenb)
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
58 else:
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
59 self.meth = -1
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
60 self.nb=N.random.randint(self.erodenb)
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
61 else:
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
62 self.meth = 0
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
63 self.nb = -1
19
db10ee2a07fb merged 2 thick parameter in one
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 17
diff changeset
64 self.thick_param = self.meth*self.nb
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
65 return self._get_current_parameters()
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
66
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
67 def transform_1_image(self,image): #the real transformation method
13
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
68 if self.meth!=0:
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
69 maxi = float(N.max(image))
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
70 mini = float(N.min(image))
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
71
26
47e7202d4f19 Array format handling bug fix for thick.py
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 23
diff changeset
72 imagenorm=image/maxi
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
73
13
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
74 if self.meth==1:
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
75 trans=scipy.ndimage.morphology.grey_dilation\
26
47e7202d4f19 Array format handling bug fix for thick.py
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 23
diff changeset
76 (imagenorm,size=self.__structuring_elements__[self.nb].shape,structure=self.__structuring_elements__[self.nb])
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
77 else:
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
78 trans=scipy.ndimage.morphology.grey_erosion\
26
47e7202d4f19 Array format handling bug fix for thick.py
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 23
diff changeset
79 (imagenorm,size=self.__structuring_elements__[self.nb].shape,structure=self.__structuring_elements__[self.nb])
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
80
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
81 #------renormalizing
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
82 maxit = N.max(trans)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
83 minit = N.min(trans)
17
c91d9f70206d Changed a call to numpy without having imported it as numpy
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 14
diff changeset
84 trans= N.asarray((trans - (minit+mini)) / (maxit - (minit+mini)) * maxi,dtype=image.dtype)
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
85 #--------
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
86 return trans
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
87 else:
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
88 return image
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
89
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
90 def transform_image(self,image): #handling different format
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
91 if image.shape == (self.__nx__,self.__ny__):
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
92 return self.transform_1_image(image)
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
93 if image.ndim == 3:
26
47e7202d4f19 Array format handling bug fix for thick.py
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 23
diff changeset
94 newimage = copy.copy(image)
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
95 for i in range(image.shape[0]):
26
47e7202d4f19 Array format handling bug fix for thick.py
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 23
diff changeset
96 newimage[i,:,:] = self.transform_1_image(image[i,:,:])
47e7202d4f19 Array format handling bug fix for thick.py
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 23
diff changeset
97 return newimage
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
98 if image.ndim == 2 and image.shape != (self.__nx__,self.__ny__):
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
99 newimage = N.reshape(image,(image.shape[0],self.__nx__,self.__ny__))
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
100 for i in range(image.shape[0]):
13
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
101 newimage[i,:,:] = self.transform_1_image(newimage[i,:,:])
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
102 return N.reshape(newimage,image.shape)
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
103 if image.ndim == 1:
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
104 newimage = N.reshape(image,(self.__nx__,self.__ny__))
13
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
105 newimage = self.transform_1_image(newimage)
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
106 return N.reshape(newimage,image.shape)
14
ebf61603489b Added different image format handling (minibatches,32*32,lines of 1024...) and some commentaries
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 13
diff changeset
107 assert False #should never go there
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
108
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
109
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
110
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
111
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
112 #test on NIST (you need pylearn and access to NIST to do that)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
113
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
114 if __name__ == '__main__':
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
115
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
116 from pylearn.io import filetensor as ft
17
c91d9f70206d Changed a call to numpy without having imported it as numpy
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 14
diff changeset
117 import copy
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
118 import pygame
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
119 import time
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
120 datapath = '/data/lisa/data/nist/by_class/'
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
121 f = open(datapath+'digits/digits_train_data.ft')
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
122 d = ft.read(f)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
123
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
124 pygame.surfarray.use_arraytype('numpy')
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
125
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
126 pygame.display.init()
23
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
127 screen = pygame.display.set_mode((8*4*32,8*32),0,8)
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
128 anglcolorpalette=[(x,x,x) for x in xrange(0,256)]
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
129 screen.set_palette(anglcolorpalette)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
130
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
131 MyThick = Thick()
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
132
23
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
133 #debut=time.time()
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
134 #MyThick.transform_image(d)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
135 #fin=time.time()
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
136 #print '------------------------------------------------'
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
137 #print d.shape[0],' images transformed in :', fin-debut, ' seconds'
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
138 #print '------------------------------------------------'
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
139 #print (fin-debut)/d.shape[0]*1000000,' microseconds per image'
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
140 #print '------------------------------------------------'
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
141 #print MyThick.get_settings_names()
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
142 #print MyThick._get_current_parameters()
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
143 #print MyThick.regenerate_parameters(0)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
144 #print MyThick.regenerate_parameters(0.5)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
145 #print MyThick.regenerate_parameters(1)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
146 for i in range(10000):
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
147 a=d[i,:]
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
148 b=N.asarray(N.reshape(a,(32,32))).T
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
149
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
150 new=pygame.surfarray.make_surface(b)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
151 new=pygame.transform.scale2x(new)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
152 new=pygame.transform.scale2x(new)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
153 new=pygame.transform.scale2x(new)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
154 new.set_palette(anglcolorpalette)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
155 screen.blit(new,(0,0))
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
156
23
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
157 #max dilation
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
158 MyThick.meth=1
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
159 MyThick.nb=MyThick.__dilatemax__
13
a25474d4d34f Changed parameter generation in order to fit with the new specificities
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 11
diff changeset
160 c=MyThick.transform_image(a)
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
161 b=N.asarray(N.reshape(c,(32,32))).T
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
162
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
163 new=pygame.surfarray.make_surface(b)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
164 new=pygame.transform.scale2x(new)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
165 new=pygame.transform.scale2x(new)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
166 new=pygame.transform.scale2x(new)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
167 new.set_palette(anglcolorpalette)
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
168 screen.blit(new,(8*32,0))
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
169
23
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
170 #max erosion
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
171 MyThick.meth=-1
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
172 MyThick.nb=MyThick.__erodemax__
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
173 c=MyThick.transform_image(a)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
174 b=N.asarray(N.reshape(c,(32,32))).T
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
175
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
176 new=pygame.surfarray.make_surface(b)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
177 new=pygame.transform.scale2x(new)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
178 new=pygame.transform.scale2x(new)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
179 new=pygame.transform.scale2x(new)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
180 new.set_palette(anglcolorpalette)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
181 screen.blit(new,(8*2*32,0))
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
182
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
183 #random
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
184 print MyThick.get_settings_names(), MyThick.regenerate_parameters(1)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
185 c=MyThick.transform_image(a)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
186 b=N.asarray(N.reshape(c,(32,32))).T
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
187
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
188 new=pygame.surfarray.make_surface(b)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
189 new=pygame.transform.scale2x(new)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
190 new=pygame.transform.scale2x(new)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
191 new=pygame.transform.scale2x(new)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
192 new.set_palette(anglcolorpalette)
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
193 screen.blit(new,(8*3*32,0))
442789c94b27 Changed thick maximum erosion and dilation transformations
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 19
diff changeset
194
11
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
195 pygame.display.update()
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
196 raw_input('Press Enter')
dbc806d025a2 Added a thick.py script defining a Thick class transforming randomly the thickness of the characters
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents:
diff changeset
197
17
c91d9f70206d Changed a call to numpy without having imported it as numpy
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 14
diff changeset
198 pygame.display.quit()