Mercurial > ift6266
view transformations/slant.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 | 0f1337994716 |
children |
line wrap: on
line source
#!/usr/bin/python # coding: utf-8 ''' Author: Youssouf this module add a slant effect to the image. To obtain the slant effect, each row of the array is shifted proportionately by a step controlled by the complexity. ''' import numpy class Slant(): def __init__(self, complexity=1): #---------- private attributes self.direction = 1 self.angle = 0 #---------- generation parameters self.regenerate_parameters(complexity) #------------------------------------------------ def _get_current_parameters(self): return [self.angle, self.direction] def get_settings_names(self): return ['angle', 'direction'] def regenerate_parameters(self, complexity): self.angle = numpy.random.uniform(0.0, complexity) P = numpy.random.uniform() self.direction = 1; if P < 0.5: self.direction = -1; return self._get_current_parameters() def transform_image(self,image): if self.angle == 0: return image ysize, xsize = image.shape slant = self.direction*self.angle output = image.copy() # shift all the rows for i in range(ysize): line = image[i] delta = round((i*slant)) % xsize line1 = line[:xsize-delta] line2 = line[xsize-delta:xsize] output[i][delta:xsize] = line1 output[i][0:delta] = line2 #correction to center the image correction = (self.direction)*round(self.angle*ysize/2) correction = (xsize - correction) % xsize # center the region line1 = output[0:ysize,0:xsize-correction].copy() line2 = output[0:ysize,xsize-correction:xsize].copy() output[0:ysize,correction:xsize] = line1 output[0:ysize,0:correction] = line2 return output # Test function # Load an image in local and create several samples of the effect on the # original image with different parameter. All the samples are saved in a single image, the 1st image being the original. def test_slant(): import scipy img_name = "test_img/mnist_0.png" dest_img_name = "test_img/slanted.png" nb_samples = 10 im = Image.open(img_name) im = im.convert("L") image = numpy.asarray(im) image_final = image slant = Slant() for i in range(nb_samples): slant.regenerate_parameters(1) image_slant = slant.transform_image(image) image_final = scipy.hstack((image_final,image_slant)) im = Image.fromarray(image_final.astype('uint8'), "L") im.save(dest_img_name) # Test if __name__ == '__main__': import sys, os, fnmatch import Image test_slant()