Mercurial > ift6266
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 |