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