comparison transformations/BruitGauss.py @ 89:cc641ee75d3b

Il y a maintenant 25% de proba d'effectuer le bruitage
author SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
date Thu, 11 Feb 2010 09:01:03 -0500
parents bab98bb47616
children 17fabd74dd2b
comparison
equal deleted inserted replaced
88:ab57cd2b252c 89:cc641ee75d3b
9 Il y en a beaucoup moins que le bruit poivre et sel, car la transformation 9 Il y en a beaucoup moins que le bruit poivre et sel, car la transformation
10 est plutôt aggressive et touche beaucoup de pixels autour du centre 10 est plutôt aggressive et touche beaucoup de pixels autour du centre
11 11
12 La grandeur de la gaussienne ainsi que son ecart type sont definit par complexity 12 La grandeur de la gaussienne ainsi que son ecart type sont definit par complexity
13 et par une composante aleatoire normale. 13 et par une composante aleatoire normale.
14
15 On a 25 % de chances d'effectuer le bruitage
14 16
15 Ce fichier prend pour acquis que les images sont donnees une a la fois 17 Ce fichier prend pour acquis que les images sont donnees une a la fois
16 sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1. 18 sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1.
17 19
18 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010 20 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
29 def __init__(self): 31 def __init__(self):
30 self.proportion_bruit=0.1 #Le pourcentage des pixels qui seront bruites 32 self.proportion_bruit=0.1 #Le pourcentage des pixels qui seront bruites
31 self.nb_chng=10 #Le nombre de pixels changes. Seulement pour fin de calcul 33 self.nb_chng=10 #Le nombre de pixels changes. Seulement pour fin de calcul
32 self.sigma_gauss=3.0 #L'ecart type du noyau gaussien 34 self.sigma_gauss=3.0 #L'ecart type du noyau gaussien
33 self.grandeur=7 #Largeur de la fenetre gaussienne 35 self.grandeur=7 #Largeur de la fenetre gaussienne
36 self.effectuer=1 #1=effectuer et 0=rien faire
34 37
35 def get_settings_names(self): 38 def get_settings_names(self):
36 return ['proportion_bruit','sigma_gauss','grandeur'] 39 return ['proportion_bruit','sigma_gauss','grandeur','effectuer']
37 40
38 def regenerate_parameters(self, complexity): 41 def regenerate_parameters(self, complexity):
39 self.proportion_bruit = float(complexity)/25 42 self.proportion_bruit = float(complexity)/25
40 self.nb_chng=int(1024*self.proportion_bruit) 43 self.nb_chng=int(1024*self.proportion_bruit)
44
41 if float(complexity) > 0: 45 if float(complexity) > 0:
42 self.sigma_gauss=max(0,numpy.random.normal(complexity*5,complexity)) 46 self.sigma_gauss=max(0,numpy.random.normal(complexity*5,complexity))
43 self.grandeur=int(min(31,max(1,8*complexity*numpy.random.normal(1,float(complexity)/2)))) 47 self.grandeur=int(min(31,max(1,8*complexity*numpy.random.normal(1,float(complexity)/2))))
48 self.effectuer =numpy.random.binomial(1,0.25) ##### On a 25% de faire un bruit #####
44 else: 49 else:
50 self.effectuer = 0
45 self.sigma_gauss = 0 51 self.sigma_gauss = 0
46 self.grandeur=1 52 self.grandeur=1
47 #Un peu de paranoia ici, mais on ne sait jamais 53 #Un peu de paranoia ici, mais on ne sait jamais
48 54
49 if self.grandeur%2 == 0: 55 if self.grandeur%2 == 0:
50 self.grandeur+=1 #Toujours un nombre impair, plus simple plus tard 56 self.grandeur+=1 #Toujours un nombre impair, plus simple plus tard
51 return self._get_current_parameters() 57 return self._get_current_parameters()
52 58
53 def _get_current_parameters(self): 59 def _get_current_parameters(self):
54 return [self.proportion_bruit,self.sigma_gauss,self.grandeur] 60 return [self.proportion_bruit,self.sigma_gauss,self.grandeur,self.effectuer]
55 61
56 62
57 def transform_image(self, image): 63 def transform_image(self, image):
64 if self.effectuer == 0:
65 return image
58 image=image.reshape((32,32)) 66 image=image.reshape((32,32))
59 67
60 #creation du noyau gaussien 68 #creation du noyau gaussien
61 gauss=numpy.zeros((self.grandeur,self.grandeur)) 69 gauss=numpy.zeros((self.grandeur,self.grandeur))
62 x0 = y0 = self.grandeur/2 70 x0 = y0 = self.grandeur/2
71 #les points 79 #les points
72 80
73 for i in xrange(0,self.nb_chng): 81 for i in xrange(0,self.nb_chng):
74 x_bruit=int(numpy.random.randint(0,32)) 82 x_bruit=int(numpy.random.randint(0,32))
75 y_bruit=int(numpy.random.randint(0,32)) 83 y_bruit=int(numpy.random.randint(0,32))
76 84 #l'overlap n'est pas dramatique. Pas besoin de mecanisme pour s'en proteger
77 image[x_bruit,y_bruit]=max(0,min(1,numpy.random.normal(0.4,self.proportion_bruit*20))) 85 image[x_bruit,y_bruit]=max(0,min(1,numpy.random.normal(0.4,self.proportion_bruit*20)))
78 86
79 bord = int((self.grandeur-1)/2) 87 bord = int((self.grandeur-1)/2)
80 #Faire le "smooting" 88 #Faire le "smooting"
81 for x in xrange(0,self.grandeur): 89 for x in xrange(0,self.grandeur):