Compilerbau: Beispiele für einfache Bildtransformationen |
|
1------------------------------------------------------------
2--
3-- demo program for all builtin picture manipulation functions
4--
5------------------------------------------------------------
6
7begin
8 var p : picture
9 ; var args : list of string
10 := getArgs()
11
12 ; var f : string
13 := if args.empty
14 then "lena" -- default: THE test picture
15 else args.head
16 ; var f1 : string
17 := f + "-"
18
19 ; writeln("hello world")
20
21 ; writeln("reading " + f)
22 ; p := load(f)
23
24 ; writeln("width = " + p.width.toString)
25 ; writeln("height = " + p.height.toString)
26
27 ; dump()
28
29 ; writeln("storing picture")
30 ; p.store(f1 + "original")
31
32 ; writeln("mirror: side by side and above")
33 ; begin
34 var p2 : picture
35 := p.sideBySide(p.flipVertical)
36
37 ; p2.above(p2.flipHorizontal)
38 .store(f1 + "mirror")
39 end
40
41 ; writeln("split vertical and concat horizontal")
42 ; begin
43 var l : list of picture
44 := p.splitVertical(4)
45
46 ; var rl : list of picture
47 := [l[3], l[2], l[1], l[0]]
48
49 ; rl.concatHorizontal
50 .store(f1 + "splitV")
51 end
52
53 ; writeln("split horizontal and concat vertical")
54 ; begin
55 var l : list of picture
56 := p.splitHorizontal(4)
57
58 ; var rl : list of picture
59 := [l[3], l[2], l[1], l[0]]
60
61 ; rl.concatVertical
62 .store(f1 + "splitH")
63 end
64
65 ; writeln("flip horizontal")
66 ; p.flipHorizontal.store(f1 + "flipHorizontal")
67
68 ; writeln("flip vertical")
69 ; p.flipVertical.store(f1 + "flipVertical")
70
71 ; writeln("flip diagonal")
72 ; p.flipDiagonal.store(f1 + "flipDiagonal")
73
74 ; writeln("rotate")
75 ; p.rotate.store(f1 + "rotate")
76
77 ; writeln("shift")
78 ; p.shift( p.width div 4,
79 p.height div 4)
80 .store(f1 + "shift")
81
82 ; writeln("gamma 0.5")
83 ; p.gamma(0.5)
84 .store(f1 + "gamma0.5")
85
86 ; writeln("gamma 2.0")
87 ; p.gamma(2.0)
88 .store(f1 + "gamma2.0")
89
90 ; writeln("invert")
91 ; p.invert.store(f1 + "invert")
92
93 -- map picture to black and white by summing up grey values
94 ; writeln("bitmap")
95 ; p.bitmap.store(f1 + "bitmap")
96
97 ; writeln("black and white")
98 ; p.blackAndWhite.store(f1 + "blackAndWhite")
99
100 ; begin
101 var i : int
102 := 2
103
104 ; while i < 8 do
105 writeln("reduce # of colors to " + i.toString)
106 ; p.reduceColor(i)
107 .store(f1 + "reduce" + i.toString + "")
108 ; i := i + 1
109 endwhile
110 end
111
112 ; writeln("cut")
113 ; p.cut( p.width div 4
114 , p.height div 4
115 , p.width div 2
116 , p.height div 2
117 )
118 .store(f1 + "cut")
119
120 ; writeln("paste")
121 ; p.paste( p.resize( p.width div 2
122 , p.height div 2
123 )
124 .invert
125 , p.width div 4
126 , p.height div 4
127 )
128 .store(f1 + "paste")
129
130 ; writeln("scale 2x2")
131 ; p.scale(2,2)
132 .store(f1 + "scale2x2")
133
134 ; writeln("scale 2x1")
135 ; p.scale(2,1)
136 .store(f1 + "scale2x1")
137
138 ; writeln("scale 1x2")
139 ; p.scale(1,2)
140 .store(f1 + "scale1x2")
141
142 ; writeln("replicate 2x2")
143 ; p.replicate(2,2)
144 .store(f1 + "replicate2x2")
145
146 ; writeln("replicate 2x1")
147 ; p.replicate(2,1)
148 .store(f1 + "replicate2x1")
149
150 ; writeln("replicate 1x2")
151 ; p.replicate(1,2)
152 .store(f1 + "replicate1x2")
153
154 ; writeln("double size")
155
156 ; p.resize( 2 * p.width
157 , 2 * p.height
158 )
159 .store(f1 + "doublesize")
160
161 ; writeln("half size")
162 ; p.resize( p.width div 2
163 , p.height div 2
164 )
165 .store(f1 + "halfsize")
166
167 ; writeln("blur 8x8 with resize")
168 ; p.resize( (p.width + 7) div 8
169 , (p.height + 7) div 8
170 )
171 .scale(8,8)
172 .store(f1 + "blurResize8x8")
173
174 ; writeln("blur 8x8")
175 ; p.shrink(8,8)
176 .scale(8,8)
177 .store(f1 + "blur8x8")
178
179 ; writeln("blur whole image")
180 ; p.shrink(p.width,p.height)
181 .scale(p.width,p.height)
182 .store(f1 + "blurAll")
183
184 ; writeln("sideBySide")
185 ; p.sideBySide(p.flipVertical)
186 .store(f1 + "sideBySide")
187
188 ; writeln("sideBySide")
189 ; p.sideBySide(p.flipVertical)
190 .store(f1 + "sideBySide")
191
192 ; writeln("above")
193 ; p.above(p.flipVertical)
194 .store(f1 + "above")
195
196 ; writeln("select all even/odd columns")
197 ; begin
198 var l : list of picture
199 := p.partitionVertical(2)
200 ; var p1, p2 : picture
201 := l[0], l[1]
202
203 ; p1.store(f1 + "evencols")
204 ; p2.store(f1 + "oddrcols")
205
206 ; writeln("1 step vertical wavelet transformation")
207 ; (p1 + p1).sideBySide(p1 - p2)
208 .store(f1 + "waveV")
209 end
210
211 ; writeln("select all even/odd rows")
212 ; begin
213 var l : list of picture
214 := p.partitionHorizontal(2)
215 ; var p1, p2 : picture
216 := l[0], l[1]
217
218 ; p1.store(f1 + "evenrows")
219 ; p2.store(f1 + "oddrrows")
220
221 ; writeln("1 step horizontal wavelet transformation")
222 ; (p1 + p1).above(p1 - p2)
223 .store(f1 + "waveH")
224 end
225
226 ; writeln("add 2 pictures")
227 ; (p + p.flipVertical).store(f1 + "add")
228
229 ; writeln("add mean arithmetic mean: + is equivalent to mean")
230 ; p.mean(p.flipVertical).store(f1 + "mean") -- same as add
231
232 ; writeln("inverse operation for mean is inverseMean")
233 ; p.mean(p.flipVertical)
234 .inverseMean(p.flipVertical)
235 .store(f1 + "meanInvMean") -- same as p
236
237 ; writeln("subtract 2 pictures")
238 ; (p - p.flipVertical).store(f1 + "sub")
239
240 ; writeln("- is same as diff")
241 ; p.diff(p.flipVertical).store(f1 + "diff")
242
243 ; writeln("inverseDiff is inverse Function to - or diff")
244 ; p.diff(p.flipVertical)
245 .inverseDiff(p.flipVertical)
246 .store(f1 + "diffInvDiff") -- same as p
247
248 ; writeln("multiply 2 pictures")
249 ; (p * p.flipVertical).store(f1 + "mul")
250
251 ; writeln("minimum of 2 pictures")
252 ; (p min p.flipVertical).store(f1 + "min")
253
254 ; writeln("maximum of 2 pictures")
255 ; (p max p.flipVertical).store(f1 + "max")
256
257 ; writeln("good bye")
258
259end
260
261------------------------------------------------------------
|
Letzte Änderung: 14.02.2012 | © Prof. Dr. Uwe Schmidt |