aboutsummaryrefslogtreecommitdiff
path: root/examples/05_perspective_correction/05_perspective_correction.pd
blob: 19fe5f2c87ec2770178b3fa2a798a4793e0c80d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
#N canvas 737 110 900 736 10;
#X declare -path ../../;
#X obj 180 76 gemhead;
#X obj 180 96 pix_share_read 666 640 480 1;
#X obj 297 186 pix_opencv_findchessboardcorners;
#X obj 17 13 declare -path ../../;
#X obj 548 6 loadbang;
#X msg 587 56 \; pd dsp 1;
#X obj 567 106 pd~ -ninsig 0 -noutsig 0 -fifo 10;
#X msg 567 86 pd~ start -open ./subprocess.pd;
#X obj 100 396 pix_texture;
#X obj 100 416 rectangle 5.333 4;
#X obj 548 166 gemwin;
#X msg 590 166 destroy;
#X msg 297 26 patternSize 9 6;
#X obj 180 116 pix_rgba;
#X text 238 118 <-- switch to color just;
#X text 262 128 to see openCV drawing;
#X obj 526 323 unpack;
#X floatatom 526 343 5 0 0 0 - - -;
#X floatatom 559 343 5 0 0 0 - - -;
#X obj 624 304 unpack;
#X floatatom 624 343 5 0 0 0 - - -;
#X floatatom 657 343 5 0 0 0 - - -;
#X obj 526 223 unpack;
#X floatatom 526 244 5 0 0 0 - - -;
#X floatatom 559 244 5 0 0 0 - - -;
#X obj 624 223 unpack;
#X floatatom 624 243 5 0 0 0 - - -;
#X floatatom 657 243 5 0 0 0 - - -;
#X text 510 270 contrary to OpenGL \, OpenCV coordinates are always
positives;
#X text 102 152 needed to fix;
#X obj 297 7 loadbang;
#X text 309 42 patternSize should match the number;
#X text 309 52 of inner corners in each direction;
#X text 510 280 and the origin (0 \, 0) is the upper left corner;
#X msg 624 203 \$17 \$18;
#X msg 486 303 \$107 \$108;
#X msg 525 203 \$1 \$2;
#X msg 472 323 \$91 \$92;
#X text 25 694 2012 - Antoine Villeret - tested on Ubuntu with pd 0.43.1
\, gem 0.93.git 1482ffb;
#X obj 548 26 t b b b;
#X text 512 359 the 4 extrem corners' coordinates;
#X obj 70 658 mesh_square 10 10;
#X obj 113 537 /;
#X obj 189 537 /;
#X obj 113 493 loadbang;
#X obj 70 579 GEMglMultTransposeMatrixf;
#X obj 70 639 translateXYZ 1 1 0;
#X obj 70 559 scaleXYZ 0.003 0.003 0;
#X obj 70 599 scaleXYZ 639 479 0;
#X obj 70 468 translateXYZ -5.33333 -4 0;
#X obj 70 619 scaleXYZ 0.5 0.5 0;
#X msg 113 517 5.3333 320;
#X msg 189 517 4 240;
#N canvas 1 110 450 300 format 0;
#X obj 93 7 inlet;
#X obj 118 140 outlet;
#X msg 108 68 \$1 \$4 0 \$7 \$2 \$5 0 \$8 0 0 1 0 \$3 \$6 0 \$9;
#X connect 0 0 2 0;
#X connect 2 0 1 0;
#X restore 253 529 pd format;
#N canvas 3 79 643 318 mapMatrix 0;
#X obj 110 263 pack 0 0 0 0 0 0 0 0 0;
#X floatatom 110 121 5 0 0 0 - - -;
#X floatatom 160 121 5 0 0 0 - - -;
#X floatatom 210 121 5 0 0 0 - - -;
#X floatatom 110 141 5 0 0 0 - - -;
#X floatatom 160 141 5 0 0 0 - - -;
#X floatatom 210 141 5 0 0 0 - - -;
#X floatatom 110 161 5 0 0 0 - - -;
#X floatatom 160 161 5 0 0 0 - - -;
#X floatatom 210 161 5 0 0 0 - - -;
#X obj 110 285 outlet;
#X obj 110 29 inlet;
#X obj 110 59 unpack 0 0 0 0 0 0 0 0 0;
#X obj 146 195 t b f;
#X obj 189 196 t b f;
#X obj 231 196 t b f;
#X obj 273 195 t b f;
#X obj 316 195 t b f;
#X obj 362 195 t b f;
#X obj 406 195 t b f;
#X obj 456 195 t b f;
#X connect 0 0 10 0;
#X connect 1 0 0 0;
#X connect 2 0 13 0;
#X connect 3 0 14 0;
#X connect 4 0 15 0;
#X connect 5 0 16 0;
#X connect 6 0 17 0;
#X connect 7 0 18 0;
#X connect 8 0 19 0;
#X connect 9 0 20 0;
#X connect 11 0 12 0;
#X connect 12 0 1 0;
#X connect 12 1 2 0;
#X connect 12 2 3 0;
#X connect 12 3 4 0;
#X connect 12 4 5 0;
#X connect 12 5 6 0;
#X connect 12 6 7 0;
#X connect 12 7 8 0;
#X connect 12 8 9 0;
#X connect 13 0 0 0;
#X connect 13 1 0 1;
#X connect 14 0 0 0;
#X connect 14 1 0 2;
#X connect 15 0 0 0;
#X connect 15 1 0 3;
#X connect 16 0 0 0;
#X connect 16 1 0 4;
#X connect 17 0 0 0;
#X connect 17 1 0 5;
#X connect 18 0 0 0;
#X connect 18 1 0 6;
#X connect 19 0 0 0;
#X connect 19 1 0 7;
#X connect 20 0 0 0;
#X connect 20 1 0 8;
#X coords 0 -1 1 1 150 80 1 100 100;
#X restore 253 445 pd mapMatrix;
#X obj 100 375 pix_opencv_warpperspective;
#X obj 306 246 list prepend srcMatrix;
#X obj 306 265 list trim;
#X text 312 528 <-- transform into a 4x4;
#X text 337 538 openGL transpose matrix;
#X text 194 620 <-- some stuff to convert;
#X text 219 630 between OpenCV and OpenGL;
#X text 213 640 coordinates system;
#X text 186 599 |;
#X text 186 608 |;
#X text 186 617 |;
#X text 186 626 |;
#X text 186 635 |;
#X text 501 502 pix_opencv_wapperspective finds the transformation
matrix between srcMatrix and dstMatrix;
#X text 502 594 pix_opencv_findchessboardcorners finds chessboard corners
in the incomming image stream and send out corners coordinates as a
list trought its second outlet;
#N canvas 737 406 715 644 generates_coords 0;
#X obj 58 2 inlet;
#X obj 78 251 until;
#X obj 78 358 f;
#X msg 96 335 0;
#X obj 91 118 unpack;
#X obj 82 462 pack;
#X obj 78 188 f;
#X obj 178 251 until;
#X obj 210 358 f;
#X msg 228 335 0;
#X obj 178 287 t b b;
#X obj 178 188 f;
#X obj 91 143 t b f;
#X obj 82 501 list;
#X obj 58 521 list;
#X obj 82 482 list prepend;
#X obj 58 585 outlet;
#X text 321 358 generates source coordinates to find homography;
#X obj 58 89 t b l b;
#X obj 78 208 t f b;
#X obj 178 208 t f b;
#X obj 106 358 + 0.25;
#X obj 238 358 + 0.25;
#X obj 58 545 list prepend dstMatrix;
#X obj 58 565 route list;
#X obj 58 21 route patternSize;
#X floatatom 327 253 5 0 0 0 - - -;
#X obj 291 296 t b f;
#X obj 210 427 + 4;
#X obj 82 425 +;
#X floatatom 254 392 5 0 0 0 - - -;
#X floatatom 112 394 5 0 0 0 - - -;
#X msg 337 229 17;
#X msg 389 228 320;
#X msg 423 226 240;
#X obj 337 152 t b b;
#X obj 346 118 loadbang;
#X text 262 53 the position of the grid had been choose jsut to fit
in the Gem window \, but you can enter the real coordinates of the
grid and place the virtual camera to see it \, this is usefull when
merging with some other localisation data is needeed.;
#X obj 57 56 list;
#X connect 0 0 25 0;
#X connect 1 0 2 0;
#X connect 2 0 21 0;
#X connect 2 0 29 0;
#X connect 3 0 2 1;
#X connect 4 0 12 0;
#X connect 4 1 11 1;
#X connect 5 0 15 0;
#X connect 6 0 19 0;
#X connect 7 0 10 0;
#X connect 8 0 22 0;
#X connect 8 0 28 0;
#X connect 9 0 8 1;
#X connect 10 0 6 0;
#X connect 10 1 8 0;
#X connect 11 0 20 0;
#X connect 12 0 11 0;
#X connect 12 1 6 1;
#X connect 13 0 14 1;
#X connect 13 0 15 1;
#X connect 14 0 23 0;
#X connect 15 0 13 0;
#X connect 18 0 14 0;
#X connect 18 1 4 0;
#X connect 18 2 15 1;
#X connect 19 0 1 0;
#X connect 19 1 3 0;
#X connect 20 0 7 0;
#X connect 20 1 9 0;
#X connect 21 0 2 1;
#X connect 22 0 8 1;
#X connect 23 0 24 0;
#X connect 24 0 16 0;
#X connect 25 0 38 0;
#X connect 26 0 27 0;
#X connect 27 0 38 0;
#X connect 27 1 22 1;
#X connect 27 1 21 1;
#X connect 28 0 5 1;
#X connect 29 0 5 0;
#X connect 30 0 28 1;
#X connect 31 0 29 1;
#X connect 32 0 26 0;
#X connect 33 0 31 0;
#X connect 34 0 30 0;
#X connect 35 0 32 0;
#X connect 35 1 33 0;
#X connect 35 1 34 0;
#X connect 36 0 35 0;
#X connect 38 0 18 0;
#X restore 100 355 pd generates_coords;
#X msg 548 135 reset \, title 05_perspective_correction \, dimen 640
480 \, create \, 1;
#X obj 70 448 pix_texture;
#X obj 70 317 spigot;
#X obj 142 317 spigot 1;
#X obj 80 273 == 0;
#X obj 80 229 vradio 15 1 0 2 empty empty empty 0 -8 0 10 -262144 -1
-1 0;
#X text 97 229 CPU;
#X text 97 244 GPU;
#X text 502 529 it sends through its second outlet the 3x3 transformation
matrix;
#X text 501 556 it also apply the tansformation matrix on incomming
image stream but you can apply it in OpenGL \, result is even better
;
#X text 502 643 it also draws found corners on the image stream;
#X text 504 666 here the coordinates of found corners are used as a
scrMatrix for pix_opencv_warpperspective;
#X obj 493 390 cnv 15 370 100 empty empty empty 20 12 0 14 -261234
-66577 0;
#X text 508 399 this patch demonstrates how to correct perspective
with pix_opencv_warpperspective and pix_opencv_findchessboardcorners
;
#X text -18 0 declare path to be sure externals were found...;
#X text 354 95 <-- receive image from subprocess.pd;
#X obj 224 198 pix_flip;
#X text 102 162 the flip flag;
#X text 102 172 this is a bug;
#X text 184 159 -->;
#X obj 180 136 t a a;
#X text 508 440 use subprocess patch to move the chessboard;
#X connect 0 0 1 0;
#X connect 1 0 13 0;
#X connect 2 0 74 0;
#X connect 2 0 73 0;
#X connect 2 1 37 0;
#X connect 2 1 35 0;
#X connect 2 1 36 0;
#X connect 2 1 34 0;
#X connect 2 1 56 0;
#X connect 4 0 39 0;
#X connect 7 0 6 0;
#X connect 8 0 9 0;
#X connect 11 0 10 0;
#X connect 12 0 2 0;
#X connect 12 0 70 0;
#X connect 13 0 91 0;
#X connect 16 0 17 0;
#X connect 16 1 18 0;
#X connect 19 0 20 0;
#X connect 19 1 21 0;
#X connect 22 0 23 0;
#X connect 22 1 24 0;
#X connect 25 0 26 0;
#X connect 25 1 27 0;
#X connect 30 0 12 0;
#X connect 34 0 25 0;
#X connect 35 0 19 0;
#X connect 36 0 22 0;
#X connect 37 0 16 0;
#X connect 39 0 71 0;
#X connect 39 1 7 0;
#X connect 39 2 5 0;
#X connect 42 0 47 1;
#X connect 43 0 47 2;
#X connect 44 0 51 0;
#X connect 44 0 52 0;
#X connect 45 0 48 0;
#X connect 46 0 41 0;
#X connect 47 0 45 0;
#X connect 48 0 50 0;
#X connect 49 0 47 0;
#X connect 50 0 46 0;
#X connect 51 0 42 0;
#X connect 52 0 43 0;
#X connect 53 0 45 1;
#X connect 54 0 53 0;
#X connect 55 0 8 0;
#X connect 55 1 54 0;
#X connect 56 0 57 0;
#X connect 57 0 55 0;
#X connect 70 0 55 0;
#X connect 71 0 10 0;
#X connect 72 0 49 0;
#X connect 73 0 72 0;
#X connect 74 0 55 0;
#X connect 75 0 74 1;
#X connect 76 0 75 0;
#X connect 76 0 73 1;
#X connect 91 0 2 0;