Mercurial > ift6266
view transformations/affine_transform.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 | 17caecc92544 |
children | 81b9567ec4ae |
line wrap: on
line source
#!/usr/bin/python # coding: utf-8 ''' Simple implementation of random affine transformations based on the Python Imaging Module affine transformations. Author: Razvan Pascanu ''' import numpy, Image class AffineTransformation(): def __init__( self, shape = (32,32), seed = None): self.shape = shape self.rng = numpy.random.RandomState(seed) def transform(self,NIST_image): im = Image.fromarray( \ numpy.asarray(\ NIST_image.reshape(self.shape), dtype='uint8')) # generate random affine transformation # a point (x',y') of the new image corresponds to (x,y) of the old # image where : # x' = params[0]*x + params[1]*y + params[2] # y' = params[3]*x + params[4]*y _ params[5] # the ranges are set manually as to look acceptable params = self.rng.uniform(size = 6) -.5 params[2] *= 8. params[5] *= 8. params[0] = 1. + params[0]*0.4 params[3] = 0. + params[3]*0.4 params[1] = 0 + params[1]*0.4 params[4] = 1 + params[4]*0.4 print params nwim = im.transform( (32,32), Image.AFFINE, params) return numpy.asarray(nwim) if __name__ =='__main__': print 'random test' from pylearn.io import filetensor as ft import pylab datapath = '/data/lisa/data/nist/by_class/' f = open(datapath+'digits/digits_train_data.ft') d = ft.read(f) f.close() transformer = AffineTransformation() id = numpy.random.randint(30) pylab.figure() pylab.imshow(d[id].reshape((32,32))) pylab.figure() pylab.imshow(transformer.transform(d[id]).reshape((32,32))) pylab.show()