Mercurial > ift6266
annotate transformations/slant.py @ 37:5848e88f7a7a
Ajout de rature verticale, horizontale ou blique sur l'image. Compatible avec testmod.py
author | SylvainPL <sylvain.pannetier.lebeuf@umontreal.ca> |
---|---|
date | Tue, 02 Feb 2010 10:44:54 -0500 |
parents | e05715e4554d |
children | 0f1337994716 |
rev | line source |
---|---|
34
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
1 #!/usr/bin/python |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
2 # coding: utf-8 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
3 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
4 ''' |
35
e05715e4554d
first commit, the module has been tested with testmod.py, it has no timing
youssouf
parents:
34
diff
changeset
|
5 Author: Youssouf |
e05715e4554d
first commit, the module has been tested with testmod.py, it has no timing
youssouf
parents:
34
diff
changeset
|
6 |
34
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
7 this module add a slant effect to the image. |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
8 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
9 To obtain the slant effect, each row of the array is shifted proportionately by a step |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
10 controlled by the complexity. |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
11 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
12 ''' |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
13 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
14 import numpy |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
15 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
16 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
17 class Slant(): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
18 def __init__(self, complexity=1): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
19 #---------- private attributes |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
20 self.direction = 1 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
21 self.angle = 0 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
22 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
23 #---------- generation parameters |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
24 self.regenerate_parameters(complexity) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
25 #------------------------------------------------ |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
26 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
27 def _get_current_parameters(self): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
28 return [self.angle, self.direction] |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
29 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
30 def get_settings_names(self): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
31 return ['angle', 'direction'] |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
32 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
33 def regenerate_parameters(self, complexity): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
34 self.angle = numpy.random.uniform(0.0, complexity) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
35 P = numpy.random.uniform() |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
36 self.direction = 1; |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
37 if P < 0.5: |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
38 self.direction = -1; |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
39 return self._get_current_parameters() |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
40 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
41 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
42 def transform_image(self,image): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
43 if self.angle == 0: |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
44 return image |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
45 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
46 ysize, xsize = image.shape |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
47 slant = self.direction*self.angle |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
48 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
49 output = image.copy() |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
50 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
51 # shift all the rows |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
52 for i in range(ysize): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
53 line = image[i] |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
54 delta = round((i*slant)) % xsize |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
55 line1 = line[:xsize-delta] |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
56 line2 = line[xsize-delta:xsize] |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
57 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
58 output[i][delta:xsize] = line1 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
59 output[i][0:delta] = line2 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
60 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
61 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
62 #correction to center the image |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
63 correction = (self.direction)*round(self.angle*ysize/2) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
64 correction = (xsize - correction) % xsize |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
65 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
66 # center the region |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
67 line1 = output[0:ysize,0:xsize-correction].copy() |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
68 line2 = output[0:ysize,xsize-correction:xsize].copy() |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
69 output[0:ysize,correction:xsize] = line1 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
70 output[0:ysize,0:correction] = line2 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
71 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
72 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
73 return output |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
74 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
75 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
76 # Test function |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
77 def test_slant(): |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
78 img_name = "3.png" |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
79 dest_img_name = "slanted.png" |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
80 im = Image.open(img_name,) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
81 im = im.convert("L") |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
82 image = numpy.asarray(im) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
83 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
84 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
85 slant = Slant() |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
86 slant.regenerate_parameters(1) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
87 image = slant.transform_image(image) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
88 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
89 im = Image.fromarray(image.astype('uint8'), "L") |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
90 im.save(dest_img_name) |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
91 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
92 # Test |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
93 if __name__ == '__main__': |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
94 import sys, os, fnmatch |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
95 import Image |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
96 |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
97 test_slant() |
e61a46996db6
first commit, the module has been tested with testmod.py, it has no timing
ychherawala@smets-w04
parents:
diff
changeset
|
98 |