Mercurial > ift6266
view data_generation/transformations/add_background_image.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 |
line wrap: on
line source
#!/usr/bin/python # -*- coding: iso-8859-1 -*- ''' Implementation of random background adding to a specific image Author: Guillaume Sicard ''' import sys, os, random import cPickle import Image, numpy class AddBackground(): def __init__(self, threshold = 128, complexity = 1): self.h = 32 self.w = 32 self.threshold = 1; try: #in order to load locally if it is available self.bg_image_file = '/Tmp/image_net/' f=open(self.bg_image_file+'filelist.pkl') except: self.bg_image_file = '/data/lisa/data/ift6266h10/image_net/' f=open(self.bg_image_file+'filelist.pkl') self.image_files = cPickle.load(f) f.close() self.regenerate_parameters(complexity) def get_current_parameters(self): return [self.contrast] # get threshold value def get_settings_names(self): return ['contrast'] # no need, except for testmod.py def regenerate_parameters(self, complexity): self.contrast = 1-numpy.random.rand()*complexity return [self.contrast] # load an image def load_image(self,filename): image = Image.open(filename).convert('L') image = numpy.asarray(image) image = (image / 255.0).astype(numpy.float32) return image # save an image def save_image(self,array, filename): image = (array * 255.0).astype('int') image = Image.fromarray(image) if (filename != ''): image.save(filename) else: image.show() # make a random 32x32 crop of an image def rand_crop(self,image): i_w, i_h = image.shape x, y = random.randint(0, i_w - self.w), random.randint(0, i_h - self.h) return image[x:x + self.w, y:y + self.h] # select a random background image from "bg_image_file" and crops it def rand_bg_image(self,maximage): i = random.randint(0, len(self.image_files) - 1) image = self.load_image(self.bg_image_file + self.image_files[i]) self.bg_image = self.rand_crop(image) maxbg = self.bg_image.max() self.bg_image = self.bg_image / maxbg * ( max(maximage - self.contrast,0.0) ) # set "bg_image" as background to "image", based on a pixels threshold def set_bg(self,image): tensor = numpy.asarray([self.bg_image,image],dtype='float32') return tensor.max(0) # transform an image file and return an array def transform_image_from_file(self, filename): self.rand_bg_image() image = self.load_image(filename) image = self.set_bg(image) return image # standard array to array transform def transform_image(self, image): self.rand_bg_image(image.max()) image = self.set_bg(image) return image # test method def test(self,filename): import time sys.stdout.write('Starting addBackground test : loading image') sys.stdout.flush() image = self.load_image(filename) t = 0 n = 500 for i in range(n): t0 = time.time() image2 = self.transform_image(image) t = ( i * t + (time.time() - t0) ) / (i + 1) sys.stdout.write('.') sys.stdout.flush() print "Done!\nAverage time : " + str(1000 * t) + " ms" if __name__ == '__main__': myAddBackground = AddBackground() myAddBackground.test('./images/0-LiberationSans-Italic.ttf.jpg')