annotate transformations/local_elastic_distortions.py @ 5:8d1c37190122

Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
author fsavard <francois.savard@polymtl.ca>
date Tue, 26 Jan 2010 14:21:40 -0500
parents
children 010e826b41e8
rev   line source
5
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
1 #!/usr/bin/python
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
2 # coding: utf-8
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
3
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
4 '''
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
5 Implementation of elastic distortions as described in
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
6 Simard, Steinkraus, Platt, "Best Practices for Convolutional
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
7 Neural Networks Applied to Visual Document Analysis", 2003
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
8
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
9 Author: François Savard
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
10 Date: Fall 2009, revised Winter 2010
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
11
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
12 Usage: create the Distorter with proper alpha, sigma etc.
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
13 Then each time you want to change the distortion field applied,
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
14 call regenerate_field().
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
15
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
16 (The point behind this is that regeneration takes some time,
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
17 so we better reuse the fields a few times)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
18 '''
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
19
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
20 import sys
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
21 import math
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
22 import numpy
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
23 import numpy.random
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
24 import scipy.signal # convolve2d
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
25
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
26 def raw_zeros(size):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
27 return [[0 for i in range(size[1])] for j in range(size[0])]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
28
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
29 class LocalElasticDistorter():
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
30 def __init__(self, image_size, kernel_size, sigma, alpha):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
31 self.image_size = image_size
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
32 self.kernel_size = kernel_size
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
33 self.sigma = sigma
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
34 self.alpha = alpha
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
35 self.c_alpha = int(math.ceil(alpha))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
36
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
37 self.kernel = self.gen_gaussian_kernel()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
38 self.fields = None
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
39 self.regenerate_fields()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
40
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
41 # adapted from http://blenderartists.org/forum/showthread.php?t=163361
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
42 def gen_gaussian_kernel(self):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
43 h,w = self.kernel_size
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
44 a,b = h/2.0, w/2.0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
45 y,x = numpy.ogrid[0:w, 0:h]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
46 s = self.sigma
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
47 gauss = numpy.exp(-numpy.square((x-a)/s))*numpy.exp(-numpy.square((y-b)/s))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
48 # Normalize so we don't reduce image intensity
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
49 return gauss/gauss.sum()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
50
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
51 def gen_distortion_field(self):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
52 field = numpy.random.uniform(-1.0, 1.0, self.image_size)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
53 return scipy.signal.convolve2d(field, self.kernel, mode='same')
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
54
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
55 def regenerate_fields(self):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
56 '''
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
57 Here's how the code works:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
58 - We first generate "distortion fields" for x and y with these steps:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
59 - Uniform noise over [-1, 1] in a matrix of size (h,w)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
60 - Blur with a Gaussian kernel of spread sigma
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
61 - Multiply by alpha
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
62 - Then (conceptually) to compose the distorted image, we loop over each pixel
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
63 of the new image and use the corresponding x and y distortions
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
64 (from the matrices generated above) to identify pixels
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
65 of the old image from which we fetch color data. As the
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
66 coordinates are not integer, we interpolate between the
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
67 4 nearby pixels (top left, top right etc.).
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
68 - That's just conceptually. Here I'm using matrix operations
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
69 to speed up the computation. I first identify the 4 nearby
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
70 pixels in the old image for each pixel in the distorted image.
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
71 I can then use them as "fancy indices" to extract the proper
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
72 pixels for each new pixel.
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
73 - Then I multiply those extracted nearby points by precomputed
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
74 ratios for the bilinear interpolation.
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
75 '''
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
76
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
77 self.fields = [None, None]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
78 self.fields[0] = self.alpha*self.gen_distortion_field()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
79 self.fields[1] = self.alpha*self.gen_distortion_field()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
80
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
81 #import pylab
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
82 #pylab.imshow(self.fields[0])
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
83 #pylab.show()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
84
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
85 # regenerate distortion index matrices
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
86 # "_rows" are row indices
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
87 # "_cols" are column indices
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
88 # (separated due to the way fancy indexing works in numpy)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
89 h,w = self.image_size
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
90
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
91 self.matrix_tl_corners_rows = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
92 self.matrix_tl_corners_cols = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
93
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
94 self.matrix_tr_corners_rows = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
95 self.matrix_tr_corners_cols = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
96
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
97 self.matrix_bl_corners_rows = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
98 self.matrix_bl_corners_cols = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
99
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
100 self.matrix_br_corners_rows = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
101 self.matrix_br_corners_cols = raw_zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
102
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
103 # those will hold the precomputed ratios for
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
104 # bilinear interpolation
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
105 self.matrix_tl_multiply = numpy.zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
106 self.matrix_tr_multiply = numpy.zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
107 self.matrix_bl_multiply = numpy.zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
108 self.matrix_br_multiply = numpy.zeros((h,w))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
109
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
110 for y in range(h):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
111 for x in range(w):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
112 distort_x = self.fields[0][y,x]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
113 distort_y = self.fields[1][y,x]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
114 f_dy = int(math.floor(distort_y))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
115 f_dx = int(math.floor(distort_x))
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
116 y0 = y+f_dy
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
117 x0 = x+f_dx
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
118 index_tl = [y0, x0]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
119 index_tr = [y0, x0+1]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
120 index_bl = [y0+1, x0]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
121 index_br = [y0+1, x0+1]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
122 x_ratio = abs(distort_x-f_dx) # ratio of left vs right (for bilinear)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
123 y_ratio = abs(distort_y-f_dy) # ratio of top vs bottom
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
124
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
125 # We use a default background color of 0 for displacements
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
126 # outside of boundaries of the image.
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
127
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
128 # if top left outside bounds
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
129 if index_tl[0] < 0 or index_tl[0] >= h or index_tl[1] < 0 or index_tl[1] >= w:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
130 self.matrix_tl_corners_rows[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
131 self.matrix_tl_corners_cols[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
132 self.matrix_tl_multiply[y,x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
133 else:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
134 self.matrix_tl_corners_rows[y][x] = index_tl[0]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
135 self.matrix_tl_corners_cols[y][x] = index_tl[1]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
136 self.matrix_tl_multiply[y,x] = x_ratio*y_ratio
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
137
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
138
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
139 # if top right outside bounds
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
140 if index_tr[0] < 0 or index_tr[0] >= h or index_tr[1] < 0 or index_tr[1] >= w:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
141 self.matrix_tr_corners_rows[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
142 self.matrix_tr_corners_cols[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
143 self.matrix_tr_multiply[y,x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
144 else:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
145 self.matrix_tr_corners_rows[y][x] = index_tr[0]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
146 self.matrix_tr_corners_cols[y][x] = index_tr[1]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
147 self.matrix_tr_multiply[y,x] = (1.0-x_ratio)*y_ratio
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
148
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
149 # if bottom left outside bounds
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
150 if index_bl[0] < 0 or index_bl[0] >= h or index_bl[1] < 0 or index_bl[1] >= w:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
151 self.matrix_bl_corners_rows[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
152 self.matrix_bl_corners_cols[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
153 self.matrix_bl_multiply[y,x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
154 else:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
155 self.matrix_bl_corners_rows[y][x] = index_bl[0]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
156 self.matrix_bl_corners_cols[y][x] = index_bl[1]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
157 self.matrix_bl_multiply[y,x] = x_ratio*(1.0-y_ratio)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
158
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
159 # if bottom right outside bounds
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
160 if index_br[0] < 0 or index_br[0] >= h or index_br[1] < 0 or index_br[1] >= w:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
161 self.matrix_br_corners_rows[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
162 self.matrix_br_corners_cols[y][x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
163 self.matrix_br_multiply[y,x] = 0
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
164 else:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
165 self.matrix_br_corners_rows[y][x] = index_br[0]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
166 self.matrix_br_corners_cols[y][x] = index_br[1]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
167 self.matrix_br_multiply[y,x] = (1.0-x_ratio)*(1.0-y_ratio)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
168
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
169 def distort_image(self, image):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
170 # index pixels to get the 4 corners for bilinear combination
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
171 tl_pixels = image[self.matrix_tl_corners_rows, self.matrix_tl_corners_cols]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
172 tr_pixels = image[self.matrix_tr_corners_rows, self.matrix_tr_corners_cols]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
173 bl_pixels = image[self.matrix_bl_corners_rows, self.matrix_bl_corners_cols]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
174 br_pixels = image[self.matrix_br_corners_rows, self.matrix_br_corners_cols]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
175
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
176 # bilinear ratios, elemwise multiply
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
177 tl_pixels = numpy.multiply(tl_pixels, self.matrix_tl_multiply)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
178 tr_pixels = numpy.multiply(tr_pixels, self.matrix_tr_multiply)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
179 bl_pixels = numpy.multiply(bl_pixels, self.matrix_bl_multiply)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
180 br_pixels = numpy.multiply(br_pixels, self.matrix_br_multiply)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
181
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
182 # sum to finish bilinear combination
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
183 return numpy.sum([tl_pixels,tr_pixels,bl_pixels,br_pixels], axis=0)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
184
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
185 # TESTS ----------------------------------------------------------------------
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
186
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
187 def _load_image(filepath):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
188 _RGB_TO_GRAYSCALE = [0.3, 0.59, 0.11, 0.0]
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
189 img = Image.open(filepath)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
190 img = numpy.asarray(img)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
191 if len(img.shape) > 2:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
192 img = (img * _RGB_TO_GRAYSCALE).sum(axis=2)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
193 return (img / 255.0).astype('float')
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
194
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
195 def _specific_test():
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
196 img = _load_image("tests/d.png")
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
197 dist = LocalElasticDistorter((32,32), (15,15), 9.0, 5.0)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
198 dist.distort_image(img)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
199
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
200 def _distorter_tests():
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
201 #import pylab
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
202 #pylab.imshow(img)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
203 #pylab.show()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
204
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
205 for letter in ("d", "a", "n", "o"):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
206 img = _load_image("tests/" + letter + ".png")
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
207 for alpha in (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
208 for sigma in (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
209 id = LocalElasticDistorter((32,32), (15,15), sigma, alpha)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
210 img2 = id.distort_image(img)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
211 img2 = Image.fromarray((img2 * 255).astype('uint8'), "L")
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
212 img2.save("tests/"+letter+"_alpha"+str(alpha)+"_sigma"+str(sigma)+".png")
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
213
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
214 def _benchmark():
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
215 img = _load_image("tests/d.png")
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
216 dist = LocalElasticDistorter((32,32), (10,10), 5.0, 5.0)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
217 import time
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
218 t1 = time.time()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
219 for i in range(10000):
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
220 if i % 1000 == 0:
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
221 print "-"
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
222 dist.distort_image(img)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
223 t2 = time.time()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
224 print "t2-t1", t2-t1
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
225 print "avg", 10000/(t2-t1)
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
226
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
227 if __name__ == '__main__':
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
228 import Image
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
229 _distorter_tests()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
230 #_benchmark()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
231 #_specific_test()
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
232
8d1c37190122 Ajouté code de déformations élastiques locales, adapté depuis un travail que j'ai fait la session dernière
fsavard <francois.savard@polymtl.ca>
parents:
diff changeset
233