aboutsummaryrefslogtreecommitdiff
path: root/Gem/pix_blobtracker.pd
blob: b496ad068bce33ae2ad60b7eb205187f0a30ee09 (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
#N canvas 77 45 654 552 10;
#X declare -lib Gem -lib iemmatrix;
#N canvas 0 0 571 399 matrix->indexlist 0;
#X obj 133 90 inlet;
#X obj 133 298 outlet;
#X obj 133 163 mtx;
#X msg 133 137 row;
#X obj 133 109 t b a b;
#X obj 212 227 i;
#X obj 239 228 + 1;
#X obj 133 248 pack 0 0 0 0;
#X obj 133 210 t l b;
#X msg 133 273 \$4 \$1 \$2 \$3;
#X msg 228 206 0;
#X msg 133 189 \$1 \$2 \$3;
#X connect 0 0 4 0;
#X connect 2 0 11 0;
#X connect 3 0 2 0;
#X connect 4 0 3 0;
#X connect 4 1 2 1;
#X connect 4 2 10 0;
#X connect 5 0 6 0;
#X connect 5 0 7 3;
#X connect 6 0 5 1;
#X connect 7 0 9 0;
#X connect 8 0 7 0;
#X connect 8 1 5 0;
#X connect 9 0 1 0;
#X connect 10 0 5 1;
#X connect 11 0 8 0;
#X restore 324 518 pd matrix->indexlist;
#X obj 97 197 inlet gemlist;
#X obj 97 402 outlet gemlist;
#X obj 231 429 t a;
#X obj 231 343 t a a;
#X obj 324 428 mtx_mul;
#X obj 354 490 outlet numblobs;
#X obj 324 449 t a a;
#X obj 354 471 mtx_size;
#X obj 231 363 mtx_resize \$1 2;
#N canvas 0 0 518 479 mtx_matcher 0;
#X obj 61 200 mtx_distance2;
#X obj 61 176 t a a;
#X obj 61 244 t a a;
#X obj 61 279 mtx_mul;
#X obj 61 325 outlet matched;
#X obj 171 325 outlet matcher;
#X obj 147 177 inlet dest;
#X obj 61 149 inlet source;
#X text 25 105 both "source" and "dest" must have the same number of
columns (dimension in feature-space);
#N canvas 0 0 618 479 mtx_rowpermutate 0;
#X obj 150 214 t b a;
#X obj 150 235 mtx;
#X obj 150 256 mtx_mul;
#X obj 111 192 mtx_pivot -1;
#X text 17 19 this unfortunately does not guarantee to give as a minimum
trace of the result!;
#X obj 150 309 outlet rowpermutator;
#X obj 111 141 inlet permutans;
#X connect 0 0 1 0;
#X connect 0 1 2 1;
#X connect 1 0 2 0;
#X connect 2 0 5 0;
#X connect 3 1 0 0;
#X connect 3 2 1 1;
#X connect 6 0 3 0;
#X restore 61 221 pd mtx_rowpermutate;
#X text 34 383 this algorithm is _far_ from being perfect! the [mtx_rowpermutate]
does not really guarantee that the trace of the result is a global
minimum \; if it is not \, than the match will be sub-optimal! this
will be even worse \, if there are several _equal_ (sub)minima in the
distance-matrix.;
#X text 158 194 greater distances have an extra penalty (^2) \; is
this ok?;
#X text 32 52 we calculate the euclidean distance between the vectors
of the 2 sets and try to find a trace with minimum penalty;
#X text 32 22 this tries to get the best (weighted) match between 2
sets of feature-vectors.;
#X connect 0 0 9 0;
#X connect 1 0 0 0;
#X connect 1 1 3 1;
#X connect 2 0 3 0;
#X connect 2 1 5 0;
#X connect 3 0 4 0;
#X connect 6 0 0 1;
#X connect 7 0 1 0;
#X connect 9 0 2 0;
#X restore 231 397 pd mtx_matcher;
#X text 91 114 this blobtracker is far from being perfect. for an explanation
read the comments in [pd mtx_matcher];
#X text 93 536 we don't want to output "matrix" \, but pure pd-lists
instead;
#X obj 324 566 outlet bloblists;
#X text 344 402 this is the work-horse for the tracking;
#X text 95 10 part of Gem;
#X text 51 253 the work-horse for detection;
#X obj 301 224 loadbang;
#X obj 301 243 f \$1;
#X obj 301 262 moses 1;
#X msg 331 343 6 2;
#X obj 301 281 t b b;
#X text 56 155 TODO: output only those blobs that are really detected
;
#X obj 231 322 mtx_resize \$1 0;
#X msg 331 302 6 0;
#X obj 97 269 pix_multiblob \$1;
#X obj 97 30 declare -lib Gem -lib iemmatrix;
#X text 92 66 copyright (c) IOhannes m zmoelnig \, 2005 \; you may
use this under the terms of the GnuGPL v2.0 or later;
#X connect 0 0 13 0;
#X connect 1 0 25 0;
#X connect 3 0 10 1;
#X connect 4 0 9 0;
#X connect 4 1 5 1;
#X connect 5 0 7 0;
#X connect 7 0 0 0;
#X connect 7 1 8 0;
#X connect 8 0 6 0;
#X connect 9 0 10 0;
#X connect 10 0 3 0;
#X connect 10 1 5 0;
#X connect 17 0 18 0;
#X connect 18 0 19 0;
#X connect 19 0 21 0;
#X connect 20 0 9 1;
#X connect 21 0 20 0;
#X connect 21 1 24 0;
#X connect 23 0 4 0;
#X connect 24 0 23 1;
#X connect 25 0 2 0;
#X connect 25 1 23 0;