annotate data_generation/transformations/Occlusion.py @ 266:1e4e60ddadb1

Merge. Ah, et dans le dernier commit, j'avais oublié de mentionner que j'ai ajouté du code pour gérer l'isolation de différents clones pour rouler des expériences et modifier le code en même temps.
author fsavard
date Fri, 19 Mar 2010 10:56:16 -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)