annotate data_generation/transformations/Occlusion.py @ 595:da46a62ce402

submitted JMLR pdf
author Yoshua Bengio <bengioy@iro.umontreal.ca>
date Tue, 05 Oct 2010 15:07:33 -0400
parents 1f5937e9e530
children
rev   line source
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
3
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
4 '''
53
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
5 Ajout de bruit d'occlusion dans l'image originale.
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
6
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
7 Le bruit provient d'un echantillon pris dans la seconde image puis rajoutee a
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
8 gauche ou a droite de l'image originale. De plus, il se peut aussi que le
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
9 bruit soit rajoute sur l'image originale, mais en plus pâle.
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
10
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
11 Le fichier /data/lisa/data/ift6266h10/echantillon_occlusion.ft
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
12 (sur le reseau DIRO) est necessaire.
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
13
123
999bf84ddec6 Maintenant, plus grande probablite d'effectuer une occlusion. Proba= 0.3 maintenant
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 122
diff changeset
14 Il y a 30% de chance d'avoir une occlusion quelconque.
53
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
15
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
16 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
17
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
18 '''
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
19
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
21 import numpy
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
22
54
12bc019acd4e Banque de 20000 images pour y prendre des fragments. De plus, cette banque est sur le reseau du DIRO. Rouler ce script avec accès au réseau DIRO
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 53
diff changeset
23 from pylearn.io import filetensor as ft
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
24
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
25 class Occlusion():
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
26
148
72a2d431d047 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 129
diff changeset
27 def __init__(self,seed=9854):
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28 #Ces 4 variables representent la taille du "crop" sur l'image2
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
29 #Ce "crop" est pris a partie de image1[15,15], le milieu de l'image1
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
30 self.haut=2
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
31 self.bas=2
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
32 self.gauche=2
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
33 self.droite=2
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
34
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
35 #Ces deux variables representent le deplacement en x et y par rapport
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
36 #au milieu du bord gauche ou droit
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
37 self.x_arrivee=0
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
38 self.y_arrivee=0
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
39
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
40 #Cette variable =1 si l'image est mise a gauche et -1 si a droite
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
41 #et =0 si au centre, mais plus pale
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
42 self.endroit=-1
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
43
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
44 #Cette variable determine l'opacite de l'ajout dans le cas ou on est au milieu
54
12bc019acd4e Banque de 20000 images pour y prendre des fragments. De plus, cette banque est sur le reseau du DIRO. Rouler ce script avec accès au réseau DIRO
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 53
diff changeset
45 self.opacite=0.5 #C'est completement arbitraire. Possible de le changer si voulu
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
46
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
47 #Sert a dire si on fait quelque chose. 0=faire rien, 1 on fait quelque chose
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
48 self.appliquer=1
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
49
148
72a2d431d047 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 129
diff changeset
50 self.seed=seed
155
7640cb31cf1f Enlevé les re-seed constants, interfère avec les autres modules
boulanni <nicolas_boulanger@hotmail.com>
parents: 148
diff changeset
51 #numpy.random.seed(self.seed)
148
72a2d431d047 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 129
diff changeset
52
55
27bf31dca87d Correction petite erreur de path pour la banque
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 54
diff changeset
53 f3 = open('/data/lisa/data/ift6266h10/echantillon_occlusion.ft') #Doit etre sur le reseau DIRO.
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
54 #f3 = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/echantillon_occlusion.ft')
54
12bc019acd4e Banque de 20000 images pour y prendre des fragments. De plus, cette banque est sur le reseau du DIRO. Rouler ce script avec accès au réseau DIRO
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 53
diff changeset
55 #Il faut arranger le path sinon
53
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
56 w=ft.read(f3)
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
57 f3.close()
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
58
53
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
59 self.longueur=len(w)
54
12bc019acd4e Banque de 20000 images pour y prendre des fragments. De plus, cette banque est sur le reseau du DIRO. Rouler ce script avec accès au réseau DIRO
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 53
diff changeset
60 self.d=(w.astype('float'))/255
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
61
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
62
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
63 def get_settings_names(self):
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
64 return ['haut','bas','gauche','droite','x_arrivee','y_arrivee','endroit','rajout','appliquer']
148
72a2d431d047 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 129
diff changeset
65
72a2d431d047 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 129
diff changeset
66 def get_seed(self):
72a2d431d047 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 129
diff changeset
67 return self.seed
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
68
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
69 def regenerate_parameters(self, complexity):
125
5d3a7a4e30e9 little changes in Rature and occlusion to fit with visualisation
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 123
diff changeset
70 self.haut=min(15,int(numpy.abs(numpy.random.normal(int(8*complexity),2))))
5d3a7a4e30e9 little changes in Rature and occlusion to fit with visualisation
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 123
diff changeset
71 self.bas=min(15,int(numpy.abs(numpy.random.normal(int(8*complexity),2))))
5d3a7a4e30e9 little changes in Rature and occlusion to fit with visualisation
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 123
diff changeset
72 self.gauche=min(15,int(numpy.abs(numpy.random.normal(int(8*complexity),2))))
5d3a7a4e30e9 little changes in Rature and occlusion to fit with visualisation
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 123
diff changeset
73 self.droite=min(15,int(numpy.abs(numpy.random.normal(int(8*complexity),2))))
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74 if self.haut+self.bas+self.gauche+self.droite==0: #Tres improbable
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75 self.haut=1
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
76 self.bas=1
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
77 self.gauche=1
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
78 self.droite=1
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
79
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
80 #Ces deux valeurs seront controlees afin d'etre certain de ne pas depasser
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
81 self.x_arrivee=int(numpy.abs(numpy.random.normal(0,2))) #Complexity n'entre pas en jeu, pas besoin
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
82 self.y_arrivee=int(numpy.random.normal(0,3))
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
83
122
5d22498c73d1 Correction d'un petit bug (random.randint a des bornes inclusives, ce qui pouvait creer un petit bug)
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 74
diff changeset
84 self.rajout=numpy.random.randint(0,self.longueur-1) #les bouts de quelle lettre
129
a507adba0ce3 Changes to fit with visualisation
Xavier Glorot <glorotxa@iro.umontreal.ca>
parents: 125
diff changeset
85 self.appliquer=numpy.random.binomial(1,0.4) ##### 40 % du temps, on met une occlusion #####
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
86
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
87 if complexity == 0: #On ne fait rien dans ce cas
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
88 self.applique=0
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
89
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
90 self.endroit=numpy.random.randint(-1,2)
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
91
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
92 return self._get_current_parameters()
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
93
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
94 def _get_current_parameters(self):
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
95 return [self.haut,self.bas,self.gauche,self.droite,self.x_arrivee,self.y_arrivee,self.endroit,self.rajout,self.appliquer]
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
96
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
97
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
98 def transform_image(self, image):
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
99 if self.appliquer == 0: #Si on fait rien, on retourne tout de suite l'image
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
100 return image
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
101
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
102 #Attrapper le bruit d'occlusion
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
103 bruit=self.d[self.rajout].reshape((32,32))[15-self.haut:15+self.bas+1,15-self.gauche:15+self.droite+1]
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
104
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
105 if self.x_arrivee+self.gauche+self.droite>32:
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
106 self.endroit*=-1 #On change de bord et on colle sur le cote
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
107 self.x_arrivee=0
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
108 if self.y_arrivee-self.haut <-16:
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
109 self.y_arrivee=self.haut-16#On colle le morceau en haut
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
110 if self.y_arrivee+self.bas > 15:
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
111 self.y_arrivee=15-self.bas #On colle le morceau en bas
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
112
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
113 if self.endroit==-1: #a gauche
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
114 for i in xrange(-self.haut,self.bas+1):
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
115 for j in xrange(0,self.gauche+self.droite+1):
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
116 image[16+self.y_arrivee+i,self.x_arrivee+j]=\
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
117 max(image[16+self.y_arrivee+i,self.x_arrivee+j],bruit[i+self.haut,j])
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
118
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
119 elif self.endroit==1: #a droite
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
120 for i in xrange(-self.haut,self.bas+1):
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
121 for j in xrange(-self.gauche-self.droite,1):
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
122 image[16+self.y_arrivee+i,31-self.x_arrivee+j]=\
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
123 max(image[16+self.y_arrivee+i,31-self.x_arrivee+j],bruit[i+self.haut,j+self.gauche+self.droite])
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
124
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
125 elif self.endroit==0: #au milieu
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
126 for i in xrange(-self.haut,self.bas+1):
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
127 for j in xrange(-self.gauche,self.droite+1):
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
128 image[16+i,16+j]=max(image[16+i,16+j],bruit[i+self.haut,j+self.gauche]*self.opacite)
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
129
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
130
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
131 return image
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
132
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
133 #---TESTS---
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
134
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
135 def _load_image():
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
136 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
137 d = ft.read(f)
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
138 w=numpy.asarray(d[numpy.random.randint(0,50)])
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
139 return (w/255.0).astype('float')
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
140
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
141 def _test(complexite):
53
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
142
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
143 transfo = Occlusion()
53
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
144 for i in xrange(0,20):
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
145 img = _load_image()
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
146 pylab.imshow(img.reshape((32,32)))
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
147 pylab.show()
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
148 print transfo.get_settings_names()
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
149 print transfo.regenerate_parameters(complexite)
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
150
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
151 img_trans=transfo.transform_image(img.reshape((32,32)))
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
152
148
72a2d431d047 Rajout d'un seed random et d'une fonction get_seed
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 129
diff changeset
153 print transfo.get_seed()
53
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
154 pylab.imshow(img_trans.reshape((32,32)))
60b093f963d8 Ajout de chargement d'un fichier d'image afin d'avoir une plus grande variete de fragments possible. Ce fichier est sur Assembla dans <files>.
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 44
diff changeset
155 pylab.show()
44
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
156
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
157
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
158 if __name__ == '__main__':
5deccb161307 Ajout de fragment de lettre a droite, a gauche ou en pale par dessus la lettre principale
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
159 import pylab
74
f3e4328e3514 Contraste entre image et bruit renforce et proba 0.2 d'effectuer l'occlusion
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 55
diff changeset
160 import scipy
122
5d22498c73d1 Correction d'un petit bug (random.randint a des bornes inclusives, ce qui pouvait creer un petit bug)
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents: 74
diff changeset
161 _test(0.5)