comparison data_generation/transformations/PoivreSel.py @ 167:1f5937e9e530

More moves - transformations into data_generation, added "deep" folder
author Dumitru Erhan <dumitru.erhan@gmail.com>
date Fri, 26 Feb 2010 14:15:38 -0500
parents transformations/PoivreSel.py@7640cb31cf1f
children
comparison
equal deleted inserted replaced
166:17ae5a1a4dd1 167:1f5937e9e530
1 #!/usr/bin/python
2 # coding: utf-8
3
4 '''
5 Ajout de bruit poivre et sel dans les donnees. Le bruit est distribue de facon
6 aleatoire tire d'une uniforme tout comme la clarte des bites changees.
7
8 La proportion de bites aleatoires est definit par complexity/5.
9 Lorsque cette valeur est a 1 ==> Plus reconnaissable et 0 ==> Rien ne se passe
10
11 On a maintenant 25% de chance d'effectuer un bruitage.
12
13 Ce fichier prend pour acquis que les images sont donnees une a la fois
14 sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1.
15
16 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
17
18 '''
19
20 import numpy
21 import random
22
23 class PoivreSel():
24
25 def __init__(self,seed=9361):
26 self.proportion_bruit=0.08 #Le pourcentage des pixels qui seront bruites
27 self.nb_chng=10 #Le nombre de pixels changes. Seulement pour fin de calcul
28 self.effectuer=1 #Vaut 1 si on effectue et 0 sinon.
29
30 self.seed=seed
31 #Les deux generateurs sont de types differents, avoir la meme seed n'a pas d'influence
32 #numpy.random.seed(self.seed)
33 #random.seed(self.seed)
34
35 def get_seed(self):
36 return self.seed
37
38 def get_settings_names(self):
39 return ['effectuer']
40
41 def get_settings_names_determined_by_complexity(self,complexity):
42 return ['proportion_bruit']
43
44 def regenerate_parameters(self, complexity):
45 self.proportion_bruit = float(complexity)/5
46 self.nb_chng=int(1024*self.proportion_bruit)
47 self.changements=random.sample(xrange(1024),self.nb_chng) #Les pixels qui seront changes
48 self.effectuer =numpy.random.binomial(1,0.25) ##### On a 25% de faire un bruit #####
49 return self._get_current_parameters()
50
51 def _get_current_parameters(self):
52 return [self.effectuer]
53
54 def get_parameters_determined_by_complexity(self, complexity):
55 return [float(complexity)/5]
56
57 def transform_image(self, image):
58 if self.effectuer == 0:
59 return image
60
61 image=image.reshape(1024,1)
62 for j in xrange(0,self.nb_chng):
63 image[self.changements[j]]=numpy.random.random() #On determine les nouvelles valeurs des pixels changes
64 return image.reshape(32,32)
65
66
67 #---TESTS---
68
69 def _load_image():
70 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
71 d = ft.read(f)
72 w=numpy.asarray(d[0])
73 return (w/255.0).astype('float')
74
75 def _test(complexite):
76 img=_load_image()
77 transfo = PoivreSel()
78 pylab.imshow(img.reshape((32,32)))
79 pylab.show()
80 print transfo.get_settings_names()
81 print transfo.regenerate_parameters(complexite)
82
83 img_trans=transfo.transform_image(img)
84
85 pylab.imshow(img_trans.reshape((32,32)))
86 pylab.show()
87
88
89 if __name__ == '__main__':
90 from pylearn.io import filetensor as ft
91 import pylab
92 _test(0.5)
93
94