Mercurial > ift6266
diff transformations/Rature.py @ 58:fd02fd7e6557
Contraste de rature plus prononce, il y a maintenant rature avec proba=complexity, la clarte et la largeur de la bande ont maintenant une composante aleatoire
author | SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca> |
---|---|
date | Mon, 08 Feb 2010 13:57:46 -0500 |
parents | 5848e88f7a7a |
children | 7949f46b03e0 |
line wrap: on
line diff
--- a/transformations/Rature.py Sun Feb 07 23:29:05 2010 -0500 +++ b/transformations/Rature.py Mon Feb 08 13:57:46 2010 -0500 @@ -6,7 +6,8 @@ (dans ces deux cas, l'amplacement de la bande est aleatoire) ou sur la diagonale (et anti-diagonale). -La largeur de la bande ainsi que sa clarté sont definies a l'aide de complexity. +La largeur de la bande ainsi que sa clarté sont definies a l'aide de complexity +et d'une composante aleatoire. clarte: 0=blanc et 1=noir Ce fichier prend pour acquis que les images sont donnees une a la fois @@ -25,10 +26,11 @@ self.largeur=2 #Largeur de la bande self.deplacement=0 #Deplacement par rapport au milieu self.orientation=0 #0=horizontal, 1=vertical, 2=oblique - self.clarte=0.5 + self.clarte=0.5 #Clarte de la ligne appliquee + self.faire=1 #Si ==1, on applique une rature def get_settings_names(self): - return ['orientation','deplacement','clarte'] + return ['orientation','deplacement','clarte','faire'] def regenerate_parameters(self, complexity): #Il faut choisir parmis vertical, horizontal et diagonal. @@ -44,16 +46,19 @@ else: self.orientation=2 - self.largeur=int(numpy.ceil(complexity*5)) - self.clarte=complexity - + self.largeur=min(32,max(1,int(numpy.ceil(complexity*5)*numpy.random.normal(1,float(complexity)/2)))) + self.clarte=min(1,max(0,complexity*numpy.random.normal(1,float(complexity)/2))) + self.faire=numpy.random.binomial(1,float(complexity)) return self._get_current_parameters() def _get_current_parameters(self): - return [self.orientation,self.largeur,self.clarte] + return [self.orientation,self.largeur,self.clarte,self.faire] def transform_image(self, image): + if self.faire == 0: + return image + if self.orientation == 0: return self._horizontal(image) elif self.orientation == 1: @@ -69,8 +74,8 @@ if self.deplacement+self.largeur > 16: #Si on avance trop self.deplacement=16-self.largeur for i in xrange(0,self.largeur): - for j in xrange(0,31): - image[i+15+self.deplacement,j]=min(1,image[i+15+self.deplacement,j]+self.clarte) + for j in xrange(0,32): + image[i+15+self.deplacement,j]=min(1,max(image[i+15+self.deplacement,j],self.clarte)) return image def _vertical(self,image): @@ -81,8 +86,8 @@ if self.deplacement+self.largeur > 16: #Si on avance trop self.deplacement=16-self.largeur for i in xrange(0,self.largeur): - for j in xrange(0,31): - image[j,i+15+self.deplacement]=min(1,image[j,i+15+self.deplacement]+self.clarte) + for j in xrange(0,32): + image[j,i+15+self.deplacement]=min(1,max(image[j,i+15+self.deplacement],self.clarte)) return image def _oblique(self,image): @@ -93,10 +98,9 @@ if decision<0.5: #On met tout sur l'anti-diagonale D = D[:,::-1] D*=self.clarte - image+=D for i in xrange(0,32): for j in xrange(0,32): - image[i,j]=min(1,image[i,j]) #Afin de toujours avoir des valeurs entre 0 et 1 + image[i,j]=min(1,max(image[i,j],D[i,j])) return image