annotate transformations/PoivreSel.py @ 41:fdb0e0870fb4

Beaucoup de modifications à pipeline.py pour généraliser et un début de visualisation, et créé un wrapper (run_pipeline.py) pour appeler avec GIMP. - Modifications à pipeline.py - Wrappé la boucle du pipeline dans une classe - Isolé le problème de itérer sur les batches et les complexités dans des itérateurs - Permet d'avoir des ordres compliqués de batch (plusieurs sources), de complexités - Maintenant regenerate_parameters() est appelé pour chaque image. - Command line arguments avec getopt(). On pourra rajouter des options ainsi. - run_pipeline.py - Le but est de permettre de passer des arguments. Pas facile (pas trouvé comment de façon simple) avec la command line pour appeler GIMP en mode batch. C'est un hack ici. - Le but ultime est de permettre de lancer les jobs sur les clusters avec dbidispatch en précisant les options (diff. pour chaque job) sur la ligne de commande.
author fsavard
date Wed, 03 Feb 2010 17:08:27 -0500
parents f5de107d3643
children 8b9fca879543
rev   line source
36
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
1 #!/usr/bin/python
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
2 # coding: utf-8
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
3
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
4 '''
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
5 Ajout de bruit poivre et sel dans les donnees. Le bruit est distribue de facon
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
6 aleatoire tire d'une uniforme tout comme la clarte des bites changees.
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
7
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
8 La proportion de bites aleatoires est definit par complexity.
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
9 Lorsque cette valeur est a 1 ==> Plus reconnaissable et 0 ==> Rien ne se passe
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
10
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
11 Ce fichier prend pour acquis que les images sont donnees une a la fois
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
12 sous forme de numpy.array de 1024 (32 x 32) valeurs entre 0 et 1.
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
13
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
14 Sylvain Pannetier Lebeuf dans le cadre de IFT6266, hiver 2010
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
15
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
16 '''
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
17
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
18 import numpy
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
19 import random
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
20
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
21 class PoivreSel():
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
22
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
23 def __init__(self):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
24 self.proportion_bruit=0.1 #Le pourcentage des pixels qui seront bruites
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
25 self.nb_chng=10 #Le nombre de pixels changes. Seulement pour fin de calcul
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
26
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
27 def get_settings_names(self):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
28 return ['proportion_bruit']
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
29
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
30 def regenerate_parameters(self, complexity):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
31 self.proportion_bruit = complexity
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
32 self.nb_chng=int(1024*self.proportion_bruit)
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
33 return self._get_current_parameters()
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
34
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
35 def _get_current_parameters(self):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
36 return []
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
37
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
38 def get_parameters_determined_by_complexity(self, complexity):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
39 return [self.proportion_bruit]
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
40
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
41 def transform_image(self, image):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
42 image=image.reshape(1024,1)
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
43 changements=random.sample(xrange(numpy.size(image)),self.nb_chng) #Les pixels qui seront changes
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
44 for j in xrange(0,self.nb_chng):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
45 image[changements[j]]=numpy.random.random() #On determine les nouvelles valeurs des pixels changes
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
46 return image.reshape(32,32)
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
47
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
48
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
49 #---TESTS---
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
50
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
51 def _load_image():
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
52 f = open('/home/sylvain/Dropbox/Msc/IFT6266/donnees/lower_test_data.ft') #Le jeu de donnees est en local.
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
53 d = ft.read(f)
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
54 w=numpy.asarray(d[0])
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
55 return (w/255.0).astype('float')
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
56
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
57 def _test(complexite):
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
58 img=_load_image()
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
59 transfo = PoivreSel()
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
60 pylab.imshow(img.reshape((32,32)))
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
61 pylab.show()
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
62 print transfo.get_settings_names()
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
63 print transfo.regenerate_parameters(complexite)
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
64
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
65 img_trans=transfo.transform_image(img)
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
66
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
67 pylab.imshow(img_trans.reshape((32,32)))
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
68 pylab.show()
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
69
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
70
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
71 if __name__ == '__main__':
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
72 from pylearn.io import filetensor as ft
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
73 import pylab
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
74 _test(0.5)
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
75
f5de107d3643 Ajout de bruit poivre et sel sur l'image. Compatible avec testmod.py
SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca>
parents:
diff changeset
76